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

BÀI tập NHÓM học PHẦN đồ họa máy TÍNH đề tài mô PHỎNG HOẠT ĐỘNG một số đồ CHƠI BẰNG gỗ của TRẺ EM

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 (384.09 KB, 22 trang )

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
----------

BÀI TẬP NHĨM HỌC PHẦN ĐỒ HỌA MÁY TÍNH
ĐỀ TÀI: MÔ PHỎNG HOẠT ĐỘNG MỘT SỐ ĐỒ CHƠI
BẰNG GỖ CỦA TRẺ EM

Giảng viên hướng dẫn: Ths. Vũ Minh Yến
Nhóm:

7

Sinh viên thực hiện:

Trần Chí Luân
Đào Hải Nam
Nguyễn Văn Ninh

Hà Nội – Năm 2021


Mục lục
CHƯƠNG 1. MƠ TẢ BÀI TỐN....................................................................4
1.1. Giới thiệu đề tài......................................................................................4
1.2. Mơ tả mơ hình và kịch bản.....................................................................4
1.2.1. Đồn tàu bằng gỗ.............................................................................4
1.2.2. Chong chóng................................................................................... 5
1.2.3. Máy bay bằng gỗ.............................................................................5
1.2.4. Xe tăng bằng gỗ...............................................................................6
1.2.5. Điều khiển....................................................................................... 6


CHƯƠNG 2. MỘT SỐ KỸ THUẬT ĐIỂN HÌNH PHÁT TRIỂN CHƯƠNG
TRÌNH...................................................................................................................7
2.1. Thiết kế và cài đặt: Đồn tàu bằng gỗ....................................................7
2.1.1. Mơ hình phân cấp............................................................................7
2.1.2. Kỹ thuật cài đặt............................................................................... 7
2.2. Thiết kế và cài đặt: Chong chóng.........................................................11
2.2.1. Mơ hình phân cấp..........................................................................11
2.2.2. Kỹ thuật cài đặt............................................................................. 11
2.3. Thiết kế và cài đặt: Máy bay bằng gỗ.................................................. 13
2.3.1. Mơ hình phân cấp..........................................................................13
2.3.2. Kỹ thuật cài đặt............................................................................. 13
2.4. Thiết kế và cài đặt: Xe tăng bằng gỗ....................................................17
2.4.1. Mơ hình phân cấp..........................................................................17
2.4.2. Kỹ thuật cài đặt............................................................................. 17
2.5. Thiết lập và điều khiển phép chiếu, camera.........................................19
CHƯƠNG 3. KẾT QUẢ CHƯƠNG TRÌNH..................................................20
3.1. Mơ tả kết quả........................................................................................20
3.2. Các hình ảnh kết quả............................................................................ 20

2


MỞ ĐẦU
Đồ họa máy tính là phương pháp và cơng nghệ dùng trong việc chuyển
đổi qua lại giữa dữ liệu và hình ảnh bằng máy tính. Đồ 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ề ở 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.
Đồ họa máy tính có liên quan ít nhiều đến một số lĩnh vực như đại số, hình
học giải tích, hình học họa hình, quang học, ... và kĩ thuật máy tính, đặc biệt

là chế tạo phần cứng (các loại màn hình, các thiết bị xuất, nhập, các vỉ mạch
đồ họa...).
Ngày nay, Đồ họa máy tính đượ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.
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 những 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 đã được học và tìm hiểu chúng em quyết
định chọn đề tài: Mô phỏng hoạt động một số đồ chơi bằng gỗ của trẻ em theo
OpenGL hiện đại.


CHƯƠNG 1. MƠ TẢ BÀI TỐN
1.1. Giới thiệu đề tài
Đồ chơi bằng gỗ là những đồ vật được chơi bởi trẻ em trong các hoạt động
giải trí, nó giúp cho trẻ em rèn luyện nhiều kĩ năng phát triển. Đồ chơi bằng
gỗ thường có những nét tiêu biểu dưới dạng khái quát, tái hiện các hoạt động
tương ứng của đồ vật. Ví dụ như đồn tàu bằng gỗ, chong chóng, máy bay
trực thăng bằng gỗ, …
Đồ chơi bằng gỗ là những vật dụng khá quen thuộc và phổ biến với trẻ
em. Do vậy nhóm chúng em quyết định chọn những đồ chơi bằng gỗ của trẻ
em gồm có: Đồn tàu bằng gỗ, chong chóng, máy bay bằng gỗ và xe tăng
bằng gỗ để thực hiện đề tài.

1.2. Mô tả mô hình và kịch bản
1.2.1. Đồn tàu bằng gỗ

Hình 1- 1. Đồn tàu bằng gỗ
- Mơ hình đồn tàu bằng gỗ:
+Toa 1: Đầu tàu, buồng lái, ống khói, khung tàu, 4 bánh xe.

+Toa 2: Khung tàu, buồng chở khách, 4 bánh xe.
+Toa 3: Khung tàu, buồng chở khách, 4 bánh xe.
- Mơ phỏng hoạt động: Cả đồn tàu có thể chuyển động về phía trước
(theo chiều -Ox) và phía sau (theo chiều +Ox).
- Ý tưởng dụng mơ hình: Ta sẽ dựng mơ hình đồn tàu từ những hình
học đơn giản.
+Dùng hình lập phương để làm buồng lái, khung tàu.
+Dùng hình trụ trịn để làm bánh xe, ống khói.
+Dùng hình bán trụ để làm đầu tàu.


1.2.2. Chong chóng

Hình 1- 2. Chong chóng bằng gỗ
- Mơ hình chong chóng bằng gỗ:
+Thân: 1 trụ đúng, 1 trụ ngang đỡ cánh quạt.
+Quạt: 3 cánh.
- Mô phỏng hoạt động: Quạt của chong chóng có thể quay (theo trục Oz)
cùng chiều kim đồng hồ.
- Toàn bộ các bộ phận của chong chóng sẽ dùng hình lập phương để xây
dựng.
1.2.3. Máy bay bằng gỗ

Hình 1- 3. Máy bay bằng gỗ
- Mơ hình máy bay bằng gỗ:
+Thân: là một hình trụ trịn
trịn


+Đi:

gồm các
hình lăng
trụ tam
giác được
ghép với
thân.

+Cánh: là 2 hình lập phương được ghép với nhau bằng 4 hình trụ
+Bánh: được làm từ hình trụ trịn.
+Cánh quạt: được làm từ hình lập phương được ghép vào thân bằng
một trục quay.

- Chuyển động: Máy bay có thể chạy về phía trước theo trục Ox, đồng
thời cánh quát cũng quay 360 độ theo chiều kim đồng hồ.
1.2.4. Xe tăng bằng gỗ

Hình 1- 4. Xe tăng bằng gỗ
- Mơ hình xe tăng bằng gỗ
+ Thân xe: làm từ hình lập phương.
+ Bánh xe: gồm 6 bánh xe làm từ hình trụ trịn.
+ Pháo: làm từ hình trụ trịn ghép với một khối lập phương có thể
quay 360 độ.
- Chuyển động: Xe tăng có thể chạy về phía trước đồng thời nịng pháo
cũng quay quanh trục Oy 360 độ.
1.2.5. Điều khiển
- Khi nhấn phím “c” tất cả các đối tượng sẽ bắt đầu chuyển động đồng
thời.
- Để điều khiển góc nhìn của camera, sử dụng các phim: “x”, “X”, “y”,
“Y”, “z”, “Z”.



CHƯƠNG 2. MỘT SỐ KỸ THUẬT ĐIỂN HÌNH PHÁT
TRIỂN CHƯƠNG TRÌNH
2.1. Thiết kế và cài đặt: Đồn tàu bằng gỗ
2.1.1. Mơ hình phân cấp

2.1.2. Kỹ thuật cài đặt
mat4 instance_tau; GLfloat
vitri_tau = -0.5;
void toa_1()
{
mat4 instance;
//Gam xe
instance = Translate(-0.5+vitri_tau, 0.0, 0.0 +
vitri_tau)*Scale(0.5, 0.2, 0.3);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_tau*instance); glDrawArrays(GL_TRIANGLES,
0, Index);
//buong lai
instance = Translate(-0.375 + vitri_tau, 0.2, 0.0 +
vitri_tau)*Scale(0.25, 0.25, 0.3);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_tau*instance); glDrawArrays(GL_TRIANGLES,
0, Index);
//dau xe
instance = Translate(-0.6 + vitri_tau, 0.1, 0.0 +
vitri_tau)*Scale(0.5, 0.45, 0.5);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_tau*instance);
glDrawArrays(GL_TRIANGLES, Index_Trutron, Index_bantru Index_Trutron);



//ong khoi
instance = Translate(-0.6 + vitri_tau, 0.325, 0.0 +
vitri_tau)*Scale(0.2, 0.5, 0.2);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_tau*instance);
glDrawArrays(GL_TRIANGLES, Index, Index_Trutron - Index);
//banh xe
instance = Translate(-0.65 + vitri_tau, -0.1, 0.175 +
vitri_tau)*RotateX(90)*Scale(0.4, 0.1, 0.4);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_tau*instance);
glDrawArrays(GL_TRIANGLES, Index, Index_Trutron - Index);
instance = Translate(-0.35 + vitri_tau, -0.1, 0.175 +
vitri_tau)*RotateX(90)*Scale(0.4, 0.1, 0.4);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_tau*instance);
glDrawArrays(GL_TRIANGLES, Index, Index_Trutron - Index);
instance = Translate(-0.65 + vitri_tau, -0.1, -0.175 +
vitri_tau)*RotateX(90)*Scale(0.4, 0.1, 0.4);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_tau*instance);
glDrawArrays(GL_TRIANGLES, Index, Index_Trutron - Index);
instance = Translate(-0.35 + vitri_tau, -0.1, -0.175 +
vitri_tau)*RotateX(90)*Scale(0.4, 0.1, 0.4);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_tau*instance);
glDrawArrays(GL_TRIANGLES, Index, Index_Trutron - Index);
}

void toa_2()
{
mat4 instance;
//Mối nối 2 Toa
instance = Translate(-0.2 + vitri_tau, 0.0, 0.0 +
vitri_tau)*RotateZ(90)*Scale(0.2, 0.2, 0.2);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_tau*instance);
glDrawArrays(GL_TRIANGLES, Index, Index_Trutron - Index);
//gam xe
instance = Translate(0.05 + vitri_tau, 0.0, 0.0 +
vitri_tau)*Scale(0.5, 0.2, 0.3);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_tau*instance); glDrawArrays(GL_TRIANGLES,
0, Index);
//toa
instance = Translate(0.05 + vitri_tau, 0.2, 0.0 +
vitri_tau)*Scale(0.4, 0.2, 0.3);


glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_tau*instance); glDrawArrays(GL_TRIANGLES,
0, Index);
//banh xe
instance = Translate(-0.1 + vitri_tau, -0.1, 0.175 +
vitri_tau)*RotateX(90)*Scale(0.4, 0.1, 0.4);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_tau*instance);
glDrawArrays(GL_TRIANGLES, Index, Index_Trutron - Index);
instance = Translate(0.2 + vitri_tau, -0.1, 0.175 +

vitri_tau)*RotateX(90)*Scale(0.4, 0.1, 0.4);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_tau*instance);
glDrawArrays(GL_TRIANGLES, Index, Index_Trutron - Index);
instance = Translate(-0.1 + vitri_tau, -0.1, -0.175 +
vitri_tau)*RotateX(90)*Scale(0.4, 0.1, 0.4);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_tau*instance);
glDrawArrays(GL_TRIANGLES, Index, Index_Trutron - Index);
instance = Translate(0.2 + vitri_tau, -0.1, -0.175 +
vitri_tau)*RotateX(90)*Scale(0.4, 0.1, 0.4);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_tau*instance);
glDrawArrays(GL_TRIANGLES, Index, Index_Trutron - Index);
}
void toa_3()
{
mat4 instance;
//moi noi
instance = Translate(0.35 + vitri_tau, 0.0, 0.0 +
vitri_tau)*RotateZ(90)*Scale(0.2, 0.2, 0.2);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_tau*instance);
glDrawArrays(GL_TRIANGLES, Index, Index_Trutron - Index);
//gam xe
instance = Translate(0.6 + vitri_tau, 0.0, 0.0 +
vitri_tau)*Scale(0.5, 0.2, 0.3);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_tau*instance);
glDrawArrays(GL_TRIANGLES, 0, Index);

//buong lai
instance = Translate(0.6 + vitri_tau, 0.2, 0.0 +
vitri_tau)*Scale(0.4, 0.2, 0.3);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_tau*instance);
glDrawArrays(GL_TRIANGLES, 0, Index);


//banh xe
instance = Translate(0.45 + vitri_tau, -0.1, 0.175 +
vitri_tau)*RotateX(90)*Scale(0.4, 0.1, 0.4);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_tau*instance);
glDrawArrays(GL_TRIANGLES, Index, Index_Trutron - Index);
instance = Translate(0.75 + vitri_tau, -0.1, 0.175 +
vitri_tau)*RotateX(90)*Scale(0.4, 0.1, 0.4);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_tau*instance);
glDrawArrays(GL_TRIANGLES, Index, Index_Trutron - Index);
instance = Translate(0.45 + vitri_tau, -0.1, -0.175 +
vitri_tau)*RotateX(90)*Scale(0.4, 0.1, 0.4);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_tau*instance);
glDrawArrays(GL_TRIANGLES, Index, Index_Trutron - Index);
instance = Translate(0.75 + vitri_tau, -0.1, -0.175 +
vitri_tau)*RotateX(90)*Scale(0.4, 0.1, 0.4);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_tau*instance);
glDrawArrays(GL_TRIANGLES, Index, Index_Trutron - Index);
}

// Thơng số chuyển động cho đồn tàu
GLfloat tau_chay = 0;
GLfloat x_tau = 0, y_tau = 0, z_tau = 0; //Biến dùng cho keyboard
void Doantau()
{
instance_tau = Translate(tau_chay, 0.0, 0.0)
*RotateY(40)*RotateX(x_tau)*RotateY(y_tau)*RotateZ(z_tau); toa_1();
toa_2();
toa_3();
}


2.2. Thiết kế và cài đặt: Chong chóng
2.2.1. Mơ hình phân cấp

2.2.2. Kỹ thuật cài đặt
mat4 instance_chongchong;
GLfloat vitri_chongchong = 1.0;
GLfloat h = 0.5, w = 0.05;
GLfloat dai = 0.25, rong = 0.05, day = 0.01;
void than_chongchong()
{
mat4 instance;
instance = Translate(0.0, 0.5*h, 0.0 +
vitri_chongchong)*Scale(w, h, w);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_chongchong*instance);
glDrawArrays(GL_TRIANGLES, 0, Index);
instance = Translate(0.0, h, 0.25*h +
vitri_chongchong)*Scale(w, w, 0.5*h);

glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_chongchong*instance);
glDrawArrays(GL_TRIANGLES, 0, Index);
}
void quat_chongchong()
{
//canh tren mat4 instance;
instance = Translate(0.0, 0.5*dai, 0.5*h +
vitri_chongchong)*Scale(rong, dai, day);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_chongchong*instance);
glDrawArrays(GL_TRIANGLES, 0, Index);


instance = Translate(0.5*dai - 0.5*w, -w, 0.5*h +
vitri_chongchong)*RotateZ(-30)*Scale(dai, rong, day);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_chongchong*instance); glDrawArrays(GL_TRIANGLES,
0, Index);
instance = Translate(-0.5*dai + 0.5*w, -w, 0.5*h +
vitri_chongchong)*RotateZ(30)*Scale(dai, rong, day);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_chongchong*instance); glDrawArrays(GL_TRIANGLES,
0, Index);
}
// Các thông số chuyển động cho chong chóng
GLfloat quat_chongchong_quay = 0;
GLfloat x_chong = 0, y_chong = 0; //Biến dùng cho keyboard
void Chongchong()
{

instance_chongchong = RotateY(45)
*RotateX(x_chong)*RotateY(y_chong);
than_chongchong();
instance_chongchong *= Translate(0.0, h,
0.0)*RotateZ(quat_chongchong_quay); quat_chongchong();
}


2.3. Thiết kế và cài đặt: Máy bay bằng gỗ
2.3.1. Mơ hình phân cấp

2.3.2. Kỹ thuật cài đặt
mat4 instance_maybay;
GLfloat vitri_maybay = -0.5;
void than_maybay()
{
mat4 instance;
instance = Translate(0.0, 0.0 + vitri_maybay, 0.0)*RotateZ(- 90);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_maybay*instance); glDrawArrays(GL_TRIANGLES,
Index_bantru, Index_chopcut - Index_bantru);
instance = Translate(-0.6, 0.0 + vitri_maybay,
0)*RotateZ(90)*Scale(0.25, 0.5, 0.25);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_maybay*instance); glDrawArrays(GL_TRIANGLES, Index,
Index_Trutron - Index);
//Canh duoi
instance = Translate(-0.25, -0.25 + vitri_maybay, 0.0)*Scale(0.3,
0.02, 1.7);



glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_maybay*instance);
glDrawArrays(GL_TRIANGLES, 0, Index);
//Canh tren
instance = Translate(-0.25, 0.25 + vitri_maybay, 0.0)*Scale(0.3,
0.02, 1.7);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_maybay*instance);
glDrawArrays(GL_TRIANGLES, 0, Index);
// 4 Khung đỡ 2 cánh
instance = Translate(-0.15, 0.0 + vitri_maybay, 0.5)*Scale(0.1,
1.0, 0.1);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_maybay*instance); glDrawArrays(GL_TRIANGLES, Index,
Index_Trutron - Index);
instance = Translate(-0.35, 0.0 + vitri_maybay, 0.5)*Scale(0.1, 1.0, 0.1);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_maybay*instance); glDrawArrays(GL_TRIANGLES, Index,
Index_Trutron - Index);
instance = Translate(-0.15, 0.0 + vitri_maybay, - 0.5)*Scale(0.1,
1.0, 0.1);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_maybay*instance); glDrawArrays(GL_TRIANGLES, Index,
Index_Trutron - Index);
instance = Translate(-0.35, 0.0 + vitri_maybay, - 0.5)*Scale(0.1,
1.0, 0.1);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_maybay*instance); glDrawArrays(GL_TRIANGLES, Index,
Index_Trutron - Index);

//Đuôi máy bay
instance = Translate(0.6, 0.25 + vitri_maybay, 0.0)*Scale(0.7,
0.7, 1.0);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_maybay*instance);
glDrawArrays(GL_TRIANGLES, Index_chopcut, Index_tamgiac - 1);
instance = Translate(0.37, 0.0 + vitri_maybay,
0.2)*RotateY(225)*RotateX(270)*Scale(1.2, 1.2, 1.0);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_maybay*instance);
glDrawArrays(GL_TRIANGLES, Index_chopcut, Index_tamgiac - 1);
//2 khung xe sau
instance = Translate(0.3, -0.2 + vitri_maybay, 0.0)*Scale(0.15,
0.45, 0.15);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_maybay*instance); glDrawArrays(GL_TRIANGLES, Index,
Index_Trutron - Index);


instance = Translate(0.3, -0.3 + vitri_maybay,
0.0)*RotateX(90)*Scale(0.15, 0.45, 0.15);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_maybay*instance); glDrawArrays(GL_TRIANGLES, Index,
Index_Trutron - Index);
//khung xe truoc
instance = Translate(-0.5, -0.3 + vitri_maybay, - 0.1)*RotateZ(10)*RotateX(40)*Scale(0.15, 0.6, 0.15);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_maybay*instance); glDrawArrays(GL_TRIANGLES, Index,
Index_Trutron - Index);
instance = Translate(-0.5, -0.3 + vitri_maybay, 0.1)*RotateZ(- 10)*RotateX(40)*Scale(0.15, 0.6, 0.15);

glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_maybay*instance); glDrawArrays(GL_TRIANGLES, Index,
Index_Trutron - Index);
}
void banh_xe_sau1()
{
mat4 instance;
instance = RotateX(90)*Scale(0.35, 0.15, 0.35);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_maybay*instance); glDrawArrays(GL_TRIANGLES, Index,
Index_Trutron - Index);
}
void banh_xe_sau2()
{
mat4 instance = RotateX(90)*Scale(0.35, 0.15, 0.35);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_maybay*instance); glDrawArrays(GL_TRIANGLES, Index,
Index_Trutron - Index);
}
void banh_xe_truoc1()
{
mat4 instance = RotateX(90)*Scale(0.5, 0.15, 0.5);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_maybay*instance); glDrawArrays(GL_TRIANGLES, Index,
Index_Trutron - Index);
}
void banh_xe_truoc2()
{
mat4 instance = RotateX(90)*Scale(0.5, 0.15, 0.5);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,

model*instance_maybay*instance); glDrawArrays(GL_TRIANGLES, Index,
Index_Trutron - Index);
}
void quat_maybay()


{
mat4 instance;
instance = Translate(0.0, 0.0, 0.0)*RotateX(45)*Scale(0.02, 1.0, 0.25);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_maybay*instance);
glDrawArrays(GL_TRIANGLES, 0, Index);
}
// Các thông số chuyển động cho máy bay
GLfloat maybay_chay = 0;
GLfloat banh_maybay_quay = 0, quat_maybay_quay =
0; void Maybay()
{
instance_maybay = Translate(maybay_chay, 0.0 + vitri_maybay,
0.0)*RotateY(30)*RotateZ(-10);
than_maybay();
instance_maybay *= Translate(0.35, -0.3 + vitri_maybay,
0.1)*RotateZ(banh_maybay_quay);
banh_xe_sau1();
instance_maybay *= Translate(0.0, 0.0, 0.2)*RotateZ(banh_maybay_quay); banh_xe_sau2();
instance_maybay = Translate(maybay_chay, 0.0 + vitri_maybay,
0.0)*RotateY(30)*RotateZ(-10);
instance_maybay *= Translate(-0.5, -0.4 + vitri_maybay,
0.2)*RotateZ(banh_maybay_quay);
banh_xe_truoc1();

instance_maybay *= Translate(0.0, 0.0, 0.4)*RotateZ(banh_maybay_quay); banh_xe_truoc2();
instance_maybay = Translate(maybay_chay, 0.0 + vitri_maybay,
0.0)*RotateY(30)*RotateZ(-10);
instance_maybay *= Translate(-0.7, 0.0 + vitri_maybay,
0.0)*RotateX(quat_maybay_quay);
quat_maybay();
}


2.4. Thiết kế và cài đặt: Xe tăng bằng gỗ
2.4.1. Mơ hình phân cấp

2.4.2. Kỹ thuật cài đặt
mat4 instance_xe;
GLfloat vitri_xe = 1.5;
void than_xe()
{
mat4 instance;
instance = Translate(0.0 + vitri_xe, 0.0, 0.0 vitri_xe)*RotateX(180)*RotateY(90)*Scale(1.5, 1.5, 3.5);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_xe*instance);
glDrawArrays(GL_TRIANGLES, Index_Trutron, Index_bantru Index_Trutron);
instance = Translate(0.0 + vitri_xe, 0.0, 0.0 - vitri_xe)*Scale(1.0,
0.4, 0.5);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_xe*instance);
glDrawArrays(GL_TRIANGLES, 0, Index);
}
void than_quay()
{

mat4 instance;
instance = Scale(0.5, 0.4, 0.35);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_xe*instance); glDrawArrays(GL_TRIANGLES, 0,
Index);
}
void sung()
{
//sung
mat4 instance;


instance = Translate(-0.5,0.0,0.0)*RotateZ(90)*Scale(0.25, 2.0, 0.25);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_xe*instance);
glDrawArrays(GL_TRIANGLES, Index, Index_Trutron - Index);
}
void banh_xt_truoc1()
{
mat4 instance;
instance = RotateX(90)*Scale(0.7, 0.25, 0.7);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_xe*instance);
glDrawArrays(GL_TRIANGLES, Index, Index_Trutron - Index);
}
void banh_xt_truoc2()
{
mat4 instance;
instance = RotateX(90)*Scale(0.7, 0.25, 0.7);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,

model*instance_xe*instance);
glDrawArrays(GL_TRIANGLES, Index, Index_Trutron - Index);
}
void banh_xt_sau1()
{
mat4 instance;
instance = RotateX(90)*Scale(0.7, 0.25, 0.7);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_xe*instance);
glDrawArrays(GL_TRIANGLES, Index, Index_Trutron - Index);
}
void banh_xt_sau2()
{
mat4 instance;
instance = RotateX(90)*Scale(0.7, 0.25, 0.7);
glUniformMatrix4fv(model_loc, 1, GL_TRUE,
model*instance_xe*instance);
glDrawArrays(GL_TRIANGLES, Index, Index_Trutron - Index);
}
// Các thông số chuyển động cho xe tăng
GLfloat xx = 0;
GLfloat dau_quay = 0, banh_xt_quay = 0;
void Xe()
{
instance_xe = Translate(xx + vitri_xe, 0.0, 0.0-vitri_xe); than_xe();
instance_xe *= Translate(0.0 + vitri_xe, 0.4, 0.0 vitri_xe)*RotateY(dau_quay);
than_quay();


instance_xe = Translate(xx + vitri_xe, 0.0, 0.0 - vitri_xe);

instance_xe *= Translate(0.0 + vitri_xe, 0.4, 0.0 vitri_xe)*RotateY(dau_quay); sung();
instance_xe = Translate(xx + vitri_xe, 0.0, 0.0 - vitri_xe);
instance_xe *= Translate(-0.35 + vitri_xe, -0.3, 0.45 vitri_xe)*RotateZ(banh_xt_quay); banh_xt_truoc1();
instance_xe = Translate(xx + vitri_xe, 0.0, 0.0 - vitri_xe);
instance_xe *= Translate(-0.35 + vitri_xe, -0.3, -0.45 vitri_xe)*RotateZ(banh_xt_quay); banh_xt_truoc2();
instance_xe = Translate(xx + vitri_xe, 0.0, 0.0 - vitri_xe);
instance_xe *= Translate(0.35 + vitri_xe, -0.3, 0.45 vitri_xe)*RotateZ(banh_xt_quay); banh_xt_sau1();
instance_xe = Translate(xx + vitri_xe, 0.0, 0.0 - vitri_xe);
instance_xe *= Translate(0.35 + vitri_xe, -0.3, -0.45 vitri_xe)*RotateZ(banh_xt_quay); banh_xt_sau2();
}

2.5. Thiết lập và điều khiển phép chiếu, camera
GLfloat x = 0, y = 0, z = 2;
void display( void )
{
glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT );
vec4 eye(x, y, z, 1);
vec4 at(0, 0, 0, 1);
vec4 up(0, 1, 0, 1);
mat4 view = LookAt(eye, at, up);
glUniformMatrix4fv(model_view_loc, 1, GL_TRUE, view);
mat4 projection = Frustum(-1.5, 1.5, -1.5, 1.5, 1, 10);
glUniformMatrix4fv(projection_loc, 1, GL_TRUE, projection);
glViewport(0, 0, 640, 640);
Doantau();
Chongchong()
; Maybay();
Xe();
glutSwapBuffers();
}



CHƯƠNG 3. KẾT QUẢ CHƯƠNG TRÌNH
3.1. Mơ tả kết quả
- Kết quả gồm 4 sản phẩm:
+ Đồn tàu có thể di chuyển được
+ Chong chóng có thể quay
+ Máy bay có thể chạy được và quạt quay
+ Xe tăng có thể chạy được và pháo súng có thể quay
- Khi nhấn phím “c” các đối tượng bắt đầu chuyển động đồng thời.
- Camera có điều khiển được.

3.2. Các hình ảnh kết quả

Hình 3- 5. Kết quả khi chạy chương trình


Hình 3- 6. Kết quả khi điều khiển camera

Hình 3- 7. Nhìn từ trên xuống


KẾT LUẬN
Bằng những kiến thức đã được cô Vũ Minh Yến giảng dạy và những tài
liệu mà cô cung cấp, chúng em đã tìm hiểu và hồn thành được đề tài của
mình và đạt được kết quả như mong muốn ban đầu, mặc dù kết quả này
không thực sự đẹp và giống với sản phẩm mẫu.
Trong quá trình nghiên cứu và thực hiện đề tài, nhóm chúng em đã hiểu hơn
về các kỹ thuật và ứng dụng của OpenGL trong đồ họa máy tính. Điều này
giúp chúng em nắm vững thêm các kiến thức và có thể áp dụng trong nhiều

lĩnh vực khác nhau khi sử dụng đồ họa máy tính.
Bài làm của chúng em có thể có nhiều sai sót, rất mong nhận được sự góp ý,
nhận xét từ cơ giáo và các bạn.
Nhóm chúng em xin chân thành cảm ơn!

TÀI LIỆU THAM KHẢO
- Các tài liệu do cô Vũ Minh Yến cung cấp.
- Các hình ảnh sản phẩm (Hình 1-1, 1-2, 1-3, 1-4) được lấy trên Internet.



×