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
Trang 2KHOA CÔNG NGHỆ THÔNG TIN
Trang 3MỞ ĐẦU
Chương 1 Xác định và phân tích bài toán
1.1 Bài toán 2
1.2 Mô tả các đối tượng cần thiết kế 2
1.3 Mô tả bố cục khung cảnh chung 3
1.4 Mô tả kịch bản của chương trình 3
Chương 2 Cài đặt chương trình
2.1 Kỹ thuật tạo mô hình cánh cửa 5
2.2 Kỹ thuật tạo mô hình ti vi 6
2.3 Kỹ thuật tạo mô hình cái quạt 6
2.4 Kỹ thuật tạo mô hình tủ lạnh 8
2.5 Kỹ thuật tạo mô hình kệ ti vi 9
2.6 Kỹ thuật tạo mô hình bàn tròn 10
2.7 Kỹ thuật tạo mô hình cái ghế 11
2.8 Kỹ thuật tạo mô hình cái đèn 12
2.9 Kỹ thuật tạo mô hình cửa sổ 13
2.10 Kỹ thuật chiếu sáng 14
2.11 Kỹ thuật camera 15
Chương 3 Kết quả đạt được
3.1 Mô hình cánh cửa 16
3.2 Mô hình ti vi 15
Trang 43.4 Mô hình tủ lạnh 15
3.5 Mô hình kệ ti vi 15
3.6 Mô hình bàn tròn 15
3.7 Mô hình cái ghế 15
3.8 Mô hình cái đèn 15
3.9 Mô hình cửa sổ 15
3.10 Mô hình chiếu sáng 15
3.11 Mô hình camera 15
KẾT LUẬN TÀI LIỆU THAM KHẢO
Trang 5MỞ ĐẦ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à một 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 sáng 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…
Là sinh viên đượ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ô Vũ Minh Yến - giáo viên giảng dạy Với những kiến thức đã học nhóm quyết định chọn đề tài: Mô phỏng phòng khách.
Trang 6Chương 1 Xác định và phân tích bài toán
1.1 Bài toán
Thiết kế nội thất phòng khách bằng openGL khả lập trình và visual C++
Toàn bộ bài toán được phát triển dựa trên các project được cô Yến cung cấp trong quá trình học thực hành song song với lý thuyết trên lớp cũng như việc hướng dẫn cài đặt khởi đầu cho môn học:
- Hướng dẫn cài đặt OpenGL với thư viện sử dụng là FreeGlut và Glew
- Project_Cube (tiền đề cho việc tạo dựng các hình cơ bản trong OpenGL)
- Project_RotationCube (tiền đề cho sự chuyển động của các đối tượng)
- Project_ban (tạo dựng mô hình từ việc lắp ghép từ các hình cơ bản)
- Projection_view (hướng dẫn việc thiết lập góc nhìn cho cảnh)
- Project_hinhlapphuong_chieusang (biểu diễn ánh sáng Blinn-Phong)
1.2 Mô tả các đối tượng cần thiết kế
Tổng quan về căn phòng khách bao gồm:
- Một căn phòng khối hộp: 4 bức tường 4 mặt: mặt trái, mặt phải mặt trước, mặt sau
- 1 quạt trần có khả năng quay
Trang 71.3 Mô tả bố cục khung cảnh chung
1.4 Mô tả kịch bản của chương trình
- Thiết kế nội thất phòng khách vẫn luôn nhận được sự quan tâm của các gia chủ vì đây là không gian sinh hoạt chung cần được thiết kế sao cho hài hòa và phù hợp với tất cả mọi thành viên.
- Mô phỏng được hoạt động của các đối tượng trong căn phòng khách
- Mô phỏng được các yếu tố về ánh sáng và góc nhìn các đối tượng
- Các yếu tố ánh sánh và góc nhìn được tạo ngẫu nhiên
- Chương trình được chạy trên visual studio và ngôn ngữ C++ sử dụng openGL
Trang 8o Q/q, W/w: đóng mở tủ.
o S/s: tắt/ bật tivi.
o d: bật/tắt đèn.
o k/K: kéo rèm cửa.
- Các yếu tố ánh sánh và góc nhìn được tạo ngẫu nhiên
- Chương trình được chạy trên visual studio và ngôn ngữ C++ sử dụng openGL
Chương 2 Cài đặt chương trình
1.1 Kỹ thuật tạo mô hình cánh cửa (Phạm Ngọc Minh)
- Mô hình:
- Mô hình phân cấp:
Trang 9mat4 m = Translate(-0.25, 0.0, 0.0) * Scale(0.4f, 0.66f, 0.02f);
glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * Cua_view * CanhCua_view* m); glDrawArrays(GL_TRIANGLES, 0, NumPoints);
Trang 11- Mô hình phân cấp:
- Kĩ thuật cài đặt:
//Mô tơ
void moto() {
for (float i = 0; i < 360; i++) {
instance = RotateY(i) * Scale(0.11f, 0.05f, 0.1f);
glUniformMatrix4fv(model_loc, 1, GL_TRUE, model1 * instance);
for (float i = 0; i < 360; i++) {
instance = Translate(0.0, 0.175f, 0.0) * RotateY(i) * Scale(0.015f, 0.3f, 0.015f);glUniformMatrix4fv(model_loc, 1, GL_TRUE, model1 * instance);
glDrawArrays(GL_TRIANGLES, 0, NumPoints);
}
for (float i = 0; i < 360; i++) {
instance = RotateY(i) * Scale(0.05f, 0.1f, 0.1f);
glUniformMatrix4fv(model_loc, 1, GL_TRUE, model1 * instance);
instance = Translate(0, 0, 0) * RotateY(fan) * Scale(0.65f, 0.01f, 0.07f);
glUniformMatrix4fv(model_loc, 1, GL_TRUE, model1 * instance);
glDrawArrays(GL_TRIANGLES, 0, NumPoints);
}
void canhQuat2() {
float b = fan + 60;
instance = Translate(0, 0, 0) * RotateY(b) * Scale(0.65f, 0.01f, 0.07f);
glUniformMatrix4fv(model_loc, 1, GL_TRUE, model1 * instance);
glDrawArrays(GL_TRIANGLES, 0, NumPoints);
Trang 14instance2 = Translate(-0.8f, -0.65f, -0.05f); createElement(0.3f, 0.02f, 1.2f);
//hai ben
instance2 = Translate(-0.8f, -0.525f, -0.65f); createElement(0.3f, 0.25f, 0.015f);
instance2 = Translate(-0.8f, -0.525f, 0.55f); createElement(0.3f, 0.25f, 0.015f);
//do de trong ngan
ToMau(0, 200, 0);
Trang 15instance2 = Translate(-0.85f, -0.58f, 0.32f)*Translate(h,0,0); createElement(0.1f, 0.1f, 0.25f);
for (int i = 0; i < 360; i+=2){
instance2 = Translate(-0.875f, -0.38f, -0.125)*RotateY(i);createElement(0.1f, 0.02f, 0.001f);
Trang 18ToMau(100, 255, 100);
instance2 = Translate(-0.6f, 0.26f, -0.92f); createElement(0.22f, 0.02f, 0.02f);
instance2 = Translate(-0.6f, 0.14f, -0.92f); createElement(0.22f, 0.02f, 0.02f);
instance2 = Translate(-0.71f, 0.2f, -0.92f); createElement(0.02f, 0.12f, 0.02f);
instance2 = Translate(-0.49f, 0.2f, -0.92f); createElement(0.02f, 0.12f, 0.02f);
Trang 19ToMau(bongden, bongden, bongden);
ToMau(bongden, bongden, bongden);
instance2 = Translate(0.8, 0 , 0)*Translate(-0.6f, 0.2f,
Trang 20instance2 = Translate(0.148f, -0.6800f, -0.98f); createElement(0.42f, 0.05f, 0.05f);
instance2 = Translate(-0.07f, -0.335f, -0.98f); createElement(0.05f, 0.75f, 0.04f);
instance2 = Translate(0.38f, -0.335f, -0.98f); createElement(0.05f, 0.75f, 0.05f);
/*khungcuaso*/
instance2 = Translate(0.0f, 0.01f, 1.00f); createElement(0.7f, 0.05f, 0.04f);
instance2 = Translate(0.0f, -0.4f, 1.00f);
createElement(0.7f, 0.05f, 0.04f);
instance2 = Translate(0.0f, -0.08f, 1.00f); createElement(0.7f, 0.01f, 0.04f);
instance2 = Translate(0.0f, -0.31f, 1.00f); createElement(0.7f, 0.01f, 0.04f);
instance2 = Translate(-0.3f, -0.21f, 1.0f); createElement(0.05f, 0.4f, 0.04f);
instance2 = Translate(0.3f, -0.21f, 1.0f);
createElement(0.05f, 0.4f, 0.04f);
instance2 = Translate(-0.2f, -0.21f, 1.0f); createElement(0.01f, 0.4f, 0.01f);
instance2 = Translate(0.2f, -0.21f, 1.0f);
createElement(0.01f, 0.4f, 0.01f);
Trang 21color4 ambient_product = light_ambient * material_ambient;
color4 diffuse_product = light_diffuse * material_diffuse;
color4 specular_product = light_specular * material_specular;
glUniform4fv(glGetUniformLocation(program, "AmbientProduct"), 1, ambient_product); glUniform4fv(glGetUniformLocation(program, "DiffuseProduct"), 1, diffuse_product); glUniform4fv(glGetUniformLocation(program, "SpecularProduct"), 1, specular_product); glUniform4fv(glGetUniformLocation(program, "LightPosition"), 1, light_position); glUniform1f(glGetUniformLocation(program, "Shininess"), material_shininess);
point4 eye0(radius * sin(theta_viewing) * cos(phi),
radius * sin(theta_viewing) * sin(phi),radius * cos(theta_viewing), 1.0);
point4 eye1(x, y, z, 1.0);
point4 at(0.0, 0.0, 0.0, 1.0);
vec4 up(0.0, 1.0, 0.0, 1.0);
Trang 24Cánh tủ lạnh dưới mở (Q)
Cánh tủ lạnh dưới đóng (q)
1.14Mô hình cái quạt
Chụp hình ảnh và Mô tả hoạt động thực hiện tương tác được Bật/ Tắt quạt (t)
Trang 25Bật quạt số 1 (1)
Bật quạt số 2 (2)
Bật quạt số 3 (3)
Trang 261.17Thiết lập phép chiếu, camera và góc nhìn
enum { Xaxis = 0, Yaxis = 1, Zaxis = 2, NumAxes = 3 };
int Axis = Xaxis ;
float Theta[ NumAxes ] = { 0.0, 0.0, 0.0 };
//Tham so cho Viewing
float radius = 2, theta_viewing = 0, phi = 0;
//Cac tham so cho projection
float l = -1.0f, r = 1.0f;
Trang 27float bottom = -1.0f, top = 1.0f;
float zNear = 1.2f, zFar = 3.0f;
case 'z': zNear *= 1.1f; zFar *= 1.1f; break ;
case 'Z': zNear *= 0.9f; zFar *= 0.9f; break ;
case 033: // 033 is Escape key octal value
exit(1); // quit program
break ;
Trang 28KẾT LUẬN
Qua việc thực hiện nghiên cứu đề tài “Mô phỏng Phòng khách” Nhóm đã được hiểu thêm một phần về môn đồ họa máy tính Bên cạnh đó, việc làm nghiên cứu giúp các thành viên hoàn thiện hơn các kỹ năng bản thân cũng như làm việc nhóm.
Cảm ơn cô Vũ Minh Yến đã tận tình giảng dạy trong môn Đồ họa máy tính.
TÀI LIỆU THAM KHẢO
[1] [INTERACTIVE COMPUTER GRAPHICS-OpenGL 6th Edition
[2] File bài giảng online và project môn Đồ hoạ máy tính
[3] Tài liệu khác trên Internet