Tải bản đầy đủ (.docx) (21 trang)

Bài tập lơn môn đồ họa máy tính đề tài :vẽ phòng ngủ

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (373.97 KB, 21 trang )

TRƯƠNG ĐAI HOC CÔNG NGHIÊP HA NÔI
KHOA CÔNG NGHÊ THÔNG TIN
------------

BAO CAO BAI TÂP LƠN
MƠN: ĐỒ HOA MAY TÍNH

ĐỀ TAI: VẼ CĂN PHÒNG NGỦ
Giảng viên:

Vũ Minh Yến

Nhóm 5 :

Phan Văn Học 2019603225
Chu Văn Long 2019602734
Nguyễn Đức Tuấn 2019604244

Lớp:

2021IT6010003

-Ha Nôi, 20211


Mục lục
Contents

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 có liên quan ít
nhiều đến một số lĩnh vực như đại số, hình học giải tích, hình học họa
hình, quang học,... và kĩ thuật máy tính, đặc biệt là chế tạo phần cứng (các
loại màn hình, các thiết bị xuất, nhập, các vỉ mạch đồ họa...).

Theo nghĩa rộng hơn, đồ họa máy tính là phương pháp và cơng nghệ dùng
trong việc chuyển đổi qua lại giữa dữ liệu và hình ảnh trên màn hình bằng máy
tính. Đồ họa máy tính hay kĩ thuật đồ họa máy tính cịn được hiểu dưới dạng
phương pháp và kĩ thuật tạo hình ảnh từ các mơ hình tốn học mơ tả các đối
tượng hay dữ liệu lấy được từ các đối tượng trong thực tế. Thuật ngữ "đồ họa
máy tính" (computer graphics) được đề xuất bởi một chuyên gia người Mĩ tên
là William Fetter vào năm 1960. Khi đó ơng đang nghiên cứu xây dựng mơ hình
2


buồng lái máy bay cho hãng Boeing. William Fetter đã dựa trên các hình ảnh 3
chiều của mơ hình người phi công trong buồng lái để xây dựng nên mô hình
buồng lái tối ưu cho máy bay Boeing. Đây là phương pháp nghiên cứu rất mới
vào thời kì đó. Phương pháp này cho phép các nhà thiết kế quan sát một cách
trực quan vị trí của người lái trong khoang buồng lái. William Fetter đã đặt tên
cho phương pháp của mình là computer graphics...

3


CHƯƠNG I, MƠ TẢ BAI TOAN
1.

Giới thiệu đề tài



Ý tưởng

Hình 1. Ảnh mơ hình mơt căn phịng ngủ



Thiết kế nội thất phịng ngủ vẫn ln nhận được sự quan tâm
của các gia chủ bởi vì đây chính là khơng gian riêng được u
thích nhất trong mỗi ngơi nhà. Nếu như phịng khách 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 thì phịng ngủ là nơi bạn có thể tự
do thể hiện cá tính của bản thân, dù kích thước lớn hay nhỏ thì
cũng cần mang dấu ấn cá nhân của từng thành viên trong nhà.

Mô tả mô hình
-Tổng quan về căn phịng ngủ bao gồm:


4




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 giường ngủ + 1 tủ đầu giường có ngăn kéo + 1 tủ đứng
1 bàn học + 1 ghế + 1 quạt trần
1 cửa chính ra vào + 1 cửa sổ




Mơ tả chương trình






u cầu của chương trình
-Mơ phỏng hoạt động của các vật thể trong căn phịng ngủ
-Mơ phỏng thể hiện được các yếu tố về ánh sáng và góc nhìn các vật
thể
Mơ tả chức năng của chương trình
-Sử dụng các phím









Sử dụng các phím “a”, “d”, ”w”, ”s” để lần lượt quay trái, quay
phải, quay lên trên, quay xuống dưới cho tồn bộ căn phịng
Sử dụng phím ”z” và ”Z” để phóng to và thu nhỏ căn phịng
Sử dụng phím “m” và “M” để mở/ đóng ngăn kéo
Sử dụng phím số “0” để bật /tắt quạt
Sử dụng phím “k” và “K” để mở/ đóng tủ đứng

Sử dụng phím “B” và “b” để mở/đóng cửa chính
Sử dụng phím “o”,”p”,”r”,”9” để thay đổi view

-Các yếu tố ánh sáng và góc nhìn được tạo ngẫu nhiên
Mơi trường lập trình
-Chương trình được chạy trên Visual Studio và ngôn ngữ C++ sử dụng
OpenGL

5


CHƯƠNG II, MỘT SỐ KỸ THUẬT ĐIỂN HÌNH PHAT
TRIỂN CHƯƠNG TRÌNH
1.

Mơ tả mơ hình và các bước xây dựng

Các bước xây dựng
-Các thành phần của mơ hình được xây dựng từ hình lập phương đơn
vị


Bước 1: Xác định vị trí đặt hệ tọa độ Descartes 3 chiều
Bước 2: Xây dựng hình lập phương đơn vị
Bước 3: Sử dụng các phép biến đổi để xây dựng các vật thể của căn
phòng
Bước 4: Tô màu cho các thành phần
2.

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


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)

6


Phép vẽ cơ bản
Vẽ hình hộp chữ nhật


CHƯƠNG III, KẾT QUẢ CHƯƠNG TRÌNH
1.

Mơ tả code

Mơ hình quạt trần
void ToMau(double x, double y, double z, double t)


{

material_diffuse = vec4(x, y, z, t);
diffuse_product = light_diffuse * material_diffuse;
glUniform4fv(glGetUniformLocation(program,
"DiffuseProduct"), 1, diffuse_product);
}
void moto() {
for (float i = 0; i < 360; i++) {
instance = RotateY(i) * Scale(0.1f, 0.05f, 0.1f);
glUniformMatrix4fv(model_loc, 1, GL_TRUE, model1 *
instance);
glDrawArrays(GL_TRIANGLES, 0, NumPoints);
}
}
void trucQuat() {
for (float i = 0; i < 360; i++) {
7


instance = Translate(0.0, 0.175f, 0.0) * RotateY(i) *
Scale(0.02f, 0.3f, 0.02f);
glUniformMatrix4fv(model_loc, 1, GL_TRUE, model1 *
instance);
glDrawArrays(GL_TRIANGLES, 0, NumPoints);
}
}
float fanTheta = 0;

void canhQuat1() {

instance = Translate(0, 0, 0) * RotateY(fanTheta) * Scale(0.6f,

0.01f, 0.05f);
glUniformMatrix4fv(model_loc, 1, GL_TRUE, model1 *
instance);
glDrawArrays(GL_TRIANGLES, 0, NumPoints);
}
void canhQuat2() {
float bTheta = fanTheta + 60;
instance = Translate(0, 0, 0) * RotateY(bTheta) * Scale(0.6f,
0.01f, 0.05f);
glUniformMatrix4fv(model_loc, 1, GL_TRUE, model1 *
instance);
8


glDrawArrays(GL_TRIANGLES, 0, NumPoints);
}

void canhQuat3()
{
float aTheta = fanTheta + 120;
instance = Translate(0, 0, 0) * RotateY(aTheta) * Scale(0.6f,
0.01f, 0.05f);
glUniformMatrix4fv(model_loc, 1, GL_TRUE, model1 *
instance);
glDrawArrays(GL_TRIANGLES, 0, NumPoints);
}
void BoCanhQuat() {

ToMau(1, 0, 0, 1);
canhQuat1();

canhQuat2();
canhQuat3();
}
void quat()
{
trucQuat();
9


model1 *= RotateY(Theta[1]);
BoCanhQuat();
moto();
}
void quayQuat(void)
{
if (turnOf == 1) {
if (percentTheta < 20) {
percentTheta += 0.25;
}

fanTheta = fanTheta + percentTheta * power;
if (fanTheta >= 360) {
fanTheta = 0;
}
}

glutPostRedisplay();
}

10



Mơ hình giường
void giuong()


{
ToMau(0, 0, 1, 1);
instance2 = Translate(0.45f, -0.50f, 0.00f);
mat(0.9f, 0.6f, 0.05f);
instance2 = Translate(0.45f, -0.47f, 0.00f);
mat(0.85f, 0.55f, 0.03f);

instance2 = Translate(0.45f, -0.57f, 0.3f);
changiuong(0.85f, 0.02f, 0.1f);
instance2 = Translate(0.45f, -0.57f, -0.3f);
changiuong(0.85f, 0.02f, 0.1f);
instance2 = Translate(0.0f, -0.57f, 0.0f);
changiuong(0.02f, 0.55f, 0.1f);
instance2 = Translate(0.9f, -0.4f, 0.0f);
changiuong(0.02f, 0.58f, 0.3f);
11


instance2 = Translate(0.88f, -0.4f, 0.0f);
changiuong(0.02f, 0.58f, 0.2f);
instance2 = Translate(0.9f, -0.35f, 0.3f);
changiuong(0.02f, 0.02f, 0.3f);
instance2 = Translate(0.9f, -0.35f, -0.3f);
changiuong(0.02f, 0.02f, 0.3f);

instance2 = Translate(0.0f, -0.57f, 0.3f);
changiuong(0.02f, 0.02f, 0.12f);
instance2 = Translate(0.0f, -0.57f, -0.3f);
changiuong(0.02f, 0.02f, 0.12f);
}

Mơ hình tủ đứng
void tu()


{
ToMau(1, 1, 0, 1);
instance2 = Translate(-0.85f, -0.05f, 0.50f); // thanh tren cung
createElement(0.2f, 0.02f, 0.50f);

instance2 = Translate(-0.85f, -0.45f, 0.50f);// thanh giua
createElement(0.2f, 0.02f, 0.50f);

12


instance2 = Translate(-0.85f, -0.35f, 0.76f);
createElement(0.2f, 0.6f, 0.032f);
instance2 = Translate(-0.85f, -0.35f, 0.58f);
createElement(0.2f, 0.6f, 0.032f);
instance2 = Translate(-0.85f, -0.35f, 0.25f);
createElement(0.2f, 0.6f, 0.015f);
instance2 = Translate(-0.85f, -0.35f, 0.41f);
createElement(0.2f, 0.6f, 0.015f);
instance2 = Translate(-0.92f, -0.35f, 0.50f);

createElement(0.015f, 0.6f, 0.5f);
}
GLfloat quay = 0; GLfloat mo = 0;
void canh1()
{
instance2 = Translate(-0.75f, -0.35f, 0.67f);
createElement(0.02f, 0.6f, 0.17f);
}
void canh2()
{
instance2 = Translate(-0.75f, -0.35f, 0.5f) * Translate(0, 0, 0.17 /
2) * RotateY(-quay) * Translate(0, 0, -0.17 / 2);
createElement(0.02f, 0.6f, 0.17f);
13


}
void canh3()
{
instance2 = Translate(-0.75f, -0.35f, 0.33f) * Translate(0, 0, -0.17
/ 2) * RotateY(quay) * Translate(0, 0, 0.17 / 2);
createElement(0.02f, 0.6f, 0.17f);
}
Mơ hình bàn
void ban()


{
//matban
ToMau(0, 1, 0.5, 1);

instance2 = Translate(-0.83f, -0.4f, (-1 + 0.47f / 2));
createElement(0.3f, 0.02f, 0.45f);
//cacchanban.
//trai,sau
instance2 = Translate(-0.94f, -0.55f, (-1 + 0.45f));
createElement(0.02f, 0.3f, 0.02f);
//trai,truoc
instance2 = Translate(-(1 - 0.3f), -0.55f, -(1 - 0.45f));
createElement(0.02f, 0.3f, 0.02f);
//phai,sau
14


instance2 = Translate(-0.94f, -0.55f, -0.94f);
createElement(0.02f, 0.3f, 0.02f);
//phai,truoc
instance2 = Translate(-(1 - 0.3f), -0.55f, -0.94f);
createElement(0.02f, 0.3f, 0.02f);

}

Mơ hình ghế
void ghe()


{
ToMau(0, 0.5, 0, 1);
trans = Translate(g, 0, 0) * Translate(-0.7f, 0, (-1 + 0.45f / 2));
//mat ghe
instance2 = Translate(0, -0.55f, 0) * trans;

createElement(0.15f, 0.02f, 0.15f);
//changhe
//trai,sau

instance2 = Translate(-0.15f / 2, -0.55f - 0.15f / 2, 0.15 / 2) *
trans;
createElement(0.01f, 0.15f, 0.01f);
15


instance2 = Translate(0.15f / 2, -0.55f - 0.15f / 2, 0.15 / 2) *
trans;
createElement(0.01f, 0.15f, 0.01f);

instance2 = Translate(-0.15f / 2, -0.55f - 0.15 / 2, -0.15 / 2) *
trans;
createElement(0.01f, 0.15f, 0.01f);
instance2 = Translate(0.15f / 2, -0.55f - 0.15 / 2, -0.15 / 2) *
trans;
createElement(0.01f, 0.15f, 0.01f);
//
}

Mơ hình tủ đầu giường + ngăn kéo
void tu1()


{
ToMau(0.5, 0.5, 0.3, 1);
instance2 = Translate(0.8f, -0.4f, 0.45f);

createElement(0.2f, 0.02f, 0.25f);
instance2 = Translate(0.8f, -0.47f, 0.45f);
createElement(0.2f, 0.02f, 0.25f);
instance2 = Translate(0.8f, -0.6f, 0.45f);
16


createElement(0.2f, 0.02f, 0.25f);
instance2 = Translate(0.8f, -0.51f, 0.57f);
createElement(0.2f, 0.25f, 0.02f);
instance2 = Translate(0.8f, -0.51f, 0.33f);
createElement(0.2f, 0.25f, 0.02f);
instance2 = Translate(0.9f, -0.51f, 0.450f);
createElement(0.015f, 0.2f, 0.25f);
}
GLfloat dm = 0;
void ngankeotu1()
{
instance2 = Translate(0.8f - dm, -0.46f, 0.45f);
createElement(0.19f, 0.02f, 0.24f);
instance2 = Translate(0.8f - dm, -0.45f, 0.35f);
createElement(0.19f, 0.065f, 0.02f);
instance2 = Translate(0.8f - dm, -0.45f, 0.55f);
createElement(0.19f, 0.065f, 0.02f);
instance2 = Translate(0.9f - dm, -0.51f, 0.450f);
createElement(0.015f, 0.06f, 0.24f);
instance2 = Translate(0.7f - dm, -0.45f, 0.450f);
createElement(0.015f, 0.065f, 0.245f);
17



}
void canhtu1()
{
instance2 = Translate(0.7f, -0.55f, 0.450f);
createElement(0.015f, 0.125f, 0.245f);
}

2.

Hình ảnh minh họa chương trình

Hình 2. Bắt đầu chạy chương trình

18


Hình 3. View nhìn theo trục OY

19


Hình 4. View nhìn theo trục OZ

Hình 5. View nhìn theo trục OX

20


Hình 6. Ảnh khi đã ấn tất cả các phím điều khiển


21



×