Tải bản đầy đủ (.docx) (8 trang)

Báo cáo đồ họa máy tính CDIO k12 HAUI

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (107.36 KB, 8 trang )

Lời mở đầu
Đồ họa máy tính là một lĩnh vực của khoa học máy tính nghiên cứu về
cơ sở toán học, các thuật toán cũng như các kĩ thuật để cho phép tạo,
hiển thị và điều khiển hình ảnh trên màn hình máy tính.
Về bản chất: đó là 1 quá trình xây dựng và phát triển các công cụ trên
cả hai lĩnh vực phần cứng và phần mềm hỗ trợ cho các lập trình viên
thiết kế các chương trình có khả năng đồ họa cao.
Việc mô tả dữ liệu thông qua các hình ảnh và màu sắc đa dạng của nó,
các chương trình đồ họa thường thu hút người sử dụng bởi tính thân
thiện, dễ dùng,… kích thích khả năng sang tạo và nâng cao năng suất
làm việc. Do vậy, đồ họa máy tính được ứng dụng trong nhiều lĩnh vực:
giáo dục, thương mại…
Các chương trình đồ họa ứng dụng cho phép chúng ta làm việc với máy
tính một cách thoải mái, tự nhiên.
Là sinh viên chúng em được tìm hiểu và làm quen với một số kĩ thuật đồ
họa trên máy tính thông qua tài liệu, bài giảng do cô giáo Vũ Minh Yến
giảng dạy. Với những kiến thức đã học chúng em quyết định chọn đề tài:
Xây dựng mô hình dồ chơi Robot theo OpenGL hiện đại.


1. Giới thiệu tóm tắt
Sự ra đời của đồ họa máy tính thực sự là cuộc cách mạng trong giao tiếp
giữa người dùng và máy tính. Với lượng thông tin trực quan, đa dạng và
phong phú được chuyển tải qua hình ảnh, các ứng dụng đồ họa máy tính
đã lôi cuốn nhiều người nhờ tính thân thiện, dễ dùng, kích thích khả năng
sáng tạo và tăng đáng kể hiệu suất làm việc.
Đồ họa máy tính ngày nay được ứng dụng rất rộng rãi trong nhiều lĩnh
vực khoa học, kĩ thuật, nghệ thuật, kinh doanh, quản lí, … Các ứng dụng
đồ họa rất đa dạng, phong phú và phát triển liên tục không ngừng. Ngày
nay, hầu như không có chương trình ứng dụng nào mà không sử dụng kĩ
thuật đồ họa để làm tăng tính hấp dẫn của mình.


Một hệ đồ họa bao giờ cũng có hai thành phần chính đó là phần cứng và
phần mềm..
Thành phần phần cứng bao gồm các thiết bị hiển thị (hay là thiết bị xuất)
và các thiết bị nhập. Tiêu biểu nhất trong các thiết bị hiển thị là màn hình
mà cơ chế hoạt động dựa trên cấu tạo của ống tia âm cực CRT. Các thiết
bị nhập dữ liệu thường gặp bao gồm bàn phím, chuột.
Phần mềm đồ họa có thể chia làm hai loại đó là các công cụ lập trình
như các hàm thư viện của C, Pascal, GL, … và các ứng dụng phục vụ cho
một mục đích nào đó như AutoCAD, Photoshop, …

2. Ý tưởng


Đồ chơi robot là những đồ chơi phổ biến cho trẻ em ngày nay. Chúng
thường là những đồ vật thu nhỏ, được tạo dáng đơn giản và có màu
sắc hấp dẫn. Đồ chơi có những nét tiêu biểu dưới dạng khái quát, bảo
đảm tái tạo các hoạt động tương ứng của đồ vật. Ví dụ đồ chơi robot giúp
trẻ tăng trải nghiêm và tính sáng tạo của trẻ.
Với những đồ chơi robot, trẻ em có thể tăng cường nhận thức và học hỏi
máy móc, chức năng của từng loại. Do đó, với những món đồ chơi mô
hình như: robot, ô tô các loại, tàu, máy bay hoặc thêm các mô hình tàu
thủy… trẻ em sẽ tận hưởng được nhiều lợi ích như:
- Kích thích khả năng khám phá và tự học hỏi của trẻ em.
- Giúp trẻ em chơi sáng tạo với các kết hợp các loại máy móc.
Robot là đồ chơi phổ biến cho các bé nam hiện nay do vậy nhóm chúng
em quyết định làm về đồ chơi robot

3. Mô tả chuyển động của robot.
 Nhóm chúng em tiến hành mô tả 6 hoạt động phổ biến nhất trong
chuyển động của robot là :

- Đầu robot có thể quay 360 độ.
- Tay robot có thể quay 360 độ.
- Chân robot có thể quay 360 độ
- Robot có thể quay 360 độ
- Robot có thể bay tới một điểm khác
- Robot có thể di chuyển
 Mô tả chi tiết từng chuyển động
a) Đầu robot có thể quay 360 độ.
- Để làm cho đầu robot có thể quay bên trái và bên phải 360 độ được sử
dụng phím “m’ và phím “Shift + m” để quay.
b) Robot có thể quay 360o
- Robot có thể quay theo trục OX khi nhấn phím “x”.
- Robot có thể quay theo trục OY khi nhấn phím “y”.
-Robot có thể quay theo trục OZ khi nhấn phím “z”.
c) Robot có thể bay tới một điểm khác.
- Sử dụng phím “b” để bay lên và phím “Shift + b” để hạ xuống.
d) Tay robot có thể quay 360 độ.
- Để làm cho tay trái robot có thể quay bên trái và bên phải 360 độ
được sử dụng phím “c’ và phím “Shift + c” để quay.
- Để làm cho tay phải robot có thể quay bên trái và bên phải 360 độ
được sử dụng phím “e’ và phím “Shift + e” để quay.


e) Chân robot có thể quay 360 độ
- Để làm cho chân trái robot có thể quay bên trái và bên phải 360
độ được sử dụng phím “g’ và phím “Shift + g” để quay.
- Để làm cho chân phải robot có thể quay bên trái và bên phải 360
độ được sử dụng phím “h’ và phím “Shift + h” để quay.
f) Robot có thể di chuyển
- Sử dụng timer cho việc làm robot di chuyển về đằng trước.


4. Các phép biến đổi sử dụng
4.1 Phép biến đổi
- Phép tịnh tiến.
- Phép quay.
+ Phép quay quanh trục OX.
+ Phép quay quanh trục OY.
+ Phép quay quanh trục OZ.
- Phép biến đổi tỉ lệ.
- Phép chiếu sáng.
- Góc nhìn (view).
- Điều khiển bằng bàn phím
- Điều khiển bằng chuột
- Sử dụng Timer để di chuyển.
4.2 Phép vẽ hình cơ bản
- Vẽ hình hộp chữ nhật.

5. Code mô tả hoạt động
 Đầu robot có thể quay 360 độ.
void caidau()
{
/*đầu*/
modelStack.push(model);
model *= Translate(0, 0.31, 0)*RotateY(theta[4]);
dau(0.20, 0.1, 0.07);
/*mắt trái*/
model *= Translate(0.05, 0.0025, 0.05);
dau(0.025, 0.025, 0.025);
/*mắt phải*/



model *= Translate(-0.1, 0, 0);
dau(0.025, 0.025, 0.025);
model = modelStack.pop();
}

Gán phím:
case 'm': /*Điều khiển đầu robot quay bên trái 360 độ*/
theta[4] += step;
if (theta[4] > 360)theta[4] -= 360;
glutPostRedisplay();
break;
case 'M': /*Điều khiển đầu robot quay bên phải 360 độ*/
theta[4] -= step;
if (theta[4] > 360)theta[4] -= 360;
glutPostRedisplay();
break;

 Robot có thể quay 360o
- Robot có thể quay theo trục Ox, Oy, Oz
GLfloat dr = 5;

case 'x': /*Điều khiển cả robot theo trục Ox*/
model *= RotateX(dr);
glutPostRedisplay();
break;
case 'X':
model *= RotateX(-dr);
glutPostRedisplay();
break;

case 'y': /*Điều khiển cả robot theo trục Oy*/
model *= RotateY(dr);
glutPostRedisplay();
break;
case 'Y':
model *= RotateY(-dr);
glutPostRedisplay();
break;
case 'z': /*Điều khiển cả robot theo trục Oz*/
model *= RotateZ(dr);
glutPostRedisplay();
break;
case 'Z':
model *= RotateZ(-dr);
glutPostRedisplay();
break;

 Robot có thể bay tới một điểm khác
case 'b': /*Điều khiển robot bay theo truc oy*/
model *= Translate(0, 0.1, 0);
glutPostRedisplay();
break;
case 'B': /*Điều khiển robot bay theo trục Oy*/
model *= Translate(0, -0.1, 0);
glutPostRedisplay();break;

 Tay robot có thể quay 360 độ
void taytrai()
{



/*khớp tay trên*/
modelStack.push(model);
model *= Translate(0.165, 0.23, 0);
tay(0.025, 0.025, 0.025);
//cẳng tay trên
model *= RotateX(theta[0])*Translate(0.025, -0.07, 0);
tay(0.04, 0.05, 0.13);
//Khớp tay dưới
model *= Translate(0, -0.075, 0);
tay(0.025, 0.025, 0.025);
//cẳng tay dướia
model *= Translate(0, -0.075, 0);
tay(0.04, 0.05, 0.13);
model = modelStack.pop();

}
void tayphai()
{
/*khớp tay*/
modelStack.push(model);
model *= Translate(-0.165, 0.23, 0);
tay(0.025, 0.025, 0.025);
//cẳng tay trên
model *= RotateX(theta[1])*Translate(-0.025, -0.07, 0);
tay(0.04, 0.05, 0.13);
//Khớp tay dưới
model *= Translate(0, -0.075, 0);
tay(0.025, 0.025, 0.025);
//cẳng tay dưới

model *= Translate(0, -0.075, 0);
tay(0.04, 0.05, 0.13);
model = modelStack.pop();
}

Gán phím:
case 'c': /*Điều khiển tay trái robot quay 360 độ*/
theta[0] -= step;
if (theta[0] > 360)theta[0] -= 360;
glutPostRedisplay();
break;
case 'C': /*Điều khiển tay trái robot quay 360 độ*/
theta[0] += step;
if (theta[0] > 360)theta[0] -= 360;
glutPostRedisplay();
break;
case 'e': /*Điều khiển tay phải robot quay 360 độ*/
theta[1] -= step;
if (theta[1] > 360)theta[1] -= 360;
glutPostRedisplay();
break;
case 'E': /*Điều khiển tay phải robot quay 360 độ*/
theta[1] += step;
if (theta[1] > 360)theta[1] -= 360;
glutPostRedisplay();
break;

 Chân robot có thể quay 360 độ
void chantrai()
{

/*khớp chân trên*/


modelStack.push(model);
model *= Translate(0.1, -0.265, 0);
chan(0.025, 0.025, 0.025);
/*cẳng chân trên*/
model *= RotateX(theta[2]) * Translate(0, -0.085, 0);
chan(0.06, 0.1, 0.15);
/*khớp chân dưới*/
model *= Translate(0, -0.085, 0);
chan(0.025, 0.025, 0.025);
/*cẳng chân dưới*/
model *= Translate(0, -0.085, 0);
chan(0.06, 0.1, 0.15);
model = modelStack.pop();
}
void chanphai()
{
/*khớp chân trên*/
modelStack.push(model);
model *= Translate(-0.1, -0.265, 0);
chan(0.025, 0.025, 0.025);
/*cẳng chân trên*/
model *= RotateX(theta[3]) * Translate(0, -0.085, 0);
chan(0.06, 0.1, 0.15);
/*khớp chân dưới*/
model *= Translate(0, -0.085, 0);
chan(0.025, 0.025, 0.025);
/*cẳng chân dưới*/

model *= Translate(0, -0.085, 0);
chan(0.06, 0.1, 0.15);
model = modelStack.pop();
}

Gán phím:
case 'g': /*Điều khiển chân trái robot quay 360 độ*/
theta[2] -= step;
if (theta[2] > 360)theta[2] -= 360;
glutPostRedisplay();
break;
case 'G': /*Điều khiển chân trái robot quay 360 độ*/
theta[2] += step;
if (theta[2] > 360)theta[2] -= 360;
glutPostRedisplay();
break;
case 'h': /*Điều khiển chân phải robot quay 360 độ*/
theta[3] -= step;
if (theta[3] > 360)theta[3] -= 360;
glutPostRedisplay();
break;
case 'H': /*Điều khiển chân phải robot quay 360 độ*/
theta[3] += step;
if (theta[3] > 360)theta[3] -= 360;
glutPostRedisplay();
break;

 Robot có thể di chuyển
/*sử dụng timer để di chuyển*/
mat4 model1;



void timer1(int value)
{
if (Axis == 0)
{
model1 *= Translate(0, 0, 0.0001);
glutPostRedisplay();
glutTimerFunc(150, timer1, 0);
}
}
glutTimerFunc(0.01, timer1, 0);



×