1. Trang chủ
  2. » Luận Văn - Báo Cáo

Bài tập lớn đồ hoạ máy tính mô phỏng hoạt động của một số đồ dùng trong phòng làm việc

19 6 0

Đ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

Thông tin cơ bản

Tiêu đề Mô Phỏng Hoạt Động Của Một Số Đồ Dùng Trong Phòng Làm Việc
Tác giả Trần Ngọc Hải, Lưu Thị Minh Tú, Đặng Thị Thu Huế
Người hướng dẫn Ths. Vũ Minh Yến
Trường học Trường Đại Học Công Nghiệp Hà Nội
Chuyên ngành Công Nghệ Thông Tin
Thể loại Bài Tập Lớn
Năm xuất bản 2021
Thành phố Hà Nội
Định dạng
Số trang 19
Dung lượng 347,25 KB

Nội dung

Code xây dựng một số đồ dùng trong phòng làm việc...82.. Hiển thị...17 Trang 3 LỜI NÓI ĐẦ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

Trang 1

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ô phỏng hoạt động của một số đồ dùng trong phòng làm việc

Hà nội, năm 2021

Giảng viên hướng dẫn: Ths Vũ Minh Yến Nhóm thực hiện: Nhóm 5

Thành viên trong nhóm: Trần Ngọc Hải

Lưu Thị Minh Tú Đặng Thị Thu Huế

Trang 2

Mục Lục

I Mô phỏng hoạt động 4

1 Hoạt động cơ bản 4

2 Hoạt động chi tiết 4

II Cách thực hiện 8

1 Code xây dựng một số đồ dùng trong phòng làm việc 8

2 Code phép chiếu, góc nhìn camera 16

3 Hiển thị 17

III Kết quả đạt được 19

Trang 3

LỜI NÓI ĐẦ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 sáng tạo và nâng cao năng suất làm việc

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: Mô phỏng hoạt

động của một số đồ dùng trong phòng làm việc

Trang 4

I Mô phỏng hoạt động

1 Hoạt động cơ bản

 Xây dựng mô hình phòng làm việc

 Xây dựng chuyển động của các vật trong cửa hàng

 Xây dựng góc nhìn thay đổi

 Cửa hàng có thể quay 360 độ

2 Hoạt động chi tiết

{

// keyboard handler

switch (key) {

break;

//case 1,2 điều khiển quạt case'1':

xoayquat += 5;

glutPostRedisplay();

break;

case'2':

glutPostRedisplay();

break;

case'3':

// mở ngăn kéo trên

theta[5] += 0.01f;

glutPostRedisplay();

break;

case'4':

// đóng ngăn kéo trên

theta[5] -= 0.01f;

glutPostRedisplay();

break;

case'5':

// mở ngăn kéo dưới

theta[6] += 0.01f;

glutPostRedisplay();

break;

case'6':

// đóng ngăn kéo dưới

theta[6] -= 0.01f;

glutPostRedisplay();

break;

case'0':

Trang 5

//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ế

chan_ghe_y += 0.01f;

glutPostRedisplay();

break;

case'9':

//hạ thấp ghế

chan_ghe_y -= 0.01f;

glutPostRedisplay();

break;

case'q':

//di chuyển sang trái

theta[9] -= 0.05f;

glutPostRedisplay();

break;

case'w':

//di chuyển sang phải

theta[10] += 0.05f;

glutPostRedisplay();

break;

case'e':

//di chuyển về phía trước

theta[11] -= 0.05f;

glutPostRedisplay();

break;

case'r':

//di chuyển ra sau

theta[12] += 0.05f;

glutPostRedisplay();

break;

//điều khiển phóng to thu nhỏ (l, r, top ,bottom, zNear, zFar :biến khởi tạo camera)

case'x':

l *= 1.1f; r *= 1.1f;

break;

case'X':

l *= 0.9f; r *= 0.9f;

break;

Trang 6

case'y':

bottom *= 1.1f; top *= 1.1f;

break;

case'Y':

bottom *= 0.9f; top *= 0.9f;

break;

case'z':

zNear *= 1.1f; zFar *= 1.1f;

break;

case'Z':

zNear *= 0.9f; zFar *= 0.9f;

break;

case' ':

// reset values to their defaults

l = -0.8;

r = 0.8;

bottom = -0.8;

top = 0.8;

zNear = 1.9;

zFar = 4.0;

theta[5] = 0;

theta[6] = 0;

theta[13] = 0;

theta[14] = 0;

theta[15] = 0;

break;

//z

case'a':

theta[13] += 5;

break;

case'd':

theta[13] -= 5;

break;

//y

case'c':

theta[14] += 5;

break;

case's':

theta[14] -= 5;

break;

//x

case'h':

theta[15] += 5;

break;

case'g':

Trang 7

theta[15] -= 5;

break; }

glutPostRedisplay();

}

- Khi ấn phím ‘1’, ấn 1 lần quạt sẽ quay 5o

- Khi ấn phím ‘2’, khi quạt đứng yên ấn 1 lần quạt sẽ tự động quay, ấn thêm lần nữa quạt sẽ dừng

- Khi ấn ‘3’, ngăn kéo trên của bàn sẽ mở

- Khi ấn ‘4’, ngăn kéo trên của bàn sẽ đóng

- Khi ấn ‘5’, ngăn kéo dưới của bàn sẽ mở

- Khi ấn ‘6’, ngăn kéo dưới của bàn sẽ đóng

- Khi ấn ‘0’, ghế sẽ xoay sang phải

- Khi ấn ‘7’, ghế sẽ xoay sang trái

- Khi ấn ‘8’, ghế sẽ nâng lên

- Khi ấn ‘9’, ghế sẽ hạ thấp xuống

- Khi ấn ‘q’, ghế sẽ di chuyển sang trái

- Khi ấn ‘w’, ghế sẽ di chuyển sang phải

- Khi ấn ‘e’, ghế sẽ di chuyển lên phía trước

- Khi ấn ‘r’, ghế sẽ di chuyển ra 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 sẽ được reset lại như 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

Trang 8

II Cách thực hiện

1 Code xây dựng phòng làm việc

a Code căn 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 bức tường mong muốn

GLfloatheight_wall, GLfloatdepth_wall)

{

depth_wall);

glUniform4fv(glGetUniformLocation(program, "DiffuseProduct"), 1, diffuse_product);

glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * instance);

}

// hàm vẽ căn phòng

{

GLfloat x = 0.0f, y = -height_wall * 0.5, z = 0.0f;

// hàm vẽ sàn > sàn có thể quay quanh trục ox

wall_room(x, y, z, width_wall, height_wall, depth_wall);

// hàm vẽ tường sau > sàn có thể quay quanh trục oy

// make 3 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;

tường (như trên)

// hàm vẽ tường trái

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);

}

Trang 9

b Code quạt trần

/* - QUẠT TRẦN - */

// thuộc tính của 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

{

DAY_RONG);

glUniform4fv(glGetUniformLocation(program, "DiffuseProduct"), 1, diffuse_product);

glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * transl * instance);

}

{

CANH_DAI / 2, DAY_CAO / 2, 0)

glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * transl * instance);

}

{

// xoay quanh trục y 120 + độ xoay quạt

+ CANH_DAI / 2, DAY_CAO / 2, 0)

glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * transl * instance);

}

{

+ CANH_DAI / 2, DAY_CAO / 2, 0)

glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * transl * instance);

}

Trang 10

void truc()

{

Scale(TRUC_DAI, TRUC_CAO, TRUC_RONG);

glUniform4fv(glGetUniformLocation(program, "DiffuseProduct"), 1, diffuse_product);

glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * transl * instance);

}

{

Scale(DINH_DAI, DINH_CAO, DINH_RONG);

glUniform4fv(glGetUniformLocation(program, "DiffuseProduct"), 1, diffuse_product);

glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * transl * instance);

}

{

xoayquat += 3;

canh_1();

canh_2();

canh_3();

glutPostRedisplay();

}

else { // nếu checker == false -> biến xuay quạt vẫn giữ nguyên giá trị

canh_1();

canh_2();

canh_3();

}

}

// tạo quạt

{

// quạt là mô hình 1 cấp (ko cha con) nhưng có thể quay tự động theo phím

2

}

Trang 11

c Code bàn làm việc

/* - BÀN LÀM VIỆC

- */

// khai báo giá trị các thành phần của 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 của 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;

// xây dựng khung ngăn kéo

height, GLfloatdepth)

{

glUniform4fv(glGetUniformLocation(program, "DiffuseProduct"), 1, diffuse_product);

glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * transl *

}

//xây dựng bàn

height, GLfloatdepth)

{

glUniform4fv(glGetUniformLocation(program, "DiffuseProduct"), 1, diffuse_product);

glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * transl *

}

// xây dựng ngăn kéo

// lí do lấy ban1 để xây dựng là vì 2 cạnh bàn làm luôn cạnh của ngăn kéo

{

GLfloat x = 0.0f, y = 0.0f, z = 0.0f;

// hai bên thành ngăn bàn

Trang 12

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);

}

{

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 thanh 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;

ngan_keo_ban();

ngan_keo_ban();

}

Trang 13

d Code bộ máy tính

/* - MÀN HÌNH MÁY TÍNH & CÂY MÁY

TÍNH - */

GLfloatheight, GLfloatdepth)

{

glUniform4fv(glGetUniformLocation(program, "DiffuseProduct"), 1, diffuse_product);

glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * transl * instance);

}

//chỉnh màu cây máy tính

GLfloatheight, GLfloatdepth)

{

glUniform4fv(glGetUniformLocation(program, "DiffuseProduct"), 1, diffuse_product);

glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * transl * instance);

}

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;

{

GLfloat x = 0.0f, y = 0.0f, z = 0.0f;

// đế màn hình

// cái dấu + ở phía chân màn hình ấy

// phần này 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);

// thanh đỡ màn 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);

// màn hình -> tĩnh

Trang 14

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);

}

{

// tĩnh

ManHinh1(0.0f, 0.5 * phim_y, 0.0f, phim_x, phim_y, phim_z);

}

// tĩnh

{

ManHinh1(0.0f, 0.15, 0.0f, 0.04f, 0.18f, phim_x);

}

e Code ghế ngồi

/* - GHẾ NGỒI - */

height, GLfloatdepth)

{

height, depth);

glUniform4fv(glGetUniformLocation(program, "DiffuseProduct"), 1, diffuse_product);

glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * transl *

}

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;

{

GLfloat x = 0.0f, y = 0.5 * de_ghe_y, z = 0.0f;

Trang 15

di_chuyen_ghe = Translate(theta[9] + theta[10], 0.0f, theta[11] + theta[12]);

// cái theta trong keyboard này

// đế ghế (đáy ghế) -> cha

Ghe(x, y, z, de_ghe_x, de_ghe_y, de_ghe_z);

// chân ghế -> con của 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ế

0.0f)

+ chan_ghe_y + 0.5 * than_de_y), 0.0f);

// đế ngồi > con của thằng chân ghế, cháu của đá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 -> con của thằng chân ghế, cháu của đáy ghế

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);

// tựa tay >con của thằng chân ghế, cháu của đáy ghế

x = 0.5 * tua_lung_x - 0.5 * tua_tay_x, y = de_ghe_y + chan_ghe_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);

}

f Code bức tranh

/* - VẼ BỨC TRANH

- */

// tĩnh

{

glUniform4fv(glGetUniformLocation(program, "DiffuseProduct"), 1, diffuse_product);

Trang 16

glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * transl * instance);

}

{

glUniform4fv(glGetUniformLocation(program, "DiffuseProduct"), 1, diffuse_product);

glUniformMatrix4fv(model_loc, 1, GL_TRUE, model * transl * instance_lk

}

{

//vẽ trụ

demoChong(0.02f, 0.1f, 0.01f);

//vẽ cánh 1

demoChong(0.02f, 0.05f, 0.01f);

demoChong(0.02f, 0.05f, 0.01f);

}

2 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

point4 eye(eye_x, eye_y, eye_z, 1.0);

point4 at(0.0, 0.0, 0.0, 1.0);

glUniformMatrix4fv(view_loc, 1, GL_TRUE, view);

glUniformMatrix4fv (projection_loc, 1, GL_TRUE , p);

Trang 17

3 Hiển thị

{

hàm quay xung quanh (view của phòng -x-y-z)

// dùng chung transl để make vị trí

//model = identity() * RotateX(-30) * RotateY(60);

// vẽ phòng

room_build();

// vẽ quạt

tao_quat();

// vẽ bàn làm việc

ban_build();

// vẽ màn hình máy tính

ManHinh_Build();

//vẽ bàn phím

BanPhim_Build();

//vẽ cây máy tính

// vẽ ghế ngồi

RotateY(90);

Build_Ghe();

//vẽ bức tranh 1 trên bàn máy tính

-0.4f);

buctranh(0.02, 0.25, 0.25);

chongchong();

//vẽ bức tranh 2

width_wall2, 0.6f, -0.1f);

buctranh(0.02, 0.3, 0.5);

Trang 18

chongchong();

chongchong();

//

point4 eye(eye_x, eye_y, eye_z, 1.0);

point4 at(0.0, 0.0, 0.0, 1.0);

glUniformMatrix4fv(view_loc, 1, GL_TRUE, view);

glUniformMatrix4fv(projection_loc, 1, GL_TRUE, p); glutSwapBuffers();

}

III Kết quả đạt được

Trang 19

KẾT LUẬN

Qua việc thực hiện nghiên cứu đề tài “Mô phỏng hoạt động của một số

đồ dùng trong phòng làm việc”, nhóm chúng em đã được biết thêm rất nhiều về 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ỹ năng làm việc nhóm.

Trong quá trình thực hiện đề tài có rất nhiều ý tưởng hay, độc đáo Nhưng do kiến thức của chúng em hạn hẹp và thời gian không cho phép nên chúng em chưa thể thực hiện được những ý tưởng đó Tuy nhiên chúng em đã cố gắng để xây dựng một chương trình hoàn chỉnh nhất, đẹp nhất Trong quá trình xây dựng chương trình, nhóm chúng em khó tránh khỏi những sai sót Vì vậy em rất mong rằng cô và các bạn cùng góp ý với nhóm em để có thể hoàn thành sản phẩm một cách hoàn chỉnh nhất.

Chúng em xin cảm ơn cô Vũ Minh Yến đã tận tình giảng dạy chúng em trong môn Đồ họa máy tính Giúp đỡ chúng em trong quá trình nghiên cứu đề tài.Chia sẻ những tài liệu hay về thư viện OpenGl cũng như các

kĩ năng lập trình.

Chúng em xin chân thành cảm ơn!

Ngày đăng: 21/03/2024, 17:27

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w