Báo cáo môn đồ họa máy tính (Mô phỏng hoạt động ga tàu)

91 23 0
Báo cáo môn đồ họa máy tính (Mô phỏng hoạt động ga tàu)

Đ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

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 ĐỒ HOẠ MÁY TÍNH Đề tài: Mơ hoạt động ga tàu GVHD: Ths.Vũ Minh Yến Nhóm: Nguyễn Khắc Hiếu Phạm Đình Tùng LỜI MỞ ĐẦU Đồ họa máy tính ngành khoa học Tin học chuyên nghiên cứu phương pháp kỹ thuật để mô tả thao tác đối tượng giới thực máy tính Đó q trình xây dựng phát triển cơng cụ hai lĩnh vực phần cứng phần mềm Thuật ngữ đồ họa máy tính đề xuất nhà khoa học người mỹ tên William Fetter năm 1960 ơng nghiên cứu xây dựng mơ hình buồng lái máy bay cho hãng Boeing Các chương trình đồ họa ứng dụng cho phép làm việc với máy tính cách thoải mái, tự nhiên Là sinh viên chúng em tìm hiểu làm quen với số kỹ thuật đồ họa thông qua giảng, tài liệu giảng viên cung cấp Với kiến thức học chúng em định chọn đề tài: Mô hoạt động ga tàu MỤC LỤC CHƯƠNG 1: MƠ TẢ BÀI TỐN 1.1 Giới thiệu đề tài Nhóm chúng em mơ phong hoạt động ga tàu bao gồm đoàn tàu di chuyển, ga tàu có thang máy để di chuyển lên xuống ga 1.2 Mơ tả mơ hình kịch Đoàn tàu di chuyển đường ray vào ga, mở cửa Cịn ga tàu có thang máy di chuyển lên xuống tầng CHƯƠNG MỘT SỐ KỸ THUẬT ĐIỂN HÌNH PHÁT TRIỂN CHƯƠNG TRÌNH 2.1 Thiết kế cài đặt 2.2.1 Mơ hình phân cấp 2.1 đồn tàu di chuyển 2.2 Thay đổi góc nhìn 2.1.2 Kỹ thuật cài đặt void generateGeometry(void); void initGPUBuffers(void); void shaderSetup(void); void display(void); void keyboard(unsigned char key, int x, int y); typedef vec4 point4; typedef vec4 color4; using namespace std; // Số đỉnh tam giác const int NumPoints = 36; point4 points[NumPoints]; /* Danh sách đỉnh tam giác cần vẽ*/ color4 colors[NumPoints]; /* Danh sách màu tương ứng cho đỉnh trên*/ vec3 normals[NumPoints]; /*Danh sách vector pháp tuyến ứng với đỉnh*/ point4 vertices[8]; /* Danh sách đỉnh hình lập phương*/ color4 vertex_colors[8]; /*Danh sách màu tương ứng cho đỉnh hình lập phương*/ GLuint program; GLint matrix_loc; mat4 projection; GLuint projection_loc; mat4 view; GLuint view_loc; GLfloat mauAnhSang = 1.0; void initCube() { // Gán giá trị tọa độ vị trí cho đỉnh hình lập phương vertices[0] = point4(-0.5, -0.5, 0.5, 1.0); vertices[1] = point4(-0.5, 0.5, 0.5, 1.0); vertices[2] = point4(0.5, 0.5, 0.5, 1.0); vertices[3] = point4(0.5, -0.5, 0.5, 1.0); vertices[4] = point4(-0.5, -0.5, -0.5, 1.0); vertices[5] = point4(-0.5, 0.5, -0.5, 1.0); vertices[6] = point4(0.5, 0.5, -0.5, 1.0); vertices[7] = point4(0.5, -0.5, -0.5, 1.0); // Gán giá trị màu sắc cho đỉnh hình lập phương vertex_colors[0] = color4(0.0, 0.0, 0.0, 1.0); // black vertex_colors[1] = color4(1.0, 0.0, 0.0, 1.0); // red vertex_colors[2] = color4(1.0, 1.0, 0.0, 1.0); // yellow vertex_colors[3] = color4(0.0, 1.0, 0.0, 1.0); // green vertex_colors[4] = color4(0.0, 0.0, 1.0, 1.0); // blue vertex_colors[5] = color4(1.0, 0.0, 1.0, 1.0); // magenta vertex_colors[6] = color4(0.0, 1.0, 1.0, 1.0); // cyan vertex_colors[7] = color4(1.0, 1.0, 1.0, 1.0); // white } int Index = 0; void quad(int a, int b, int c, int d) /*Tạo mặt hình lập phương = tam giác, gán màu cho đỉnh tương ứng mảng colors*/ { vec4 u = vertices[b] - vertices[a]; vec4 v = vertices[c] - vertices[b]; vec3 normal = normalize(cross(u, v)); normals[Index] = normal; colors[Index] = vertex_colors[a]; colors[Index] = vertex_colors[a]; colors[Index] = vertex_colors[a]; colors[Index] = vertex_colors[a]; colors[Index] = vertex_colors[a]; colors[Index] = vertex_colors[a]; points[Index] = vertices[a]; Index++; normals[Index] = normal; points[Index] = vertices[b]; Index++; normals[Index] = normal; points[Index] = vertices[c]; Index++; normals[Index] = normal; points[Index] = vertices[a]; Index++; normals[Index] = normal; points[Index] = vertices[c]; Index++; normals[Index] = normal; points[Index] = vertices[d]; Index++; } void makeColorCube(void) /* Sinh 12 tam giác: 36 đỉnh, 36 màu*/ { quad(5, 4, 0, 1); quad(1, 0, 3, 2); quad(6, 5, 1, 2); quad(4, 5, 6, 7); quad(3, 0, 4, 7); 10 quad(2, 3, 7, 6); } void generateGeometry(void) { initCube(); makeColorCube(); } void initGPUBuffers(void) { // Tạo VAO - vertex array object GLuint vao; glGenVertexArrays(1, &vao); glBindVertexArray(vao); // Tạo khởi tạo buffer object GLuint buffer; glGenBuffers(1, &buffer); glBindBuffer(GL_ARRAY_BUFFER, buffer); glBufferData(GL_ARRAY_BUFFER, sizeof(points) + sizeof(colors) + sizeof(normals), NULL, GL_STATIC_DRAW); glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(points), points); glBufferSubData(GL_ARRAY_BUFFER, sizeof(points), sizeof(colors), colors); glBufferSubData(GL_ARRAY_BUFFER, sizeof(colors), sizeof(normals), normals); sizeof(points) + 77 } 2.3.1 Mô hình phân cấp Bánh xe: node Thân xe: node cha Code minh họa: void thanxe() { instance = Scale(8 * dv, dv / 2, * dv); glUniformMatrix4fv(model_loc, 1, GL_TRUE, xev * instance); glDrawArrays(GL_TRIANGLES, 0, NumPoints); } void banhxe() { for (int i = 0; i < 40; i++) { u += 15; instance = RotateZ(u) * Scale(dv, dv, dv / 3); glUniformMatrix4fv(model_loc, 1, GL_TRUE, xev * instance); glDrawArrays(GL_TRIANGLES, 0, NumPoints); } } void letren() { instance = Scale(6 * dv, 2.5 * dv, 0.01); glUniformMatrix4fv(model_loc, 1, GL_TRUE, xev * instance); glDrawArrays(GL_TRIANGLES, 0, NumPoints); 78 } void lesau() { instance = Scale(dv / 20, 2.5 * dv, * dv); glUniformMatrix4fv(model_loc, 1, GL_TRUE, xev * instance); glDrawArrays(GL_TRIANGLES, 0, NumPoints); } void ngoi() { instance = Scale(2 * dv, 2.5 * dv, 1.5 * dv); glUniformMatrix4fv(model_loc, 1, GL_TRUE, xev * instance); glDrawArrays(GL_TRIANGLES, 0, NumPoints); } void xe() { material_diffuse = vec4(255.0 / 255, 155.0 / 255, 255.0 / 255, 1); // mau vat (R, G, B, x) -> Blue diffuse_product = light_diffuse * material_diffuse; glUniform4fv(glGetUniformLocation(program, "DiffuseProduct"), 1, diffuse_product); xev = Translate(m, * dv / 2, n) * Translate(1, 0, 0)* RotateY(c); thanxe(); luu = xev; //banh xe 79 xev = luu * Translate(7 * dv / 2, -dv / 2, dv); banhxe(); //banh xe xev = luu * Translate(7 * dv / 2, -dv / 2, -dv); banhxe(); //banh xe xev = luu * Translate(-7 * dv / 2, -dv / 2, dv); banhxe(); //banh xe xev = luu * Translate(-7 * dv / 2, -dv / 2, -dv); banhxe(); material_diffuse = vec4(255.0 / 255, 155.0 / 255, 155.0 / 255, 1); // mau vat (R, G, B, x) -> tim diffuse_product = light_diffuse * material_diffuse; glUniform4fv(glGetUniformLocation(program, "DiffuseProduct"), 1, diffuse_product); // le tren cua xe xev = luu * Translate(-dv, 1.5 * dv, -dv); letren(); xev = luu * Translate(-dv, 1.5 * dv, +dv); letren(); // le sau cua xe xev = luu * Translate(-4 * dv, 1.5 * dv, 0); lesau(); xev = luu * Translate(2 * dv, 1.5 * dv, 0); 80 lesau(); //ngoi material_diffuse = vec4(0 / 255, 155.0 / 255, 155.0 / 255, 1); // mau vat (R, G, B, x) -> xanh luc diffuse_product = light_diffuse * material_diffuse; glUniform4fv(glGetUniformLocation(program, "DiffuseProduct"), 1, diffuse_product); xev = luu * Translate(3 * dv, * dv, 0); ngoi(); } 2.3.2 Kỹ thuật cài đặt +Tịnh tiến +Quay // BEGIN: ĐIỀU KHIỂN XE CHO HANG case 'm': m += 0.1; // dieu khien xe tien len glutPostRedisplay(); break; case 'M': m -= 0.1; // dieu khien xe lui glutPostRedisplay(); break; case 'n': n += 0.1; // dieu khien xe sang trai 81 glutPostRedisplay(); break; case 'N': n -= 0.1; // dieu khien xe sang phai glutPostRedisplay(); break; case 'c': //quay xe theo chiều kim đồng hồ c += 5; if (theta[0] > 360) theta[0] -= 360; glutPostRedisplay(); break; case 'C': //quay xe theo ngược kim đồng hồ c -= 5; if (theta[0] > 360) theta[0] -= 360; glutPostRedisplay(); break; 82 2.4 Thiết lập điều khiển phép chiếu, camera void reshape(int width, int height) { 83 vec4 eye(1, 1, 2, 1); vec4 at(0, 0, 0, 1); vec4 up(0, 1, 0, 1); view = LookAt(eye, at, up); glUniformMatrix4fv(view_loc, 1, GL_TRUE, view); projection = Frustum(-1, 1, -1, 1, 1, 4); glUniformMatrix4fv(projection_loc, 1, GL_TRUE, projection); glViewport(0, 0, width, height); } 2.5 thiết lập màu chiếu sáng cho đối tượng 84 85 CHƯƠNG KẾT QUẢ CHƯƠNG TRÌNH - Mơ hình chạy ổn định, ko phát sinh lỗi - Project áp dụng phép chiếu , người dùng thay đổi góc nhìn khoảng nhìn tùy ý - Mô hoạt động ga: đồn tàu di chuyển mở cửa, thang máy di chuyển lên xuống mở cửa 86 Hình 3.1: ảnh chụp bắt đầu chạy chương trình Hình3.2 87 Hình 3.3 : Thang máy di chuyển lên xuống 88 Hình3.4 Đồn tàu di chuyển 89 KẾT LUẬN - Nhóm áp dụng kỹ thuật cài đặt với mơ hình phân cấp, áp dụng phép chiếu chiếu sáng, mô tương đối hoạt động bốc dỡ thùng hàng 90 - Định hướng nhóm phát triển thời gian tới áp dụng kĩ thuật vẽ đường cong mặt cong cho mơ hình dự án theo phương pháp học CÁC TÀI LIỆU THAM KHẢO - Các đề cương giảng Ths Vũ Minh Yến - Giáo trình Đồ họa máy tính trường Đại học Công nghiệp Hà Nội - Các nguồn tài liệu thao khảo trang https://www.khronos.org/ 91 ... tài: Mô hoạt động ga tàu MỤC LỤC CHƯƠNG 1: MÔ TẢ BÀI TỐN 1.1 Giới thiệu đề tài Nhóm chúng em mô phong hoạt động ga tàu bao gồm đồn tàu di chuyển, ga tàu có thang máy để di chuyển lên xuống ga 1.2... phần mềm Thuật ngữ đồ họa máy tính đề xuất nhà khoa học người mỹ tên William Fetter năm 1960 ông nghiên cứu xây dựng mơ hình buồng lái máy bay cho hãng Boeing Các chương trình đồ họa ứng dụng cho...2 LỜI MỞ ĐẦU Đồ họa máy tính ngành khoa học Tin học chuyên nghiên cứu phương pháp kỹ thuật để mơ tả thao tác đối tượng giới thực máy tính Đó q trình xây dựng phát triển

Ngày đăng: 07/12/2021, 20:57

Mục lục

  • CHƯƠNG 1: MÔ TẢ BÀI TOÁN

    • 1.1 Giới thiệu đề tài

    • 1.2 Mô tả mô hình và kịch bản

    • 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 <đối tượng tàu >

        • 2.2.1. Mô hình phân cấp

        • 2.1.2. Kỹ thuật cài đặt

        • 2.2. Thiết kế và cài đặt <đối tượng ga tàu >

          • 2.2.1. Mô hình phân cấp

          • 2.2.2. Kỹ thuật cài đặt

          • 2.3. Thiết kế và cài đặt <đối tượng ga tàu>

            • void chot()

            • { //Tang 1

            • mat4 instance;

            • //san

            • instance = Translate(1.5, 0, 0.5) * Scale(3, 0.1, 3);

            • glUniformMatrix4fv(model_view_loc, 1, GL_TRUE,model_view * instance_ban * instance);

            • glDrawArrays(GL_TRIANGLES, 0, NumPoints);

            • //santang1 ben phai

            • instance = Translate(3.75, 0, 0.5) * Scale(1.5, 0.1, 3);

            • glUniformMatrix4fv(model_view_loc, 1, GL_TRUE, model_view * instance_ban * instance);

            • glDrawArrays(GL_TRIANGLES, 0, NumPoints);

            • //santang 2

            • //damgan thang may

            • instance = Translate(3.75, 2, 0.2) * Scale(1.5, 0.1, 3.5);

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

Tài liệu liên quan