Báo Cáo Bài Tập Lớn Đồ Họa Máy Tính Và Sản Phẩm(vẽ mô hình oto bằng OpenGL hiện đại )2020

11 1.1K 33
Báo Cáo Bài Tập Lớn Đồ Họa Máy Tính Và Sản Phẩm(vẽ mô hình oto bằng OpenGL hiện đại )2020

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

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. Đồ 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.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ệcLà 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 Ôtô tải theo OpenGL hiện đại.1.Giới thiệu tóm tắtSự 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, …

Mục Lục Lời mở đầu Đồ họa máy tính lĩnh vực khoa học máy tính nghiên cứu sở toán học, thuật toán kĩ thuật phép tạo, hiển thị điều khiển hình ảnh hình máy tính Đồ họa máy tính ngày ứng dụng rộng rãi 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 đa dạng, phong phú phát triển liên tục khơng ngừng Ngày nay, khơng có chương trình ứng dụng mà khơng sử dụng kĩ thuật đồ họa để làm tăng tính hấp dẫn Việc mơ tả liệu thơng qua hình ảnh màu sắc đa dạng nó, chương trình đồ họa thường thu hút người sử dụng tính thân thiện, dễ dùng, … kích thích khả sang tạo nâng cao suất làm việc Là sinh viên chúng em tìm hiểu làm quen với số kĩ thuật đồ họa máy tính thông qua tài liệu, giảng cô giáo Vũ Minh Yến giảng dạy Với kiến thức học chúng em định chọn đề tài: Xây dựng mô hình dồ chơi Ơtơ tải theo OpenGL đại Giới thiệu tóm tắt Sự đời đồ họa máy tính thực cách mạng giao tiếp người dùng máy tính Với lượng thơng tin trực quan, đa dạng phong phú chuyển tải qua hình ảnh, ứng dụng đồ họa máy tính lơi nhiều người nhờ tính thân thiện, dễ dùng, kích thích khả sáng tạo tăng đáng kể hiệu suất làm việc Đồ họa máy tính ngày ứng dụng rộng rãi 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 đa dạng, phong phú phát triển liên tục không ngừng Ngày nay, khơng có chương trình ứng dụng mà không sử dụng kĩ thuật đồ họa để làm tăng tính hấp dẫn Một hệ đồ họa có hai thành phần phần cứng phần mềm Thành phần phần cứng bao gồm thiết bị hiển thị (hay thiết bị xuất) thiết bị nhập Tiêu biểu thiết bị hiển thị hình mà chế hoạt động dựa cấu tạo ống tia âm cực CRT Các thiết bị nhập liệu thường gặp bao gồm bàn phím, chuột Phần mềm đồ họa chia làm hai loại cơng cụ lập trình hàm thư viện C, Pascal, GL, … ứng dụng phục vụ cho mục đích AutoCAD, Photoshop, … Ý tưởng Hình1 Ảnh mơ hình ơtơ tải đồ chơi Đồ chơi đồ vật chơi trẻ em hoạt động giải trí Chúng thường đồ vật thu nhỏ, tạo dáng đơn giản có màu sắc hấp dẫn Đồ chơi có nét tiêu biểu dạng khái quát, bảo đảm tái tạo hoạt động tương ứng đồ vật Ví dụ đồ chơi xe ơtơ chạy, đồ chơi búp bê có hình dạng giống người Với xe đồ chơi mơ hình đa dạng, trẻ em tăng cường nhận thức học hỏi nhiều loại phương tiện giao thông, chức loại Do đó, với đồ chơi mơ hình như: xe máy, tơ loại, tàu, máy bay thêm mơ hình tàu thủy… trẻ em tận hưởng nhiều lợi ích như: - Giúp trẻ em tìm hiểu giới xung quanh: nhận biết loại xe, chức riêng biệt loại… - Kích thích khả khám phá tự học hỏi trẻ em - Giúp trẻ em chơi sáng tạo với kết hợp loại phương tiện với Ơtơ tải đồ chơi mà chơi Nó đồ chơi phổ biến lựa chọn cho trẻ em Do kiến thức học chúng em lựa chọn Ơtơ tải để làm mơ hình Mơ tả chuyển động xe   a) b) c) Nhóm chúng em tiến hành mơ tả hoạt động phổ biến chuyển động ơtơ tải : - Thùng xe nâng lên hạ xuống - Xe quay 360o - Xe di chuyển tới điểm khác Mơ tả chi tiết chuyển động Nhóm chúng em sửa dụng keyboard để điều khiển chuyển động xe Thùng xe nâng lên hạ xuống - Để làm cho thùng xe nâng lên chúng em sử dụng phím “u’ phím “U” để hạ thùng xe Xe quay 360o - Xe quay theo trục OX nhấn phím “a” “A” - Xe quay theo trục OY nhấn phím “b” “B” - Xe quay theo trục OZ nhấn phím “c” “C” Xe di chuyển tới điểm khác - Sử dụng phím “d” để di chuyển tiến phím “D” để di chuyển lùi 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) 4.2 Phép vẽ hình - Vẽ hình hộp chữ nhật Code mô tả hoạt động chuyển động  Tạo mơ hình xe void Banhxe(GLfloat a, GLfloat b, GLfloat c) { instance = Translate(a, b, c) * Scale(x_khung, y_khung, x_khung); glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * instance); glDrawArrays(GL_TRIANGLES, 0, NumPoints); } void khung(GLfloat a, GLfloat b, GLfloat c) { instance = Translate(a, b, c) * Scale(x_thung, y_khung, z_thung); glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * instance); glDrawArrays(GL_TRIANGLES, 0, NumPoints); } void truc_nang(GLfloat a) { instance = RotateZ(a) * Scale(x_thung - 0.3, y_khung, z_thung); glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * instance); glDrawArrays(GL_TRIANGLES, 0, NumPoints); } void thung1() { instance = Scale(x_thung, y_thung, z_thung); glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * instance); glDrawArrays(GL_TRIANGLES, 0, NumPoints); //thung day instance = Translate(0, y_dau / - y_dau / 5, z_thung / 2) * RotateX(90) * instance; glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * instance); glDrawArrays(GL_TRIANGLES, 0, NumPoints); //thung mat trai instance = Translate(0, y_dau - z_thung / 1.5, 0) * RotateX(180) * instance; glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * instance); glDrawArrays(GL_TRIANGLES, 0, NumPoints); // thung mat phai instance = Scale(x_thung * 1.5, 1, z_thung * 1.3) * Translate(x_thung / 1.65, 0, 0) * RotateY(90) * instance; glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * instance); glDrawArrays(GL_TRIANGLES, 0, NumPoints); // thung mat truoc } void dauxe() { instance = Translate(x_thung / + x_dau / 2, y_dau / - y_thung / 2, 0.0) * Scale(x_dau, y_dau, z_dau); glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * instance); glDrawArrays(GL_TRIANGLES, 0, NumPoints); } void cuaxetrai() { instance = Translate(x_thung / 1.4, y_dau / 2, z_dau / 2) * Scale(0.2, 0.2, 0.01); glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * instance); glDrawArrays(GL_TRIANGLES, 0, NumPoints); } void cuaxephai() { instance = Translate(x_thung / 1.4, y_dau / 2, -z_dau / 2) * Scale(0.2, 0.2, 0.01); glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * instance); glDrawArrays(GL_TRIANGLES, 0, NumPoints); } void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); model = RotateY(theta[0]); model = model * RotateX(theta[2]); model = model * RotateZ(theta[3]); model = model * Translate(theta[4], 0, 0); dauxe(); //truc_nang(90); khung(0.2, -(y_thung) / 2, 0); Banhxe(-(x_thung / 3) + banh_xe, -(y_thung + banh_xe) / 2, -z_thung / 2); //banh phai sau Banhxe(-(x_thung / 3) + banh_xe, -(y_thung + banh_xe) / 2, z_thung / 2); //banh trai sau Banhxe(-(x_thung / 3) + x_thung / + banh_xe, -(y_thung + banh_xe) / 2, -z_thung / 2); //banh phai giua Banhxe(-(x_thung / 3) + x_thung / + banh_xe, -(y_thung + banh_xe) / 2, z_thung / 2); //banh trai giua Banhxe(-(x_thung / 3) + x_thung + banh_xe, -(y_thung + banh_xe) / 2, -z_thung / 2); //banh phai truoc Banhxe(-(x_thung / 3) + x_thung + banh_xe, -(y_thung + banh_xe) / 2, z_thung / 2); //banh trai truoc cuaxetrai(); cuaxephai(); model = model * Translate(-i / 2, * i, 0) * RotateZ(theta[1]); thung1(); point4 eye(radius * sin(theta2) * cos(phi), radius * sin(theta2) * sin(phi), radius * cos(theta2), 1.0); //point4 eye(0.5, 1, 1.5, 1); point4 at(0.0, 0.0, 0.0, 1.0); vec4 up(0.0, 1.0, 0.0, 1.0); mat4 mv = LookAt(eye, at, up); glUniformMatrix4fv(model_view_loc, 1, GL_TRUE, mv); mat4 p = Frustum(l, r, bottom, top, zNear, zFar); glUniformMatrix4fv(projection_loc, 1, GL_TRUE, p); //glUniformMatrix4fv(projection_loc, 1, GL_TRUE, projection); glDrawArrays(GL_TRIANGLES, 0, NumPoints); /*Vẽ tam giác*/ //const vec3 viewer_pos(0.0, 0.0, 2.0); /*Trùng với eye camera*/ //glUniformMatrix4fv(model_loc, 1, GL_TRUE, model); glutSwapBuffers(); }  Quay quanh trục OX, OY, OZ case 'a': theta[0] += 5; if (theta[0] > 360) theta[0] -= 360; glutPostRedisplay(); break; case 'A': // số lệnh theta[0] -= 5; if (theta[0] > 360) theta[0] -= 360; glutPostRedisplay(); break; case 'b': theta[2] += 5; if (theta[0] > 360) theta[0] -= 360; glutPostRedisplay(); break; case 'B': // số lệnh theta[2] -= 5; if (theta[0] > 360) theta[0] -= 360; glutPostRedisplay(); break; case 'c': theta[3] += 5; if (theta[0] > 360) theta[0] -= 360; glutPostRedisplay(); break; case 'C': // số lệnh theta[3] -= 5; if (theta[0] > 360) theta[0] -= 360; glutPostRedisplay(); break;  Di chuyển tiến lùi case 'd': theta[4] += 0.05; glutPostRedisplay(); break; case 'D': // số lệnh theta[4] -= 0.05; glutPostRedisplay(); break;  Nâng thùng xe case 'u': // số lệnh if (theta[1] < 30) { theta[1] += 5; i = i + 0.01; } else {} glutPostRedisplay(); break; case 'U': // số lệnh if (theta[1] > 0) { theta[1] -= 5; i = i - 0.01; } glutPostRedisplay(); break;  Góc nhìn point4 eye(radius * sin(theta2) * cos(phi), radius * sin(theta2) * sin(phi), radius * cos(theta2), 1.0); //point4 eye(0.5, 1, 1.5, 1); point4 at(0.0, 0.0, 0.0, 1.0); vec4 up(0.0, 1.0, 0.0, 1.0); mat4 mv = LookAt(eye, at, up); glUniformMatrix4fv(model_view_loc, 1, GL_TRUE, mv); mat4 p = Frustum(l, r, bottom, top, zNear, zFar); glUniformMatrix4fv(projection_loc, 1, GL_TRUE, p); - Sử dụng Keyboard: case 'x': l *= 1.1; r *= 1.1; break; case 'X': l *= 0.9; r *= 0.9; break; case 'y': bottom *= 1.1; top *= 1.1; break; case 'Y': bottom *= 0.9; top *= 0.9; break; case 'z': zNear *= 1.1; zFar *= 1.1; break; case 'Z': zNear *= 0.9; zFar *= 0.9; break; case 'r': radius *= 2.0; break; case 'R': radius *= 0.5; break; case 't': theta2 += dr; break; case 'T': theta2 -= dr; break; case 'p': phi += dr; break; case 'P': phi -= dr; break; case ' ': // reset values to their defaults l = -1.0; r = 1.0; bottom = -1.0; top = 1.0; zNear = 0.5; zFar = 3.0; radius = 1.0; theta2 = 0.0; phi = 0.0; theta[0] = 0; theta[1] = 0; theta[2] = 0; theta[3] = 0; theta[4] = 0; i = 0; break;  Chiếu sáng /* Khởi tạo tham số chiếu sáng - tơ bóng*/ point4 light_position(0.0, 0.0, 1.0, 0.0); color4 light_ambient(0.2, 0.2, 0.2, 1.0); color4 light_diffuse(1.0, 1.0, 1.0, 1.0); color4 light_specular(1.0, 1.0, 1.0, 1.0); color4 material_ambient(1.0, 0.0, 1.0, 1.0); color4 material_diffuse(1.0, 0.8, 0.0, 1.0); color4 material_specular(1.0, 0.8, 0.0, 1.0); float material_shininess = 100.0; 10 color4 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); 11 ... đồ họa máy tính thực cách mạng giao tiếp người dùng máy tính Với lượng thông tin trực quan, đa dạng phong phú chuyển tải qua hình ảnh, ứng dụng đồ họa máy tính lơi nhiều người nhờ tính thân thiện,... thuật đồ họa máy tính thơng qua tài liệu, giảng giáo Vũ Minh Yến giảng dạy Với kiến thức học chúng em định chọn đề tài: Xây dựng mơ hình dồ chơi Ơtơ tải theo OpenGL đại Giới thiệu tóm tắt Sự đời đồ. .. khơng sử dụng kĩ thuật đồ họa để làm tăng tính hấp dẫn Việc mơ tả liệu thơng qua hình ảnh màu sắc đa dạng nó, chương trình đồ họa thường thu hút người sử dụng tính thân thiện, dễ dùng, … kích

Ngày đăng: 17/04/2020, 15:59

Từ khóa liên quan

Mục lục

  • Lời mở đầu

  • 1. Giới thiệu tóm tắt

  • 2. Ý tưởng

  • 3. Mô tả chuyển động của xe.

    • a) Thùng xe có thể nâng lên và hạ xuống được.

    • b) Xe có thể quay 360o

    • c) Xe có thể di chuyển tới một điểm khác.

    • 4. Các phép biến đổi sử dụng

      • 4.1 Phép biến đổi

      • 4.2 Phép vẽ hình cơ bản

      • 5. Code mô tả hoạt động chuyển động

      • 1.0);

      • i = i + 0.01;

      • i = i - 0.01;

      • 1.0);

      • i = 0;

Tài liệu cùng người dùng

Tài liệu liên quan