TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN - - BÀI TẬP LỚN ĐỒ HOẠ MÁY TÍNH Đề tài: Mơ hoạt động số đồ dùng phòng làm việc Giảng viên hướng dẫn: Ths Vũ Minh Yến Nhóm thực hiện: Nhóm Thành viên nhóm: Trần Ngọc Hải Lưu Thị Minh Tú Đặng Thị Thu Huế Hà nội, năm 2021 Mục Lục I Mô hoạt động .4 Hoạt động Hoạt động chi tiết II Cách thực Code xây dựng số đồ dùng phòng làm việc Code phép chiếu, góc nhìn camera 16 Hiển thị 17 III Kết đạt 19 LỜI NÓI ĐẦU Đồ họa máy tính lĩnh vực khoa học máy tính nghiên cứu sở tố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ả sáng tạo nâng cao suất làm việc 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: Mô hoạt động số đồ dùng phòng làm việc I Mô hoạt động Hoạt động Xây dựng mơ hình phịng làm việc Xây dựng chuyển động vật cửa hàng Xây dựng góc nhìn thay đổi Cửa hàng quay 360 độ Hoạt động chi tiết void keyboard(unsigned char key, int x, int y) { // keyboard handler switch (key) { case 033: // 033 is Escape key octal value exit(1); // quit program break; //case 1,2 điều khiển quạt case '1': xoayquat += 5; glutPostRedisplay(); break; case '2': checked = !checked; // thay đổi giá trị true - false glutPostRedisplay(); break; case '3': // mở ngăn kéo theta[5] += 0.01f; glutPostRedisplay(); break; case '4': // đóng ngăn kéo theta[5] -= 0.01f; glutPostRedisplay(); break; case '5': // mở ngăn kéo theta[6] += 0.01f; glutPostRedisplay(); break; case '6': // đóng ngăn kéo theta[6] -= 0.01f; glutPostRedisplay(); break; case '0': //xoay ghế hình trịn sang phải theta[7] += 5.0f; glutPostRedisplay(); break; case '7': //xoay ghế hình tròn sang trái theta[8] -= 5.0f; glutPostRedisplay(); break; case '8': //nâng ghế if (chan_ghe_y > thanh_y) break; chan_ghe_y += 0.01f; glutPostRedisplay(); break; case '9': //hạ thấp ghế if (chan_ghe_y 360) theta[13] -= 360; break; case 'd': theta[13] -= 5; if (theta[13] > 360) theta[13] -= 360; break; //y case 'c': theta[14] += 5; if (theta[14] > 360) theta[14] -= 360; break; case 's': theta[14] -= 5; if (theta[14] > 360) theta[14] -= 360; break; //x case 'h': theta[15] += 5; if (theta[15] > 360) theta[15] -= 360; break; case 'g': theta[15] -= 5; if (theta[15] > 360) theta[15] -= 360; break; } glutPostRedisplay(); } - Khi ấn phím ‘1’, ấn lần quạt quay 5o - Khi ấn phím ‘2’, quạt đứng yên ấn lần quạt tự động quay, ấn thêm lần quạt dừng - Khi ấn ‘3’, ngăn kéo bàn mở - Khi ấn ‘4’, ngăn kéo bàn đóng - Khi ấn ‘5’, ngăn kéo bàn mở - Khi ấn ‘6’, ngăn kéo bàn đóng - Khi ấn ‘0’, ghế xoay sang phải - Khi ấn ‘7’, ghế xoay sang trái - Khi ấn ‘8’, ghế nâng lên - Khi ấn ‘9’, ghế hạ thấp xuống - Khi ấn ‘q’, ghế di chuyển sang trái - Khi ấn ‘w’, ghế di chuyển sang phải - Khi ấn ‘e’, ghế di chuyển lên phía trước - Khi ấn ‘r’, ghế di chuyển sau - Khi ấn ‘X’ cửa hàng phóng to theo trục x, ấn ‘x’ cửa hàng thu nhỏ theo trục x - Khi ấn ‘Y’ cửa hàng phóng to theo trục y, ấn ‘y’ cửa hàng thu nhỏ theo trục y - Khi ấn ‘Z’ cửa hàng phóng to theo trục z, ấn ‘z’ cửa hàng thu nhỏ theo trục z - Khi ấn ‘ ’ kích thước phịng reset lại ban đầu - Khi ấn ‘h’, ‘g’ cửa hàng nội thất quay 360 độ theo trục x - Khi ấn ‘w’, ‘s’ cửa hàng nội thất quay 360 độ theo trục y - Khi ấn ‘a’, ‘d’ cửa hàng nội thất quay 360 độ theo trục z II Cách thực Code xây dựng phòng làm việc a Code phòng /* DỰNG HÌNH CĂN PHỊNG */ // hàm biến đổi khối hình lập phương thành tường mong muốn void wall_room(GLfloat tranX, GLfloat tranY, GLfloat tranZ, GLfloat width_wall, GLfloat height_wall, GLfloat depth_wall) { instance = Translate(tranX, tranY, tranZ) * Scale(width_wall, height_wall, depth_wall); material_diffuse = vec4(-0.5,1,-0.5,0.5); diffuse_product = light_diffuse * material_diffuse; glUniform4fv(glGetUniformLocation(program, "DiffuseProduct"), 1, diffuse_product); glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * instance); glDrawArrays(GL_TRIANGLES, 0, NumPoints); } // hàm vẽ phòng void room_build() { GLfloat x = 0.0f, y = -height_wall * 0.5, z = 0.0f; // hàm vẽ sàn > sàn quay quanh trục ox quay_mau = RotateX(90); wall_room(x, y, z, width_wall, height_wall, depth_wall); // hàm vẽ tường sau > sàn quay quanh trục oy quay_mau = RotateY(-90); // make giá trị x,y,z để tạo tường sau qua hàm wall_room x = 0.0f; y = height_wall1 * 0.5 - height_wall; z = depth_wall * 0.5; wall_room(x, y, z, width_wall1, height_wall1, depth_wall1); // hàm tạo tường (như trên) // hàm vẽ tường trái quay_mau = identity(); x = -width_wall * 0.5; y = height_wall2 * 0.5 - height_wall; z = 0.0f; wall_room(x, y, z, width_wall2, height_wall2, depth_wall2); quay_mau = identity(); } b Code quạt trần /* QUẠT TRẦN */ // thuộc tính quạt trần GLfloat CANH_DAI = 0.4, CANH_RONG = 0.2, CANH_CAO = 0.02, DINH_DAI = 0.05, DINH_RONG = 0.05, DINH_CAO = 0.05, DAY_DAI = 0.05, DAY_RONG = 0.05, DAY_CAO = 0.05, TRUC_DAI = 0.05, TRUC_RONG = 0.04, TRUC_CAO = 0.2, NOI_DAI = 0.05, NOI_RONG = 0.02, NOI_CAO = 0.05; GLfloat xoayquat = 0; GLboolean checked = false;//Kiểm tra quạt có hoạt động hay khơng void day() { instance = Translate(0, DAY_CAO / 2, 0) * Scale(DAY_DAI, DAY_CAO, DAY_RONG); material_diffuse = vec4(0.5, 1.5, 2, 1); diffuse_product = light_diffuse * material_diffuse; glUniform4fv(glGetUniformLocation(program, "DiffuseProduct"), 1, diffuse_product); glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * transl * instance); glDrawArrays(GL_TRIANGLES, 0, NumPoints); } void canh_1() { instance = RotateY(xoayquat) * Translate(DAY_DAI / + NOI_DAI + CANH_DAI / 2, DAY_CAO / 2, 0) * Scale(CANH_DAI, CANH_CAO, CANH_RONG); glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * transl * instance); glDrawArrays(GL_TRIANGLES, 0, NumPoints); } void canh_2() { // xoay quanh trục y 120 + độ xoay quạt instance = RotateY(120 + xoayquat) * Translate(DAY_DAI / + NOI_DAI + CANH_DAI / 2, DAY_CAO / 2, 0) * Scale(CANH_DAI, CANH_CAO, CANH_RONG); glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * transl * instance); glDrawArrays(GL_TRIANGLES, 0, NumPoints); } void canh_3() { instance = RotateY(240 + xoayquat) * Translate(DAY_DAI / + NOI_DAI + CANH_DAI / 2, DAY_CAO / 2, 0) * Scale(CANH_DAI, CANH_CAO, CANH_RONG); glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * transl * instance); glDrawArrays(GL_TRIANGLES, 0, NumPoints); } void truc() { instance = Translate(0, DAY_CAO + TRUC_CAO / 2, 0)* Scale(TRUC_DAI, TRUC_CAO, TRUC_RONG); material_diffuse = vec4(0.5, 1.5, 2, 1); diffuse_product = light_diffuse * material_diffuse; glUniform4fv(glGetUniformLocation(program, "DiffuseProduct"), 1, diffuse_product); glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * transl * instance); glDrawArrays(GL_TRIANGLES, 0, NumPoints); } void dinh() { instance = Translate(0, DAY_CAO + TRUC_CAO + DINH_CAO / 2, 0) * Scale(DINH_DAI, DINH_CAO, DINH_RONG); material_diffuse = vec4(0.5, 1.5, 2, 1); diffuse_product = light_diffuse * material_diffuse; glUniform4fv(glGetUniformLocation(program, "DiffuseProduct"), 1, diffuse_product); glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * transl * instance); glDrawArrays(GL_TRIANGLES, 0, NumPoints); } void canhquat() { if (checked) { // cheked == true xoayquat += 3; canh_1(); canh_2(); canh_3(); glutPostRedisplay(); } else { // checker == false -> biến xuay quạt giữ nguyên giá trị canh_1(); canh_2(); canh_3(); } } // tạo quạt void tao_quat() { // quạt mơ hình cấp (ko cha con) quay tự động theo phím truc(); // tĩnh dinh(); // tĩnh canhquat(); // động day(); // tĩnh } c Code bàn làm việc /* - */ BÀN LÀM VIỆC // khai báo giá trị thành phần bàn GLfloat mat_x = 0.5f, mat_y = 0.015f, mat_z = 0.25f; GLfloat thanh_x = 0.015f, thanh_y = 0.2f, thanh_z = 0.25f; // khai báo số đo ngắn kéo tủ GLfloat thanh_keo_x = 0.01f, thanh_keo_y = 0.08f, thanh_keo_z = 0.25f; GLfloat cua_keo_x = 0.2f + 0.5 * thanh_x, cua_keo_y = 0.08, cua_keo_z = 0.01f; GLfloat de_keo_x = 0.2f - thanh_x, de_keo_y = 0.01f, de_keo_z = 0.25f; mat4 Tran_ngan_keo; // xây dựng khung ngăn kéo void Ban(GLfloat TranX, GLfloat TranY, GLfloat TranZ, GLfloat width, GLfloat height, GLfloat depth) { instance = Translate(TranX, TranY, TranZ) * Scale(width, height, depth); material_diffuse = vec4(-0.5, 0, 1, 1);// hàm màu sắc diffuse_product = light_diffuse * material_diffuse; glUniform4fv(glGetUniformLocation(program, "DiffuseProduct"), 1, diffuse_product); glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * transl * Tran_ngan_keo * instance); glDrawArrays(GL_TRIANGLES, 0, NumPoints); } //xây dựng bàn void Ban1(GLfloat TranX, GLfloat TranY, GLfloat TranZ, GLfloat width, GLfloat height, GLfloat depth) { instance = Translate(TranX, TranY, TranZ) * Scale(width, height, depth); material_diffuse = vec4(1.1, 0, 1, 1); // hàm màu sắc diffuse_product = light_diffuse * material_diffuse; glUniform4fv(glGetUniformLocation(program, "DiffuseProduct"), 1, diffuse_product); glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * transl * Tran_ngan_keo * instance); glDrawArrays(GL_TRIANGLES, 0, NumPoints); } // xây dựng ngăn kéo // lí lấy ban1 để xây dựng cạnh bàn làm ln cạnh ngăn kéo void ngan_keo_ban() { GLfloat x = 0.0f, y = 0.0f, z = 0.0f; // hai bên thành ngăn bàn x = (0.5 * cua_keo_x - thanh_x); y = 0.5 * thanh_keo_y; z = 0.0f; Ban1(x, y, z, thanh_keo_x, thanh_keo_y, thanh_keo_z); Ban1(-x, y, z, thanh_keo_x, thanh_keo_y, thanh_keo_z); // cánh cửa mặt trước ngăn kéo x = 0.0f; y = 0.5 * cua_keo_y; z = -(0.5 * thanh_keo_z); Ban1(x, y, z, cua_keo_x, cua_keo_y, cua_keo_z); // tay nắm ngăn bàn z -= 0.015f; Ban(x, y, z, 0.06f, 0.01f, 0.01f); // cánh cửa mặt sau ngăn bàn x = 0.0f; y = 0.5 * cua_keo_y; z = (0.45 * thanh_keo_z); Ban1(x, y, z, cua_keo_x, cua_keo_y, cua_keo_z); // đế ngăn bàn x = 0.0f; y = 0.5 * de_keo_y; z = 0.0f; Ban1(x, y, z, de_keo_x, de_keo_y, de_keo_z); } void ban_build() { GLfloat x = 0.0f, y = 0.0f, z = 0.0f; // mặt bàn x = 0.0f; y = 0.5 * mat_y + thanh_y; z = 0.0f; Ban(x, y, z, mat_x, mat_y, mat_z); // ba bàn x = -(0.5 * mat_x - 0.5 * thanh_x); y = 0.5 * thanh_y; z = 0.0f; Ban(x, y, z, thanh_x, thanh_y, thanh_z); Ban(-x, y, z, thanh_x, thanh_y, thanh_z); x = 0.1 * mat_x; Ban(x, y, z, thanh_x, thanh_y, thanh_z); // phần ngăn kéo bàn x = 0.1 * mat_x + 0.2 * mat_x - 0.5 * thanh_x; y = thanh_y - 0.04f - 0.5 * thanh_keo_y; z = 0.0f; Tran_ngan_keo = identity() * Translate(x, y, z - theta[5]); ngan_keo_ban(); Tran_ngan_keo = Translate(x, y - thanh_keo_y, z - theta[6]); ngan_keo_ban(); Tran_ngan_keo = identity(); } d Code máy tính /* MÀN HÌNH MÁY TÍNH & CÂY MÁY TÍNH */ mat4 dat_len_ban; void ManHinh(GLfloat TranX, GLfloat TranY, GLfloat TranZ, GLfloat width, GLfloat height, GLfloat depth) { instance = Translate(TranX, TranY, TranZ) * Scale(width, height, depth); material_diffuse = vec4(1,1,0,1); diffuse_product = light_diffuse * material_diffuse; glUniform4fv(glGetUniformLocation(program, "DiffuseProduct"), 1, diffuse_product); glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * transl * instance); glDrawArrays(GL_TRIANGLES, 0, NumPoints); } //chỉnh màu máy tính void ManHinh1(GLfloat TranX, GLfloat TranY, GLfloat TranZ, GLfloat width, GLfloat height, GLfloat depth) { instance = Translate(TranX, TranY, TranZ) * Scale(width, height, depth); material_diffuse = vec4(0.5,0.5,1,0); diffuse_product = light_diffuse * material_diffuse; glUniform4fv(glGetUniformLocation(program, "DiffuseProduct"), 1, diffuse_product); glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * transl * instance); glDrawArrays(GL_TRIANGLES, 0, NumPoints); } GLfloat de_may_x = 0.08f, de_may_y = 0.005f, de_may_z = 0.015f; GLfloat chan_may_x = 0.015f, chan_may_y = 0.1f, chan_may_z = 0.015f; GLfloat man_hinh_x = 0.2f, man_hinh_y = 0.1f, man_hinh_z = 0.01f; GLfloat phim_x = 0.15f, phim_y = 0.01f, phim_z = 0.06f; void ManHinh_Build() { GLfloat x = 0.0f, y = 0.0f, z = 0.0f; // đế hình // dấu + phía chân hình // phần fix cứng, ko có chuyển động x = 0.0f; y = 0.5 * de_may_y; z = 0.0f; ManHinh(x, y, z, de_may_x, de_may_y, de_may_z); ManHinh(x, y, z, de_may_x, de_may_y, de_may_z); // đỡ hình -> tĩnh x = 0.0f; y = de_may_y + 0.5 * chan_may_y; z = 0.0f; ManHinh1(x, y, z, chan_may_x, chan_may_y, chan_may_z); // hình -> tĩnh x = 0.0f; y = de_may_y + chan_may_y; z = -(cos(M_PI / 6) * chan_may_y) + 0.08; ManHinh(x, y, z, man_hinh_x, man_hinh_y, man_hinh_z); } void BanPhim_Build() { // tĩnh ManHinh1(0.0f, 0.5 * phim_y, 0.0f, phim_x, phim_y, phim_z); } // tĩnh void CayMayTinh_Build() { ManHinh1(0.0f, 0.15, 0.0f, 0.04f, 0.18f, phim_x); } e Code ghế ngồi /* GHẾ NGỒI */ mat4 quay_tua_lung; mat4 quay_ghe; mat4 nang_ghe; mat4 di_chuyen_ghe; void Ghe(GLfloat TranX, GLfloat TranY, GLfloat TranZ, GLfloat width, GLfloat height, GLfloat depth) { instance = Translate(TranX, TranY, TranZ) * quay_tua_lung * Scale(width, height, depth); material_diffuse = vec4(1, 0, 0, 1); // màu sắc diffuse_product = light_diffuse * material_diffuse; glUniform4fv(glGetUniformLocation(program, "DiffuseProduct"), 1, diffuse_product); glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * transl * di_chuyen_ghe * nang_ghe * quay_ghe * instance); glDrawArrays(GL_TRIANGLES, 0, NumPoints); } GLfloat de_ghe_x = 0.1f, de_ghe_y = 0.015f, de_ghe_z = 0.1f; GLfloat chan_ghe_x = 0.015f, chan_ghe_y = 0.1f, chan_ghe_z = 0.015f; GLfloat than_de_x = 0.15f, than_de_y = 0.015f, than_de_z = 0.12f; GLfloat tua_lung_x = 0.15f, tua_lung_y = 0.2f, tua_lung_z = 0.015f; GLfloat tua_tay_x = 0.02f, tua_tay_y = 0.02f, tua_tay_z = 0.1f; void Build_Ghe() { GLfloat x = 0.0f, y = 0.5 * de_ghe_y, z = 0.0f; di_chuyen_ghe = Translate(theta[9] + theta[10], 0.0f, theta[11] + theta[12]); // theta keyboard // đế ghế (đáy ghế) -> cha Ghe(x, y, z, de_ghe_x, de_ghe_y, de_ghe_z); // chân ghế -> thằng đáy ghế x = 0.0f, y = de_ghe_y + 0.5 * chan_ghe_y, z = 0.0f; Ghe(x, y, z, chan_ghe_x, chan_ghe_y, chan_ghe_z); // code quay ghế quay_ghe = Translate(0.0f, (de_ghe_y + chan_ghe_y + 0.5 * than_de_y), 0.0f) * RotateY(theta[7]) * RotateY(theta[8]) * Translate(0.0f, -(de_ghe_y + chan_ghe_y + 0.5 * than_de_y), 0.0f); // đế ngồi > thằng chân ghế, cháu đáy ghế x = 0.0f, y = de_ghe_y + chan_ghe_y + 0.5 * than_de_y, z = 0.0f; Ghe(x, y, z, than_de_x, than_de_y, than_de_z); // tựa lưng -> thằng chân ghế, cháu đáy ghế quay_tua_lung = Translate(0.0f, -0.5 * tua_lung_y, 0.0f) * RotateX(20) * Translate(0.0f, 0.5 * tua_lung_y, 0.0f); x = 0.0f, y = de_ghe_y + chan_ghe_y + 0.5 * than_de_y + 0.5 * tua_lung_y, z = 0.5 * de_ghe_z; Ghe(x, y, z, tua_lung_x, tua_lung_y, tua_lung_z); quay_tua_lung = identity(); // tựa tay >con thằng chân ghế, cháu đáy ghế x = 0.5 * tua_lung_x - 0.5 * tua_tay_x, y = de_ghe_y + chan_ghe_y + than_de_y + 0.3 * tua_lung_y, z = tan(M_PI / 9) * (0.3 * tua_lung_y); Ghe(x, y, z, tua_tay_x, tua_tay_y, tua_tay_z); Ghe(-x, y, z, tua_tay_x, tua_tay_y, tua_tay_z); quay_ghe = identity(); nang_ghe = identity(); } f Code tranh /* - */ VẼ BỨC TRANH // tĩnh void buctranh(GLfloat w, GLfloat h, GLfloat l) { instance = Scale(w, h, l); material_diffuse = vec4(1, 1, 0, 1); // yellow diffuse_product = light_diffuse * material_diffuse; glUniform4fv(glGetUniformLocation(program, "DiffuseProduct"), 1, diffuse_product); glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * transl * instance); glDrawArrays(GL_TRIANGLES, 0, NumPoints); } void demoChong(GLfloat w, GLfloat h, GLfloat l) { instance = Scale(w, h, l); material_diffuse = color4(1, 0, 0, 1.0); // green diffuse_product = light_diffuse * material_diffuse; glUniform4fv(glGetUniformLocation(program, "DiffuseProduct"), 1, diffuse_product); glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * transl * instance_lk * instance); glDrawArrays(GL_TRIANGLES, 0, NumPoints); } void chongchong() { //vẽ trụ instance_lk = identity(); demoChong(0.02f, 0.1f, 0.01f); //vẽ cánh instance_lk = instance_lk * Translate(0, 0.05, 0) * RotateZ(45); demoChong(0.02f, 0.05f, 0.01f); instance_lk = instance_lk * Translate(0, 0, 0) * RotateZ(75); demoChong(0.02f, 0.05f, 0.01f); } Code phép chiếu, góc nhìn camera // Các tham số cho projection GLfloat eye_x = 2.0, eye_y = 1.0, eye_z = -1.5; GLfloat l = -0.8, r = 0.8; GLfloat bottom = -0.8, top = 0.8; GLfloat zNear = 1.9, zFar = 4.0; // Phép chiếu phối cảnh,vị trí đặt cam,hướng nhìn mat4 view = identity(); point4 eye(eye_x, eye_y, eye_z, 1.0); point4 at(0.0, 0.0, 0.0, 1.0); vec4 up(0.0, 1.0, 0.0, 0.0); view = LookAt(eye, at, up); glUniformMatrix4fv(view_loc, 1, GL_TRUE, view); mat4 p = Frustum(l, r, bottom, top, zNear, zFar); glUniformMatrix4fv(projection_loc, 1, GL_TRUE, p); Hiển thị void display(void) { model = RotateX(theta[13]) * RotateY(theta[14])* RotateZ(theta[15]); // hàm quay xung quanh (view phòng -x-y-z) // dùng chung transl để make vị trí //model = identity() * RotateX(-30) * RotateY(60); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // vẽ phòng room_build(); // vẽ quạt transl = Translate(0, 0.65 * height_wall1, 0); tao_quat(); // vẽ bàn làm việc transl = Translate(-0.5 * width_wall + 0.5 * thanh_y + width_wall2, 0.0f, -0.3f) * RotateY(-90); ban_build(); // vẽ hình máy tính transl = transl * Translate(-0.25 * mat_x, thanh_y + mat_y, 0.2 * mat_z); ManHinh_Build(); //vẽ bàn phím transl = transl * Translate(0.0f, 0.0f, -0.4 * mat_z); BanPhim_Build(); //vẽ máy tính transl = RotateY(90)*Translate(0.1f, 0.15f, -0.6f) ; // vị trí + góc vs trục oy CayMayTinh_Build(); // scale đồ vật theo tỷ lệ cho vào guilt open gl // vẽ ghế ngồi transl = Translate(-0.5 * width_wall + 0.9 * thanh_z, 0.0f, -0.4f) * RotateY(90); Build_Ghe(); //vẽ tranh bàn máy tính transl = Translate(-0.58 * width_wall + 0.6 * thanh_y + width_wall2, 0.6f, -0.4f); buctranh(0.02, 0.25, 0.25); transl = RotateY(90) * Translate(0.4f, 0.6f, -0.71f); chongchong(); //vẽ tranh transl = RotateY(90) * Translate(-0.58 * width_wall + 0.6 * thanh_y + width_wall2, 0.6f, -0.1f); buctranh(0.02, 0.3, 0.5); transl = Translate(0.0f, 0.6f, 0.7f); chongchong(); transl = Translate(-0.1f, 0.6f, 0.7f); chongchong(); transl = Translate(-0.2f, 0.6f, 0.7f); chongchong(); // mat4 view = identity(); point4 eye(eye_x, eye_y, eye_z, 1.0); point4 at(0.0, 0.0, 0.0, 1.0); vec4 up(0.0, 1.0, 0.0, 0.0); view = LookAt(eye, at, up); glUniformMatrix4fv(view_loc, 1, GL_TRUE, view); mat4 p = Frustum(l, r, bottom, top, zNear, zFar); glUniformMatrix4fv(projection_loc, 1, GL_TRUE, p); glutSwapBuffers(); } III Kết đạt KẾT LUẬN Qua việc thực nghiên cứu đề tài “Mô hoạt động số đồ dùng phịng làm việc”, nhóm chúng em biết thêm nhiều mơn đồ họa máy tính Bên cạnh đó, việc làm nghiên cứu giúp chúng em đồn kết hơn, rèn luyện cho chúng em kỹ làm việc nhóm Trong q trình thực đề tài có nhiều ý tưởng hay, độc đáo Nhưng kiến thức chúng em hạn hẹp thời gian không cho phép nên chúng em chưa thể thực ý tưởng Tuy nhiên chúng em cố gắng để xây dựng chương trình hồn chỉnh nhất, đẹp Trong q trình xây dựng chương trình, nhóm chúng em khó tránh khỏi sai sót Vì em mong bạn góp ý với nhóm em để hồn thành sản phẩm cách hoàn chỉnh Chúng em xin cảm ơn Vũ Minh Yến tận tình giảng dạy chúng em mơn Đồ họa máy tính Giúp đỡ chúng em trình nghiên cứu đề tài.Chia sẻ tài liệu hay thư viện OpenGl kĩ lập trình Chúng em xin chân thành cảm ơn! ... 19 LỜI NÓI ĐẦ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... Mô hoạt động số đồ dùng phịng làm việc I Mơ hoạt động Hoạt động Xây dựng mơ hình phịng làm việc Xây dựng chuyển động vật cửa hàng Xây dựng góc nhìn thay đổi Cửa hàng quay 360 độ Hoạt động. .. “Mô hoạt động số đồ dùng phòng làm việc”, nhóm chúng em biết thêm nhiều mơn đồ họa máy tính Bên cạnh đó, việc làm nghiên cứu giúp chúng em đoàn kết hơn, rèn luyện cho chúng em kỹ làm việc nhóm Trong