Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 45

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐÔNG Á


KHOA CÔNG NGHỆ THÔNG TIN

BÀI TẬP LỚN


HỌC PHẦN: KỸ THUẬT ĐỒ HỌA MÁY TÍNH

Đề tài 10: THIẾT KẾ PHÒNG NGỦ

Sinh viên thực hiện Lớp Khóa


Bùi Minh Tùng DCCNTT12.10.9 12
Lê Quang Khánh Nguyên DCCNTT12.10.9 12
Đỗ Trọng Hiếu DCCNTT12.10.9 12
Đỗ Thị Hòa DCCNTT12.10.9 12
Nguyễn Quang Thắng DCCNTT12.10.9 12

Bắc Ninh, năm 2024


BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐÔNG Á
KHOA: CÔNG NGHỆ THÔNG TIN

BÀI TẬP LỚN


HỌC PHẦN: KỸ THUẬT ĐỒ HỌA MÁY TÍNH
NHÓM 6

Đề tài 10: THIẾT KẾ PHÒNG NGỦ

Mã sinh
STT Sinh viên thực hiện Điểm bằng số Điểm bằng chữ
viên
1 Bùi Minh Tùng 20212453
Lê Quang Khánh 20212683
2
Nguyên
3 Đỗ Trọng Hiếu

4 Đỗ Thị Hòa

5 Nguyễn Quang Thắng

CÁN BỘ CHẤM 1 CÁN BỘ CHẤM 2


(Ký và ghi rõ họ tên) (Ký và ghi rõ họ tên)
MỤC LỤC

DANH MỤC BẢNG BIỂU VÀ SƠ ĐỒ........................................................................1

LỜI MỞ ĐẦU................................................................................................................2

Chương 1: Cơ sở lý thuyết về kỹ thuật đồ họa máy tính................................................3

1.1 Các khái niệm cơ bản về đồ họa máy tính............................................................

1.2 Các giải thuật đồ họa cơ bản.................................................................................

1.3 Ứng dụng của đồ họa máy tính.............................................................................

Chương 2: Thiết kế sản phẩm đồ họa 3D với openGL.................................................13

2.1. Xây dựng ý tưởng thiết kế......................................................................................

2.2. Vẽ các đối tượng 3D...............................................................................................

2.3. Thiết lập các nguồn sáng........................................................................................

2.4. Xử lý sự kiện bấm phím.........................................................................................

Chương 3 : Kết luận.....................................................................................................39

3.1 Các nội dung đã đạt được........................................................................................

3.2. Bài học kinh nghiệm:.............................................................................................

TÀI LIỆU THAM KHẢO............................................................................................42


DANH MỤC BẢNG BIỂU VÀ SƠ ĐỒ

Hình 1. 1 Ví dụ thuật toán DDA.....................................................................................6


Hình 1. 2 Ví dụ giải thuật bresenham............................................................................6
Hình 1. 3 Ví dụ thuật toán midpoint...............................................................................8
Hình 1. 4 Ví dụ giải thuật tô màu các đối tượng............................................................9
Hình 1. 5 Ví dụ giải thuật cắt xén vùng..........................................................................9

Hình 2. 1 Sơ đồ bố trí các thành phần đồ họa.............................................................13


Hình 2. 2 Sơ đồ bố trí các thành phần đồ họa từ trên nhìn xuống...............................14
Hình 2. 3 Vách ngăn cửa kính......................................................................................16
Hình 2.4 Ban công........................................................................................................17
Hình 2. 5 Cửa chính.....................................................................................................18
Hình 2. 6 Giường..........................................................................................................21
Hình 2. 7 Tủ cạnh giường............................................................................................24
Hình 2. 8 Đèn ngủ và ấm trà đặt trên tủ......................................................................25
Hình 2. 9 Kệ tivi và đồ trang trí...................................................................................27
Hình 2. 10 Thảm bình hòa và tranh treo tường...........................................................30
Hình 2. 11 Đèn trần......................................................................................................33

1
LỜI MỞ ĐẦU
Như các bạn đã biết, đồ họa máy tính là một lĩnh vực vô cùng quan trọng và phát
triển mạnh mẽ trong thời đại công nghệ số hiện nay. Nó đóng vai trò thiết yếu trong
nhiều lĩnh vực khác nhau như:
Thiết kế: đồ họa máy tính được sử dụng để tạo ra các sản phẩm thiết kế như logo,
banner, website, giao diện người dùng, poster, v.v.
Giải trí: đồ họa máy tính được sử dụng để tạo ra các trò chơi điện tử, phim hoạt
hình, hiệu ứng đặc biệt, v.v.
Khoa học: đồ họa máy tính được sử dụng để visualize dữ liệu khoa học, mô phỏng
các hiện tượng tự nhiên, v.v.
Kỹ thuật: đồ họa máy tính được sử dụng để thiết kế các sản phẩm kỹ thuật, mô
phỏng các hệ thống, v.v.
Giáo dục: đồ họa máy tính được sử dụng để tạo ra các bài giảng trực quan, mô
phỏng các thí nghiệm, v.v.
Môn học “Kỹ thuật đồ họa máy tính” sẽ cung cấp cho các bạn những kiến thức cơ
bản về các nguyên tắc và thuật toán đồ họa máy tính. Các bạn sẽ được học cách sử
dụng các phần mềm đồ họa phổ biến như Photoshop, Illustrator, Maya, v.v. để tạo ra
các sản phẩm đồ họa chất lượng cao.
Mục tiêu của môn học này là giúp các bạn:
 Nắm vững các nguyên tắc và thuật toán cơ bản của đồ họa máy tính.
 Sử dụng thành thạo các phần mềm đồ họa phổ biến.
 Có khả năng sáng tạo và thiết kế các sản phẩm đồ họa đẹp mắt và hiệu quả.
 Áp dụng kiến thức đồ họa máy tính vào các lĩnh vực khác nhau.
Nhóm chúng tôi tin rằng môn học này sẽ mang lại cho các bạn nhiều kiến thức và
kỹ năng bổ ích để các bạn có thể thành công trong sự nghiệp của mình.
Chúc các bạn học tập tốt!
Ngoài ra, chúng tôi cũng muốn lưu ý một số điểm sau:
 Môn học này đòi hỏi các bạn phải có kiến thức cơ bản về toán học, đặc biệt là
hình học và đại số tuyến tính.
 Các bạn cần phải thường xuyên thực hành để rèn luyện kỹ năng sử dụng phần
mềm đồ họa.
 Các bạn nên tham gia các hoạt động ngoại khóa liên quan đến đồ họa máy tính
để học hỏi thêm kinh nghiệm và giao lưu với các bạn học khác.
Với sự phát triển của công nghệ đồ họa máy tính, thiết kế “Phòng ngủ” là đề tài
mà nhóm chúng tôi đã chọn để củng cố rõ hơn về đồ họa máy tính trở nên dễ dàng và
hiệu quả hơn bao giờ hết. Các phần mềm đồ họa máy tính mà chúng tôi lựa cho cho đề
tài có thể mô phỏng không gian phòng ngủ một cách chân thực, sống động, từ đó dễ
dàng lựa chọn các vật dụng nội thất, màu sắc và bố cục phù hợp nhất.

2
Chương 1: Cơ sở lý thuyết về kỹ thuật đồ họa máy tính
1.1 Các khái niệm cơ bản về đồ họa máy tính
a, Khái niệm đồ họa máy tính
Đồ họa máy tính là một lĩnh vực của công nghệ thông tin, liên quan đến việc
nghiên cứu, xây dựng và tập hợp các công cụ ( mô hình lý thuyết và phần mềm)
khác nhau để kiến tạo, xây dựng lưu trữ và xử lý các mô hình và hình ảnh của đối
tượng, sự vật hiện tượng khác nhau trong đời sống, sản xuất và nghiên cứu. Các
mô hình và hình ảnh này có thể là các kết quả thu được từ những lĩnh vực khác
nhau của rất nhiều ngành khoa học ( vật lý,toán học, ..)
Đồ họa máy tính cũng là lĩnh vực liên quan đến việc thiết kế chế tạo phần cứng
như: các thiết bị hiển thị, các thiết bị đầu vào như bàn phím, chuột, bút quang các
thuật toán cần thiết để phát sinh hình ảnh trên các thiết bị này, các phần mềm
được sử dụng cho cả người lập trình hệ thống và người lập trình ứng dụng đồ họa.
Đồ họa máy tính không bị giới hạn trong các ảnh tĩnh mà hướng tới các ảnh
động
• Sự đổi hướng của cánh máy bay siêu âm
• Sự phát triển của khuôn mặt người từ lúc trẻ thơ tới lúc già
• Trừu tượng như là xu hướng phát triển của việc sử dụng năng lượng, gia
tăng dân số, …
b, Các kỹ thuật đồ họa máy tính
Có rất nhiều kỹ thuật hiển thị hình ảnh được áp dụng trong ngành đồ họa máy
tính, mỗi kỹ thuật lại có tuổi đời và những ưu, nhược điểm khác nhau. Dưới đây là 3
kỹ thuật hiển thị hình ảnh của đồ họa máy tính phổ biến nhất:
 Đồ họa raster
Khái niệm thiết kế đồ họa raster (đồ họa hoặc hình ảnh Bitmap) là một trong những kỹ
thuật hiển thị hình ảnh lâu đời và phố biến nhất với nền tảng kỹ thuật lấy từ công nghệ
màn hình tivi đã tồn tại rất lâu trước khi máy tính điện tử ra đời. Với kỹ thuật này, tất
cả các hình ảnh đều được làm nên từ các ô vuông có màu nhỏ li ti được gọi là pixel
(phần tử ảnh).
Tùy thuộc vào độ phân giải, một hình ảnh có thể chứa hàng nghìn đến hàng triệu
pixel, giống như một bức tường được xây lên từ nhiều viên gạch vậy. Ưu điểm lớn
nhất của kỹ thuật raster là các hình ảnh raster có thể hiển thị các chi tiết rõ ràng, đẹp
với màu sắc đa dạng, hài hòa. Tuy nhiên, hình ảnh raster có thể sẽ bị “vỡ” hoặc mờ
nếu phóng to hoặc bị nén quá nhiều. Dung lượng các file ảnh raster cũng khá lớn nếu
có độ phân giải cao.
 Đồ họa vector
Đồ họa vector là kỹ thuật tạo dựng hình ảnh bằng các đường kẻ quy định bởi các
công thức toán học lần đầu tiên được sử dụng cho màn hình máy tính trong những
năm 60 và 70 của thế kỉ 20. Tuy không phổ biến bằng kỹ thuật đồ họa raster và đã

3
từng có một thời gian gần như bị “xóa sổ” bởi raster, đồ họa vector đang được ưa
chuộng trở lại.
Nhờ vào những ưu điểm như các hình ảnh vector đơn giản, dễ dàng phóng to mà
không bị giảm chất lượng, có dung lượng nhỏ hơn so với raster, dễ chỉnh sửa, rất thích
hợp với việc thiết kế các loại đồ họa ít màu sắc, đơn giản như logo, icon hay biểu
tượng.
 Đồ họa 3D
Đồ họa 3D là kỹ thuật đồ họa đang được tập trung phát triển nhất trong thời điểm hiện
tại, với sự quan tâm và tiềm năng của các ứng dụng như không gian ảo hay hình chiếu
ba chiều. Nhà thiết kế đồ họa phải thực hiện rất nhiều bước khác nhau và áp dụng
nhiều kỹ thuật tạo dựng hình ảnh phức tạp để có được một đôí tượng hình ảnh 3D
đúng nghĩa.
Trước hết, khung cơ bản (wire-frame) của vật thể phải được dựng trong một
phần mềm đồ họa máy tính, sau đó các phần của vật thể sẽ được thêm vào và nối với
nhau (rigged) để tạo sự liên kết chân thực, đặc biệt là với các vật thể có khả năng
chuyển động. Sau đó vật thể phải được render.
Đây là bước mất thời gian và phức tạp nhất vì một vật thể 3D có nhiều bề mặt
khác nhau với các chất liệu khác nhau, độ trong suốt hay mờ đục, màu sắc, mức độ bắt
sáng hay phản sáng khác nhau. Để tạo được một vật thể 3D thật nhất có thể, nhiều kỹ
thuật toán học được áp dụng để tính toán và mô phỏng cách ánh sáng chiếu và phản
chiếu vào các loại mặt phẳng khác nhau như ray tracing hay radiosity,…
c, Các lĩnh vực đồ họa máy tính
Có 2 lĩnh vực chính áp dụng đồ họa máy tính Giáo dục và đào tạo, lĩnh vực giải
trí và nghệ thuật .
Trong giáo dục và đào tạo, đồ họa máy tính đem đến một phương tiện học tập
thú vị và hấp dẫn cho các bạn học sinh, sinh viên. Chúng tạo ra các hình ảnh, video
mô phỏng trực quan cấu trúc vật thể,… khiến các bài học không còn nhàm chán. Các
lý thuyết, công thức khó hiểu được trình bày khoa học và rõ ràng hơn thông qua hình
ảnh và biểu đồ. Ngoài ra, trong lĩnh vực đào tạo, đồ họa máy tính còn được ứng dụng
trong việc kiểm tra trình độ người lái. Nhất là trong các buổi huấn luyện điều khiển
các phương tiện giao thông. Người học có thể tiếp cận các tình huống thực tế có thể
xảy ra mà không gặp phải rủi ro nhờ đồ họa vi tính. Đồng thời, các giảng viên có thể
đánh giá và đưa ra phương thức giảng dạy phù hợp.
Ví dụ: Thiết kế không gian:
 Bảng chỉ dẫn
 Tranh treo tường
 Triển lãm, bảo tàng
 Xây dựng thương hiệu văn phòng
4
 Điều hướng giao thông công cộng
 Nội thất cửa hàng
 Không gian tổ chức sự kiện và hội nghị
Đồ họa máy tính được ứng dụng rất phổ biến trong lĩnh vực giải trí và nghệ
thuật. Nhất là trong lĩnh vực giải trí với trò chơi điện tử. Đồ họa máy tính góp phần
tạo nên các hiệu ứng đồ họa sống động khiến trò chơi trở nên thu hút hơn. Bên cạnh
đó, công nghệ này cũng được ứng dụng trong ngành sản xuất phim hoạt hình, video đồ
họa quảng cáo,…Thông qua việc sử dụng các phần mềm máy tính như: photoshop,
illustrator, premiere,…
Ví dụ: về nghệ thuật và giải trí
 Thiết kế áo….
 Minh họa tiểu thuyết
 Trò chơi điện tử
 Trang web
 Truyện tranh
 Album Nghệ thuật
 Bìa sách
 Sách tranh ảnh
1.2 Các giải thuật đồ họa cơ bản
Trong đồ họa máy tính, các giải thuật đóng vai trò quan trọng trong việc tạo ra các
hình ảnh, hình ảnh động và các hiệu ứng trực quan khác nhau. Dưới đây là một số giải
thuật đồ họa cơ bản thường được sử dụng:
Vẽ đường thẳng:
 Thuật toán DDA (Digital Differential Analysis): Đây là một thuật toán đơn
giản và hiệu quả để vẽ đường thẳng, hoạt động bằng cách tính toán từng điểm
pixel trên đường thẳng dựa trên độ dốc của đường thẳng.
+ Ý tưởng :
Cho PT đoạn thẳng đi qua 2 điểm (x1,y1), (x2,y2) như sau: y=kx+m
Trong đó: 𝑘=(𝑦2−𝑦1)/(𝑥2−𝑥1) ; 𝑚=𝑦1−𝑘𝑥1

5
Hình 1. 1 Ví dụ thuật toán DDA

 Thuật toán đường thẳng của Bresenham: Giống như DDA, thuật toán này cũng
vẽ đường thẳng pixel theo pixel, nhưng nó có hiệu suất tốt hơn DDA, đặc biệt
cho các đường thẳng có độ dốc.
+ Ý tưởng:
Tăng x1, xác định điểm ảnh tiếp theo bằng cách so sánh d1 và d2
Nếu d1<d2 thì điểm tiếp theo là S
Nếu d1>d2 thì điểm tiếp theo là P

Hình 1. 2 Ví dụ giải thuật bresenham

Vẽ đường cong:
 Đường cong Bézier: Đây là một trong những đường cong được sử dụng để vẽ
đường cong nhẹ và nhẹ nhàng. Các đường cong được xác định rõ ràng hơn bởi

6
một Control Controls tập tin và dạng đường cong phụ thuộc của Control
Controls này.

 Thuật toán Midpoint


Do tính chất đối xứng của đường tròn nên ta chỉ cần vẽ cung bằng 1/8 đường tròn, sau
đó lấy đối xứng ta sẽ được một đường tròn.
Cung 1/8 được mô tả như sau:
{(0≤x≤R √2/2
R √2/2≤y≤R
Nếu có (x, y) ∈ (C1/8) thì các điểm: (y, x), (y, x), (x,-y), (-x,-y), (-y,-x), (-y,x), (-x,y) sẽ
thuộc (C).

+ Ý tưởng
Phương trình đường tròn
F(x,y)=x2 + y2 – R
Cơ sở toán học
F(x,y): <0 nếu (x,y) nằm trong đường tròn
=0 nếu (x,y) thuộc đường tròn
>0 nếu (x,y)nằm ngoài đường tròn)
Đặt Pold=F(M)

7
Pold=(xp+1)2 + (yp-1/2)2 – R2
Nếu chọn E, MnewE(xp+2,yp-1/2)
PnewE=(xp+2)2 + (yp-1/2)2 – R2
PnewE= Pold + 2xp + 3
Nếu chọn SE, MnewSE(xp+2,yp-3/2)
PnewE=(xp+2)2 + (yp-3/2)2 – R2
PnewE= Pold + 2(xp - yp) + 5

Hình 1. 3 Ví dụ thuật toán midpoint

Tô màu cho các đối tượng:

8
 Đường quét thuật toán: Thuật toán này được sử dụng để tô màu bên trong các
giác giác bằng cách xác định các pixel nằm trong đa giác. Thuật toán hoạt động bằng
cách quét các hàng pixel trên màn hình và xác định các pixel thuộc về đa giác.

Hình 1. 4 Ví dụ giải thuật tô màu các đối tượng

Giải thuật cắt xén vùng


Duyệt lần lượt (theo chiều kim đồng hồ) các cạnh đa giác
Nếu đỉnh duyệt xuất phát từ trong cửa sổ theo cạnh đa giác đi ra ngoài cửa sổ:
lưu trữ giao của cạnh đa giác với biên cửa sổ
Nếu đường đi từ ngoài vào trong cửa sổ: lưu trữ đỉnh đa giác và giao điểm
Thí dụ xét hai đỉnh đa giác S và P:

Hình 1. 5 Ví dụ giải thuật cắt xén vùng

1.3 Ứng dụng của đồ họa máy tính


 Đồ họa 2D
Công nghệ:
Đồ họa raster: Sử dụng mạng lưới các điểm ảnh (pixel) để tạo hình ảnh. Ưu
điểm: dễ chỉnh sửa, phù hợp cho ảnh chụp và ảnh vẽ. Nhược điểm: hình ảnh bị vỡ khi
phóng to.

9
Đồ họa vector: Sử dụng các đường thẳng, đường cong và hình dạng toán học để
tạo hình ảnh. Ưu điểm: có thể phóng to thu nhỏ mà không bị vỡ ảnh, tệp tin nhỏ gọn.
Nhược điểm: phức tạp hơn trong việc chỉnh sửa so với đồ họa raster.
Công cụ:
Adobe Photoshop: Chỉnh sửa ảnh raster phổ biến, cung cấp nhiều công cụ để
chỉnh sửa, tô vẽ, và tạo hiệu ứng

Adobe Illustrator: Chỉnh sửa ảnh vector mạnh mẽ, cho phép tạo logo, biểu
tượng, minh họa và đồ họa thông.

GIMP: Phần mềm chỉnh sửa ảnh miễn phí và mã nguồn mở, có chức năng tương
tự như Photoshop.

Inkscape: Phần mềm chỉnh sửa ảnh vector miễn phí và mã nguồn mở, có chức
năng tương tự như Illustrator.

10
Ứng dụng:
1. Thiết kế đồ họa: logo, banner, poster, infographic, v.v.
2. Chỉnh sửa ảnh: chỉnh sửa ảnh chụp, ghép ảnh, xóa phông nền, v.v.
3. Vẽ tranh kỹ thuật số: sáng tạo tranh vẽ, minh họa, truyện tranh, v.v.
4. Thiết kế giao diện người dùng: giao diện web, ứng dụng di động, phần mềm,
v.v.
 Đồ họa 3D:
Công nghệ:
Mô hình 3D: Biểu diễn các đối tượng 3D bằng các điểm, đường thẳng, mặt và
kết cấu.
Phân cảnh 3D: Sắp xếp các đối tượng 3D trong không gian ảo, bao gồm ánh
sáng, camera và hiệu ứng.
Kết xuất 3D: Chuyển đổi mô hình 3D và phân cảnh 3D thành hình ảnh hoặc
video 2D.
Công cụ:
Autodesk Maya: Phần mềm mô hình, hoạt hình và render 3D chuyên nghiệp,
được sử dụng trong phim ảnh, trò chơi điện tử và hiệu ứng hình ảnh.

Blender: Phần mềm mô hình, hoạt hình và render 3D miễn phí và mã nguồn mở,
có chức năng tương tự như Maya.
Cinema 4D: Phần mềm mô hình, hoạt hình và render 3D dễ sử dụng, phù hợp
cho người mới bắt đầu.

11
Unreal Engine: Công cụ phát triển trò chơi 3D mạnh mẽ, cung cấp môi trường
hoàn chỉnh để tạo ra các trò chơi, trải nghiệm thực tế ảo và ứng dụng tương tác.

Ứng dụng:
 Phim ảnh: Tạo hiệu ứng hình ảnh, mô phỏng môi trường, nhân vật 3D cho
phim ảnh.
 Trò chơi điện tử: Thiết kế thế giới trò chơi, nhân vật, vật phẩm và hiệu ứng.
 Kiến trúc: Thiết kế mô hình 3D cho tòa nhà, nội thất và cảnh quan.
 Kỹ thuật: Mô phỏng sản phẩm, quy trình sản xuất và đào tạo kỹ thuật.
 Y tế: Hình ảnh y tế 3D, mô phỏng phẫu thuật và lập kế hoạch điều trị.
 Các ứng dụng khác:
Ngoài đồ họa 2D và 3D, công nghệ đồ họa máy tính còn được ứng dụng trong
nhiều lĩnh vực khác như:
 Thực tế ảo (VR): Tạo ra môi trường 3D mô phỏng thực tế, cho phép người
dùng tương tác và trải nghiệm như thật.
 Thực tế tăng cường (AR): Kết hợp thông tin kỹ thuật số với thế giới thực, tạo
ra trải nghiệm tương tác mới mẻ.
 Thiết kế sản phẩm: Mô phỏng và thử nghiệm sản phẩm 3D trước khi sản xuất.
 Giáo dục: Tạo ra các bài giảng và tài liệu học tập tương tác, hấp dẫn.
 Khoa học: Phân tích dữ liệu khoa học………….

12
Chương 2: Thiết kế sản phẩm đồ họa 3D với openGL
2.1. Xây dựng ý tưởng thiết kế
Trong thế giới ngày nay, phòng ngủ không chỉ là nơi để nghỉ ngơi mà còn là
nơi thể hiện phong cách và cá nhân hóa không gian riêng của mỗi người. Với sự
phát triển của công nghệ và sự sáng tạo trong thiết kế, chúng ta có cơ hội biến
những ý tưởng tưởng chừng không thể thành hiện thực. Nhóm chọn đề tài thiết kế
phòng ngủ với mục tiêu tạo ra một không gian nghỉ ngơi lý tưởng, phản ánh cá
nhân và thúc đẩy sự thoải mái và hạnh phúc của người sử dụng.

Hình 2. 1 Sơ đồ bố trí các thành phần đồ họa

Trong đề tài này bao gồm:


 Giường
 Tủ
 Ấm trà
 Đèn ngủ
 Gối
 Chăn
 Đệm

13
 Thảm trài sàn
 Tivi
 Kệ tivi
 Bồn hoa
 Cửa kính
 Đồ trang trí
 Rèm cửa
 Chậu hoa
 Đèn trần
 Tranh treo tường
Nhìn từ trên xuống để thấy vị trí các vật trong phòng:

Hình 2. 2 Sơ đồ bố trí các thành phần đồ họa từ trên nhìn xuống

 Trong thiết kế này sừ dụng 4 nguồn sáng bao gồm:


 nguồn sáng của đèn trần (16.5, 18.85, 14.0f) sử dụng để chiếu sáng từ trên
xuống cho toàn bộ ngôi nhà.
 Nguồn sáng của đèn ngủ(2.0, 9.5, 27.0) sử dụng ánh sáng vô hướng để truyền
ánh sáng của 2 đèn ngủ
14
 Nguồn sáng của tivi(28.9f, 10.0f, 16.0f) sử dụng làm ánh sáng của tivi
 Nguồn sáng chính(0.0f, 0.0f, 1.0f) sử dụng làm nguồn sáng tổng quát dể di
chuyển ánh sáng dựa trên góc nhìn của người xem.
2.2. Vẽ các đối tượng 3D
 Diện tích phòng ngủ
Đối với đề tài thiết kế phòng ngủ, diện tích phòng là một điều quan trọng quyết
định không gian của phòng ngủ sẽ như thế nào. Nhóm chọn diện tích phòng với kích
thước 30x35x30 để tạo không gian rộng rãi thoáng mát.
Phòng gồm 6 mặt và có kich thước được thiết lập như sau:
// Vẽ tường mặt phẳng y0z mặt trái
glColor3f(1.0f, 1.0f, .8f);
glBegin(GL_QUADS);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, 20.0, 0.0);
glVertex3f(0.0, 20.0, 30.0);
glVertex3f(0.0, 0.0, 30.0);
glEnd();

// Vẽ tường mặt phẳng y0z mặt phải


glColor3f(1.0f, 1.0f, .8f);
glBegin(GL_QUADS);
glVertex3f(35.0, 0.0, 0.0);
glVertex3f(35.0, 20.0, 0.0);
glVertex3f(35.0, 20.0, 30.0);
glVertex3f(35.0, 0.0, 30.0);
glEnd();

// Vẽ tường mặt phẳng y0x mặt trước


glColor3f(.539f, 0.98f, .9653f);
glBegin(GL_QUADS);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, 20.0, 0);
glVertex3f(35.0, 20.0, 0);
glVertex3f(35.0, 0.0, 0.0);
glEnd();

// Vẽ tường mặt phẳng y0x mặt sau


glColor3f(0.96, 0.96, 0.5568);
glBegin(GL_QUADS);
glVertex3f(0.0, 0.0, 30.0);
glVertex3f(0.0, 20.0, 30);
glVertex3f(35.0, 20.0, 30);
glVertex3f(35.0, 0.0, 30.0);
glEnd();

// Vẽ tường mặt phẳng z0x mặt dưới


glColor3f(1, 0.8328, 0.41);
glBegin(GL_QUADS);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(35.0, 0.0, 0);
glVertex3f(35.0, 0.0, 30.0);
glVertex3f(0.0, 0.0, 30.0);
glEnd();

15
// Vẽ tường mặt phẳng z0x mặt trên
glColor3f(0.96, 0.9059, 0.8352);
glBegin(GL_QUADS);
glVertex3f(0.0, 20.0, 0.0);
glVertex3f(35.0, 20.0, 0);
glVertex3f(35.0, 20.0, 30.0);
glVertex3f(0.0, 20.0, 30.0);
glEnd();
Sau khi thiết lập xong sẽ được một hình hộp chữ nhật tượng trưng cho căn phòng.
- Vách ngăn cửa kính
Vách ngăn được chia làm 4 phần với 2 phần cố định và 2 phần có thể di chuyển để
làm cửa đóng lại mỗi khi cần thiết.

Hình 2. 3 Vách ngăn cửa kính

+ Vị trí đặt đối tượng: : (0;0;5) tạo 1 khoảng để thiết kế ban công ở phía sau.
+ Màu sắc :
 Với phần tượng trưng cho cửa kính thì để màu (.96,.9574, .9504) - xám nhẹ
đối
 Với khung cửa thì để (.8, .5931, .024) - màu nâu đậm
+ Kích thước:
 Kính : (8.0f, 20.0, 0.3f)
 Khung ngang: (8.0f, .7, 0.4f)
 Khung dọc: (.7f, 20.0, 0.4f)
+ Code sinh đối tượng:
// Vẽ khối hộp đại diện cho vách ngăn

16
glPushMatrix();
glColor3f(.96,.9574, .9504);
glTranslatef(4.0f, 10.0f, 0.0f);
glScalef(8.0f, 20.0, 0.3f); // Kích thước vách ngăn
glutSolidCube(1.0f);
glPopMatrix();

glPushMatrix();
glColor3f(.8, .5931, .024);
glTranslatef(4.0f, 16.0f, 0.0f);
glScalef(8.0f, .7, 0.4f); // Kích thước vách ngăn
glutSolidCube(1.0f);
glPopMatrix();

glPushMatrix();
glColor3f(.8, .5931, .024);
glTranslatef(7.65f, 10.0f, 0.0f);
glScalef(.7f, 20.0, 0.4f); // Kích thước vách ngăn
glutSolidCube(1.0f);
glPopMatrix();

glPushMatrix();
glColor3f(.8, .5931, .024);
glTranslatef(.35f, 10.0f, 0.0f);
glScalef(.7f, 20.0, 0.4f); // Kích thước vách ngăn
glutSolidCube(1.0f);
glPopMatrix();

- Ban công:
Bao gồm 1 bồn trồng hoa và thiết kế thoáng để ánh sáng chiếu vào phòng:

Hình 2.4 Ban công

+ Vị trí đặt đối tượng: (17.5f, 1.5f, 1.0f)


+ Màu sắc :
 Với chậu hoa: (0.7, 0.6391, 0.294)

17
+ Kích thước: (15.0f, 3.0, 2.0f)
+ Code sinh đối tượng:
void DrawBanCong() {
//Thiet lap mau moi trường
GLfloat ambient[] = { 0.98, 0.7513, 0, 0.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient);
//Thiet lap màu khuech tan
GLfloat diff_use[] = { 0.8846, 0.98, 0.2646, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diff_use);
//thiet lap màu phản xạ
GLfloat specular[] = { 0.97, 0.9512, 0.4074, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular);

glDisable(GL_LIGHTING);
glColor3f(1.0f, 1.0f, .9f);
glBegin(GL_QUADS);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, 8.0, 0);
glVertex3f(35.0, 8.0, 0);
glVertex3f(35.0, 0.0, 0.0);
glEnd();

glColor3f(0.97, 0.858, 0.2231);


glBegin(GL_QUADS);
glVertex3f(0.0, 0.1, 0.0);
glVertex3f(35.0, 0.1, 0);
glVertex3f(35.0, 0.1, 5.0);
glVertex3f(0.0, 0.1, 5.0);
glEnd();

glEnable(GL_LIGHTING);

glPushMatrix();
glColor3f(0.7, 0.6391, 0.294);
glTranslatef(17.5f, 1.5f, 1.0f);
glScalef(15.0f, 3.0, 2.0f);
glutSolidCube(1.0f);
glPopMatrix();

- Cửa:

18
Hình 2. 5 Cửa chính

+ Vị trí đặt đối tượng: (30.0f, 7.5f, 30.0f)


+ Màu sắc :
 Với màu cửa: (.96, .9574, .9504)
 Khung cửa: (.8, .5931, .024)
 Tay nắm cửa: (0.88, 0.7955, 0.0352)
+ Kích thước:
 Cửa: (8.0f, 15.0, 0.3f)
 Khung cửa dọc: (.7f, 15.0, 0.4f)
 Khung cửa ngang: (8.0f, .5, 0.4f)
 Tay nắm: gluCylinder(quadric1, .2, .2, 1, 20, 1);
+ Code sinh đối tượng:
void DrawCua() {
glDisable(GL_LIGHTING);
glColor3f(0.96, 0.96, 0.5568);
glBegin(GL_QUADS);
glVertex3f(0.0, 0.0, 30.0);
glVertex3f(0.0, 20.0, 30);
glVertex3f(35.0, 20.0, 30);
glVertex3f(35.0, 0.0, 30.0);
glEnd();

// Vẽ cửa
glPushMatrix();
glColor3f(.96, .9574, .9504);
glTranslatef(30.0f, 7.5f, 30.0f);
glScalef(8.0f, 15.0, 0.3f);
glutSolidCube(1.0f);
glPopMatrix();

19
glEnable(GL_LIGHTING);
//Thiet lap mau moi truong vat lieu
GLfloat ambient[] = { .8, .5931, .024, 0.0 };
glMaterialfv(GL_FRONT, GL_AMBIENT, ambient);
//Thiet lap do khuech tan mau
GLfloat diff_use[] = { 0.96, 0.7686, 0.4608, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diff_use);
//thiet lap do phan chieu
GLfloat specular[] = { 0.72, 0.4854, 0.108, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular);
//Thiet lap do lon cho do phan chieu
GLfloat shininess = 10.0f;
glMateriali(GL_FRONT, GL_SHININESS, shininess);

glPushMatrix();
glColor3f(.8, .5931, .024);
glTranslatef(30.0f, 14.65f, 30.0f);
glScalef(8.0f, .7, 0.4f);
glutSolidCube(1.0f);
glPopMatrix();

glPushMatrix();
glColor3f(.8, .5931, .024);
glTranslatef(30.0f, 0.35, 30.0f);
glScalef(8.0f, .7, 0.4f);
glutSolidCube(1.0f);
glPopMatrix();

glPushMatrix();
glColor3f(.8, .5931, .024);
glTranslatef(30.0f, 7.25, 30.0f);
glScalef(8.0f, .5, 0.4f);
glutSolidCube(1.0f);
glPopMatrix();

glPushMatrix();
glColor3f(.8, .5931, .024);
glTranslatef(26.0f, 7.5f, 30.0f);
glScalef(.7f, 15.0, 0.4f);
glPopMatrix();

glPushMatrix();
glColor3f(.8, .5931, .024);
glTranslatef(34.0f, 7.5f, 30.0f);
glScalef(.7f, 15.0, 0.4f);
glutSolidCube(1.0f);
glPopMatrix();

glPushMatrix();
glColor3f(.8, .5931, .024);
glTranslatef(30.0f, 7.5f, 30.0f);
glScalef(.5f, 15.0, 0.4f);
glutSolidCube(1.0f);
glPopMatrix();

//tay cầm
// Vẽ phần thân của khối trụ
glPushMatrix();
glColor3f(0.88, 0.7955, 0.0352);
glTranslatef(33.0f, 7.25f, 29.5f);
GLUquadricObj* quadric1 = gluNewQuadric();
gluQuadricNormals(quadric1, GLU_SMOOTH);
gluQuadricTexture(quadric1, GL_FALSE);

20
gluCylinder(quadric1, .2, .2, 1, 20, 1);
glPopMatrix();

glPushMatrix();
//2 hình cầu 2 bên khối khụ
glColor3f(0.88, 0.7955, 0.0352);
glTranslatef(33.0f, 7.25f, 29.7f);
glutSolidSphere(.3, 20, 20);
glPopMatrix();

glPushMatrix();
//2 hình cầu 2 bên khối khụ
glColor3f(0.88, 0.7955, 0.0352);
glTranslatef(33.0f, 7.25f, 30.3f);
glutSolidSphere(.3, 20, 20);
glPopMatrix();
}

- Giường:

Hình 2. 6 Giường

+ Vị trí đặt đối tượng: (10.0, 3.0, 17.0)


+ Màu sắc :
 Giường(0.6f, 0.4f, 0.0f)
 Đệm: glColor3f(1, 1, .8);

21
 Gối: (0.8f, 0.8f, 0.8f)
 Chăn: (1, 0.4667, 0.36)
+ Kích thước:
 Giường: (20.0, 2, 13.0)
 Đệm: (19.5, 1, 13.0);
 Gối: (2.5, 1, 5.0)
 Chăn: (10.0, 0.1, 13.0)
+ Code sinh đối tượng:
void DrawGiuong() {
//Thiết lập màu môi trường của vật liệu
GLfloat ambient[] = { 0.73, 0.4898, 0.0438, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient);
//Thiết lập độ khuyếch tán màu
GLfloat diff_use[] = { 0.79, 0.6843,0.2133, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diff_use);
//Thiết lập độ phản chiếu
GLfloat specular[] = { 0.65,0.5973,0.1235, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular);
//Thiết lập độ lớn cho specular
GLfloat shininess = 20.0f;
glMateriali(GL_FRONT, GL_SHININESS, shininess);
//Mặt giường
glPushMatrix();
glColor3f(0.6f, 0.4f, 0.0f);
glTranslatef(0,-.5,0);
glScalef(20.0, 2, 13.0);
glutSolidCube(1.0);
glPopMatrix();

//Đầu giường
glPushMatrix();
glColor3f(0.6f, 0.4f, 0.0f);
glTranslatef(-9.8, 2., 0);
glScalef(.6, 3.0, 13.0);
glutSolidCube(1.0);
glPopMatrix();

// Chân bàn ở góc trên bên phai


glPushMatrix();
glColor3f(0.6f, 0.4f, 0.0f);
glTranslatef(9, -2.25, -6);
glScalef(2.0, 1.5, 1);
glutSolidCube(1.0);
glPopMatrix();

// Chân bàn ở góc trên bên trai


glPushMatrix();
glColor3f(0.6f, 0.4f, 0.0f);
glTranslatef(-8, -2.25, -6); // Vị trí chân bàn
glScalef(2.0, 1.5, 1); // Kích thước chân bàn
glutSolidCube(1.0);
glPopMatrix();

// Chân bàn ở góc duoi bên trai


glPushMatrix();

22
glColor3f(0.6f, 0.4f, 0.0f);
glTranslatef(-9, -2.25, 6); // Vị trí chân bàn
glScalef(2.0, 1.5, 1); // Kích thước chân bàn
glutSolidCube(1.0);
glPopMatrix();

// Chân bàn ở góc duoi bên phai


glPushMatrix();
glColor3f(0.6f, 0.4f, 0.0f);
glTranslatef(9, -2.25, 6); // Vị trí chân bàn
glScalef(2.0, 1.5, 1); // Kích thước chân bàn
glutSolidCube(1.0);
glPopMatrix();
}
void DrawDem() {
//Thiết lập màu môi trường của vật liệu
GLfloat ambient[] = { 0.98, 0.9477, 0.0098, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient);
//Thiết lập độ khuyếch tán màu
GLfloat diff_use[] = { 1, 0.9797,0.2133, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diff_use);
//Thiết lập độ phản chiếu
GLfloat specular[] = { 0.95, 0.7252, 0.2755, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular);
//Thiết lập độ lớn cho specular
GLfloat shininess = 20.0f;
glMateriali(GL_FRONT, GL_SHININESS, shininess);
//Đệm
glPushMatrix();
glColor3f(1, 1, .8);
glTranslatef(0, .5, 0);
glScalef(19.5, 1, 13.0);
glutSolidCube(1.0);
glPopMatrix();
glEnable(GL_LIGHTING);
}

void DrawChanGoi() {
GLfloat light_pos[] = { 8.0, 3.0, 17.0, 0.0 };
glLightfv(GL_LIGHT2, GL_POSITION, light_pos);

//Thiết lập màu môi trường của vật liệu


GLfloat ambient[] = { 1.0, 0.0,0.0, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient);
//Thiết lập độ khuyếch tán màu
GLfloat diff_use[] = { 0.8, 0.3, 0.2, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diff_use);
//Thiết lập độ phản chiếu
GLfloat specular[] = { 0.95, 0.7252, 0.2755, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular);
//Thiết lập độ lớn cho specular
GLfloat shininess = 50.0f;
glMateriali(GL_FRONT, GL_SHININESS, shininess);
// Vẽ chăn
glPushMatrix();
glColor3f(1, 0.4667, 0.36); // Màu xasm
glTranslatef(3.5, 1., 0.0); // Vị trí của chăn
glScalef(10.0, 0.1, 13.0); // Kích thước của chăn
glutSolidCube(1.0);
glPopMatrix();

// Vẽ gối
glPushMatrix();

23
glColor3f(0.8f, 0.8f, 0.8f); // Màu trắng
glTranslatef(-6.5, 1.5, 3.0); // Vị trí của gối
glScalef(2.5, 1, 5.0); // Kích thước của gối
glutSolidCube(1.0);
glPopMatrix();

// Vẽ gối
glPushMatrix();
glColor3f(0.8f, 0.8f, 0.8f); // Màu trắng
glTranslatef(-6.5, 1.5, -3.0); // Vị trí của gối
glScalef(2.5, 1., 5.0); // Kích thước của gối
glutSolidCube(1.0);
glPopMatrix();

- Tủ:

Hình 2. 7 Tủ cạnh giường

+ Vị trí đặt đối tượng:


 Tủ 1: (2.0, 1.5, 27.0)
 Tủ 2: (2.0, 1.5, 8.0)
+ Màu sắc : (0.73, 0.4898, 0.0438)
+ Kích thước: (4.0f, 3.0, 4.0f)
+ Code sinh đối tượng:
void DrawTu() {
//Thiet lap mau moi trường

24
GLfloat ambient[] = { 0.71, 0.4828, 0.0284, 0.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient);
//Thiet lap màu khuech tan
GLfloat diff_use[] = { 1, 0.8613, 0.36, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diff_use);
//thiet lap màu phản xạ
GLfloat specular[] = { 0.95, 0.7252, 0.2755, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular);
glPushMatrix();
glColor3f(0.73, 0.4898, 0.0438);
glTranslatef(0, 0, 0);
glScalef(4.0f, 3.0, 4.0f); // Kích thước vách ngăn
glutSolidCube(1.0f);
glPopMatrix();

// Vẽ núm tay cầm mở tủ


glColor3f(0.73, 0.6304, 0.2701); // Màu xám
glTranslatef(1.57f, .0f, -1.0f); // Di chuyển đến vị trí phù hợp
glutSolidSphere(0.5f, 20, 20); // Vẽ một hình cầu làm núm tay cầm
glPopMatrix();
}

- Đèn ngủ + ấm trà:

Hình 2. 8 Đèn ngủ và ấm trà đặt trên tủ

+ Vị trí đặt đối tượng:


 Đèn 1: (2.0, 4.5, 27.0)
 Đèn 2: (2.0, 4.5, 8.0)
 Ấm trà: 5.0, -0.4, 27.0
+ Màu sắc :
 Đèn ngủ:(0.9461, 0.96, 0.1248)

25
 ấm trà: (0.9461, 0.96, 0.1248)

+ Kích thước: gluCylinder(quadric, 2, 1, 2, 20, 1);


+ Code sinh đối tượng:
void DrawDenNgu() {
//Thiet lap mau moi trường
GLfloat ambient[] = { 0.9461, 0.96, 0.1248, 0.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient);
//Thiet lap màu khuech tan
GLfloat diff_use[] = { 1, 0.5, 0.5, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diff_use);
//thiet lap màu phản xạ
GLfloat specular[] = { 0.95, 0.7252, 0.2755, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular);
//Thiết lập độ lớn cho specular
GLfloat shininess = 50.0f;
glMateriali(GL_FRONT, GL_SHININESS, shininess);

//nguồn sáng 1 - spot light (đèn chiếu giới hạn góc chiếu)
float light_pos1[] = { 0.0,9.0,0.0,1.0 };
glLightfv(GL_LIGHT1, GL_POSITION, light_pos1);
glLightfv(GL_LIGHT1, GL_AMBIENT, ambient);
glLightfv(GL_LIGHT1, GL_DIFFUSE, diff_use);
glLightfv(GL_LIGHT1, GL_SPECULAR, specular);

GLfloat spotExp = 5.0;


glLightf(GL_LIGHT1, GL_SPOT_EXPONENT, spotExp);
GLfloat spotCutoff = 40.0;
glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, spotCutoff);
//GL_SPOT_DIRECTION: hướng chiếu sáng của nguồn sáng dạng spot
float light_dir[3] = { 0.0,-1.0,0.0 };
glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, light_dir);

//Vẽ cái đèn ngủ


glPushMatrix();
glTranslatef(0, 3, 0);
glRotatef(270, 1, 0, 0); // Quay khối trụ 90 độ theo trục y
glColor3f(0.9461, 0.96, 0.1248); // Màu xanh biển nhạt
GLUquadricObj* quadric = gluNewQuadric();
gluQuadricNormals(quadric, GLU_SMOOTH);
gluQuadricTexture(quadric, GL_FALSE);
gluCylinder(quadric, 2, 1, 2, 20, 1);
gluDeleteQuadric(quadric);

glTranslatef(0.0, 0.0, -3.0);


glColor3f(0.7477, 0.76, 0.0228); // Màu xanh biển nhạt
GLUquadricObj* quadric1 = gluNewQuadric();
gluQuadricNormals(quadric1, GLU_SMOOTH);
gluQuadricTexture(quadric1, GL_FALSE);
gluCylinder(quadric1, .2, .2, 3, 20, 1);
gluDeleteQuadric(quadric1);

// Vẽ nắp đèn ngủ (hình nón)


glTranslatef(0.0, 0.0, 5.0); // Di chuyển lên trên một chút
glColor3f(0.8561, 0.87, 0.0348); // Màu xanh biển nhạt
gluDisk(quadric, 0, 1, 20, 1); // Vẽ đĩa phẳng đại diện cho nắp đèn
glPopMatrix();
}
void drawTeaPot() {
//Thiết lập màu môi trường của vật liệu
GLfloat ambient[] = { 0.73, 0.4898, 0.0438, 1.0 };

26
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient);
//Thiết lập độ khuyếch tán màu
GLfloat diff_use[] = { 0.79, 0.6843,0.2133, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diff_use);
//Thiết lập độ phản chiếu
GLfloat specular[] = { 0.95, 0.7252, 0.2755, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular);
//Thiết lập độ lớn cho specular
GLfloat shininess = 20.0f;
glMateriali(GL_FRONT, GL_SHININESS, shininess);
//glColor3f(1.0, 1.0, 0.0);
glPushMatrix();// Lưu ma trận hiện hành vào ngăn xếp
glTranslatef(-2.0, 4.0, 1.0);
glutSolidTeapot(.7);
glPopMatrix(); // Lấy ma trận gốc từ đỉnh của ngăn xếp
}

- Kệ ti vi + tivi + đồ trang trí:

Hình 2. 9 Kệ tivi và đồ trang trí

+ Vị trí đặt đối tượng:


 Kệ tivi: (34.0f, 3.0f, 16.0f)
 Tivi: (34.9f, 10.0f, 16.0f)
 Đồ trang trí: (34.0f, 5.0f, 11.0f)
+ Màu sắc :

27
 Kệ tivi: 0.71, 0.4828, 0.0284
 Tivi: (0, 0, 0)
 Đồ trang trí: 0.7477, 0.76, 0.0228
+ Kích thước:
 Kệ tivi: 2.0f, 4.0, 17.0f
 Tivi: (.2f, 8.0, 15.0f)
 Đồ trang trí: gluCylinder(quadric1, 1, 1, 1, 20, 1);
+ Code sinh đối tượng:
void DrawKeTreoTuong() {
glEnable(GL_LIGHTING);
//Thiet lap mau moi trường
GLfloat ambient[] = { 0.71, 0.4828, 0.0284, 0.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient);
//Thiet lap màu khuech tan
GLfloat diff_use[] = { 1, 0.5, 0.5, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diff_use);
//thiet lap màu phản xạ
GLfloat specular[] = { 0.78, 0.6735, 0.0702, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular);

glPushMatrix();
glColor3f(0.71, 0.4828, 0.0284); // Màu xanh biển nhạt
glTranslatef(0, 0, 0);
glScalef(2.0f, 4.0, 17.0f); // Kích thước vách ngăn
glutSolidCube(1.0f);
glPopMatrix();

// Vẽ các đường kẻ tượng trưng cho cửa kệ


glBegin(GL_LINES);
glColor3f(0.8, 0.8, 0.8); // Màu xám nhạt
glVertex3f(-1.0, -2.0, -8.3);
glVertex3f(-1.0, 2.0, -8.3);
// Đường kẻ 1
glVertex3f(-1.0, -2.0, -3.3);
glVertex3f(-1.0, 2.0, -3.3);
// Đường kẻ 2
glVertex3f(-1.0, -2.0, 3.3);
glVertex3f(-1.0, 2.0, 3.3);

glVertex3f(-1.0, -2.0, 8.3);


glVertex3f(-1.0, 2.0, 8.3);
glEnd();
}

void DrawTiVi() {
glEnable(GL_LIGHTING);
//Thiet lap mau moi trường
GLfloat ambient[] = { 0, 0, 0, 0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient);
//Thiet lap màu khuech tan
GLfloat diff_use[] = { 0.22, 0.1892, 0.1892, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diff_use);
//thiet lap màu phản xạ
GLfloat specular[] = { .5, .5, .5, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular);

28
//Thiết lập độ lớn cho specular
GLfloat shininess = 50.0f;
glMateriali(GL_FRONT, GL_SHININESS, shininess);
//nguồn sáng 3 - spot light (đèn chiếu giới hạn góc chiếu)
float light_pos3[] = { -8.0,0.0,0.0,1.0 };
GLfloat ambient3[] = { 0.54, 0.54, 0.54, 1.0 };
GLfloat diff_use3[] = { 0.39, 0.39, 0.39, 1.0 };
GLfloat specular3[] = { 0.2, 0.2, 0.2, 1.0 };
glLightfv(GL_LIGHT3, GL_POSITION, light_pos3);
glLightfv(GL_LIGHT3, GL_AMBIENT, ambient3);
glLightfv(GL_LIGHT3, GL_DIFFUSE, diff_use3);
glLightfv(GL_LIGHT3, GL_SPECULAR, specular3);

GLfloat spotExp = 10.0;


glLightf(GL_LIGHT3, GL_SPOT_EXPONENT, spotExp);
GLfloat spotCutoff = 90.0;
glLightf(GL_LIGHT3, GL_SPOT_CUTOFF, spotCutoff);
//GL_SPOT_DIRECTION: hướng chiếu sáng của nguồn sáng dạng spot
float light_dir[3] = {1.0,0.0,0.0 };
glLightfv(GL_LIGHT3, GL_SPOT_DIRECTION, light_dir);

glPushMatrix();
glColor3f(0, 0, 0); // Màu xanh biển nhạt
glTranslatef(0,0,0); // Di chuyển xuống dưới một chút để tạo khoảng cách với mặt sàn
glScalef(.2f, 8.0, 15.0f); // Kích thước vách ngăn
glutSolidCube(1.0f);
glPopMatrix();
}

void DrawDoTrangTri() {
//Thiết lập màu môi trường của vật liệu
GLfloat ambient[] = { 0.9191, 0.3325, 0.95, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient);
//Thiết lập độ khuyếch tán màu
GLfloat diff_use[] = { 0.9609, 0.5978,0.98, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diff_use);
//Thiết lập độ phản chiếu
GLfloat specular[] = { 0.9806, 0.8019, 0.99, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular);
//Thiết lập độ lớn cho specular
GLfloat shininess = 20.0f;
glMateriali(GL_FRONT, GL_SHININESS, shininess);

glRotatef(270, 1, 0, 0); // Quay khối trụ 90 độ theo trục y


// Vẽ phần thân của khối trụ
glColor3f(0.7477, 0.76, 0.0228); // Màu xanh biển nhạt
GLUquadricObj* quadric1 = gluNewQuadric();
gluQuadricNormals(quadric1, GLU_SMOOTH);
gluQuadricTexture(quadric1, GL_FALSE);
gluCylinder(quadric1, 1, 1, 1, 20, 1);

// Vẽ nắp trên
glTranslatef(0.0, 0.0, 0.2); // Di chuyển lên trên
gluDisk(quadric1, 0, 1, 20, 1); // Vẽ đĩa phẳng đại diện cho nắp trên

// Vẽ nắp dưới
glTranslatef(0.0, 0.0, -2.0); // Di chuyển xuống dưới
gluDisk(quadric1, 0, 1, 20, 1); // Vẽ đĩa phẳng đại diện cho nắp dưới

gluDeleteQuadric(quadric1);

glEnable(GL_LIGHTING);
}

29
- Thảm + bình hoa + tranh:

Hình 2. 10 Thảm bình hòa và tranh treo tường

+ Vị trí đặt đối tượng:


 Thảm: 8.0, 0.1, 7.0

30
 Bình hoa: 33.5, 2, 27.0
 Tranh: .1f, 13.0f, 17.0f
+ Màu sắc :
 Thảm: 8.0, 0.1, 7.0
 Bình hoa: 33.5, 2, 27.0
 Tranh: .1f, 13.0f, 17.0f
+ Kích thước:
 Thảm: 15x20
 Bình hoa: 2x10x10
 Tranh: .2f, 10.0, 17.0f
+ Code sinh đối tượng:
void DrawThamSanNha() {
glEnable(GL_LIGHTING);
//Thiết lập màu môi trường của vật liệu
GLfloat ambient[] = { 1, 0.66, 0.66, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient);
//Thiết lập độ khuyếch tán màu
GLfloat diff_use[] = { 1, 0.46, 0.46, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diff_use);
//Thiết lập độ phản chiếu
GLfloat specular[] = { 0.97, 0.6887, 0.6887, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular);
//Thiết lập độ lớn cho specular
GLfloat shininess = 10.0f;
glMateriali(GL_FRONT, GL_SHININESS, shininess);

glColor3f(1, 0.66, 0.66); // Màu xanh biển nhạt


glBegin(GL_QUADS);
glVertex3f(0.0, 0.0, 0.0); // Điểm dưới bên trái
glVertex3f(00.0, 0.0, 20.0); // Điểm trên bên trái
glVertex3f(15.0, 0.0, 20.0); // Điểm dưới bên phải
glVertex3f(15.0, 0.0, 00.0); // Điểm trên bên phải
glEnd();
}
void Hoa() {
glEnable(GL_LIGHTING);
//Thiet lap mau moi truong vat lieu
GLfloat ambient[] = { 1.0, 0.0 ,0.0, 0.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient);
//Thiet lap do khuech tan mau
GLfloat diff_use[] = { 1, 0.5, 0.5, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diff_use);
//thiet lap do phan chieu
GLfloat specular[] = { 1, 0.73, 0.73, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular);
//Thiet lap do nhẵn bóng của đối tượng
GLfloat shininess = 60.0f;
glMateriali(GL_FRONT, GL_SHININESS, shininess);

glPushMatrix();
glTranslatef(0.0, 4, 0.0);

31
glScalef(0.4, 5, 0.4);
glutSolidCube(1);
glPopMatrix();

glPushMatrix();
glTranslatef(0.0, 7, 0.0);
glScalef(0.9, 0.7, 0.9);
glutSolidDodecahedron();
glPopMatrix();
glFlush();
glDisable(GL_LIGHTING);

void caiBinhHoa() {
Hoa();
glEnable(GL_LIGHTING);
//Thiet lap mau moi truong vat lieu
GLfloat ambient[] = { 0.0, 1.0 ,1.0, 0.0 };
glMaterialfv(GL_FRONT, GL_AMBIENT, ambient);
//Thiet lap do khuech tan mau
GLfloat diff_use[] = { 0.0609, 0.87, 0.87, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diff_use);
//thiet lap do phan chieu
GLfloat specular[] = { 0.0, 0.0, 1.0, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular);
//Thiet lap do lon cho do phan chieu
GLfloat shininess = 30.0f;
glMateriali(GL_FRONT, GL_SHININESS, shininess);

//vẽ thân bình


glPushMatrix();
glScalef(0.7, 1.3, 0.7);
glutSolidSphere(2, 100, 100); // Vẽ hình hộp chữ nhật
glPopMatrix();

//vẽ miệng bình


glPushMatrix();
glTranslatef(0.0, 4.5, 0.0);
glScalef(0.35, 1.1, 0.35);
glRotatef(90, 8.0, 0.0, 0.0); // Xoay vật thể quanh trục (8,0,0)
glutSolidCone(3, 4, 100, 100);
glPopMatrix();

//vẽ đế bình
glPushMatrix();
glTranslatef(0.0, -2.5, 0.0);
glScalef(0.3, 0.4, 0.3);
glRotatef(-90, 8.0, 0.0, 0.0); // Xoay vật thể quanh trục (8,0,0)
glutSolidCone(3, 4, 100, 100);
glPopMatrix();

glFlush();
glDisable(GL_LIGHTING);
}
void DrawTranh() {
glDisable(GL_LIGHTING);
glPushMatrix();
glColor3f(0.42, 1, 0.594); // Màu xanh biển nhạt
glTranslatef(0,0,0); // Di chuyển xuống dưới một chút để tạo khoảng cách với mặt sàn
glScalef(.2f, 10.0, 17.0f); // Kích thước vách ngăn
glutSolidCube(1.0f);
glPopMatrix();

32
glEnable(GL_LIGHTING);

//khung tranh
glPushMatrix();
glColor3f(0.85, 0.6116, 0.0085); // Màu xanh biển nhạt
glTranslatef(0, 0, 8.5); // Di chuyển xuống dưới một chút để tạo khoảng cách với mặt sàn
glScalef(.25f, 10.0, 1.0f); // Kích thước vách ngăn
glutSolidCube(1.0f);
glPopMatrix();

glPushMatrix();
glColor3f(0.85, 0.6116, 0.0085); // Màu xanh biển nhạt
glTranslatef(0, 0, -8.5); // Di chuyển xuống dưới một chút để tạo khoảng cách với mặt sàn
glScalef(.25f, 10.0, 1.0f); // Kích thước vách ngăn
glutSolidCube(1.0f);
glPopMatrix();

glPushMatrix();
glColor3f(0.85, 0.6116, 0.0085); // Màu xanh biển nhạt
glTranslatef(0, 4.5, 0.0); // Di chuyển xuống dưới một chút để tạo khoảng cách với mặt sàn
glScalef(.25f, 1.0, 17.0f); // Kích thước vách ngăn
glutSolidCube(1.0f);
glPopMatrix();

glPushMatrix();
glColor3f(0.85, 0.6116, 0.0085); // Màu xanh biển nhạt
glTranslatef(0, -4.5, 0.0); // Di chuyển xuống dưới một chút để tạo khoảng cách với mặt sàn
glScalef(.25f, 1.0, 17.0f); // Kích thước vách ngăn
glutSolidCube(1.0f);
glPopMatrix();
}

- Đèn trần:

Hình 2. 11 Đèn trần

+ Vị trí đặt đối tượng: 17.5, 19.85, 15.0f


+ Màu sắc :
33
 Khung đèn: 0.97, 0.6926, 0.3298
 đèn: 0.99, 0.9471, 0.891
+ Kích thước:
 Khung đèn: 0.97, 0.6926, 0.3298
 Đèn: 0.99, 0.9471, 0.891
+ Code sinh đối tượng:
void DrawDenTran() {
//Thiet lap mau moi trường
GLfloat ambient[] = { 0.98, 0.7551, 0.1862, 0.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient);
//Thiet lap màu khuech tan
GLfloat diff_use[] = { 0.81, 0.5897, 0.5, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diff_use);
//thiet lap màu phản xạ
GLfloat specular[] = { 1, 0.8725, 0.55, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular);
//Thiết lập độ lớn cho specular
GLfloat shininess = 50.0f;
glMateriali(GL_FRONT, GL_SHININESS, shininess);

//nguồn sáng 1 - spot light (đèn chiếu giới hạn góc chiếu)
float light_pos2[] = { 1.0,1.0,1.0,1.0 };
GLfloat ambient2[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat diff_use2[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat specular2[] = { 1.0, 1.0, 1.0, 1.0 };
glLightfv(GL_LIGHT2, GL_POSITION, light_pos2);
glLightfv(GL_LIGHT2, GL_AMBIENT, ambient2);
glLightfv(GL_LIGHT2, GL_DIFFUSE, diff_use2);
glLightfv(GL_LIGHT2, GL_SPECULAR, specular2);

GLfloat spotExp = 1.0;


glLightf(GL_LIGHT2, GL_SPOT_EXPONENT, spotExp);
GLfloat spotCutoff = 90.0;
glLightf(GL_LIGHT2, GL_SPOT_CUTOFF, spotCutoff);
float light_dir[3] = { 0.0,-1.0,0.0 };
glLightfv(GL_LIGHT2, GL_SPOT_DIRECTION, light_dir);

glPushMatrix();
glColor3f(0.97, 0.6926, 0.3298); // Màu xanh biển nhạt
glTranslatef(0, 0, 0);
glScalef(10.0f, .3, 10.0f); // Kích thước vách ngăn
glutSolidCube(1.0f);
glPopMatrix();

glDisable(GL_LIGHTING);
glPushMatrix();
glColor3f(0.99, 0.9471, 0.891); // Màu xanh biển nhạt
glTranslatef(0, 0, 0);
glScalef(8.0f, .3, 8.0f); // Kích thước vách ngăn
glutSolidCube(1.0f);
glPopMatrix();
}

2.3. Thiết lập các nguồn sáng


- Nguồn sáng môi trường:

34
+ Nguồn sáng (GL_LIGHT0):
Position: 0.0f, 0.0f, 1.0f, 1.0f
Ambient: 0.2f, 0.2f, 0.2f, 1.0f
Diffuse: 1.0f, 1.0f, 1.0f, 1.0f
Specular: 1.0f, 1.0f, 1.0f, 1.0f
- Nguồn sáng định hướng:
+ Nguồn sáng (GL_LIGHT1):
Position: 0.0,9.0,0.0,1.0
Ambient: 0.9461, 0.96, 0.1248, 0.0
Diffuse: 1, 0.5, 0.5, 1.0
Specular: 0.95, 0.7252, 0.2755, 1.0
Exponent: 5.0
Cutoff: 40.0
Direction: 0.0,-1.0,0.0
+ Nguồn sáng (GL_LIGHT2):
Position: 1.0,1.0,1.0,1.0
Ambient: 1.0, 1.0, 1.0, 1.0
Diffuse: 1.0, 1.0, 1.0, 1.0
Specular: 1.0, 1.0, 1.0, 1.0
Exponent: 1.0
Cutoff: 90.0
Direction: 0.0,-1.0,0.0
+ Nguồn sáng (GL_LIGHT3):
Position: -8.0,0.0,0.0,1.0
Ambient: 0.54, 0.54, 0.54, 1.0
Diffuse: 0.39, 0.39, 0.39, 1.0
Specular: 0.2, 0.2, 0.2, 1.0
Exponent: 10.0
Cutoff: 90.0
Direction: 1.0,0.0,0.0

35
2.4. Xử lý sự kiện bấm phím
- Bật tắt nguồn sáng:
+ Chức năng các phím tắt sử dụng
 Phím tắt 5: bật tắt nguồn sáng light0.
 Phím tắt 6: bật tắt nguồn sáng light1.
 Phím tắt 7: bật tắt nguồn sáng light2.
 Phím tắt 8: bật tắt nguồn sáng light3.
 Phím tắt 9: Tắt tất cả nguồn sáng.
+ Code hàm xử lý sự kiện nhấn phím:
void Keyboard(unsigned char key, int x, int y) {
switch (key) {
case '5':
if (glIsEnabled(GL_LIGHT0)) {
glDisable(GL_LIGHT0);
}
else {
glEnable(GL_LIGHT0);
}
glutPostRedisplay(); // Yêu cầu vẽ lại cửa sổ
break;
case '6':
if (glIsEnabled(GL_LIGHT1)) {
glDisable(GL_LIGHT1);
}
else {
glEnable(GL_LIGHT1);
}
glutPostRedisplay(); // Yêu cầu vẽ lại cửa sổ
break;
case '7':
if (glIsEnabled(GL_LIGHT2)) {
glDisable(GL_LIGHT2);
}
else {
glEnable(GL_LIGHT2);
}
glutPostRedisplay(); // Yêu cầu vẽ lại cửa sổ
break;
case '8':
if (glIsEnabled(GL_LIGHT3)) {
glDisable(GL_LIGHT3);
}
else {
glEnable(GL_LIGHT3);
}
glutPostRedisplay(); // Yêu cầu vẽ lại cửa sổ
break;
case '9':
glDisable(GL_LIGHT0);
glDisable(GL_LIGHT1);
glDisable(GL_LIGHT2);
glDisable(GL_LIGHT3);
glutPostRedisplay(); // Yêu cầu vẽ lại cửa sổ
break;
}

36
}

- Thay đổi góc chiếu của đèn:


+ Chức năng các phím tắt sử dụng
 Phím tắt 1,2,3,4: Thay đổi góc nhìn thành góc nhìn chéo để thay đổi hướng
chiếu của nguồn sáng môi trường.
 Phím tắt a,w,s,d,e,r : Tăng giảm tọa độ điểm nhìn
 Phím tắt i,k,j,l,o,p : Tăng giảm tọa độ điểm nhìn tới
 Phím f : reset về tọa độ ban đầu đang sử dụng.
+ Code hàm xử lý sự kiện nhấn phím
switch (key) {
case '1':
case '2':
case '3':
case '4':
// Cập nhật giá trị của currentView khi phím được nhấn
currentView = key - '0';
printf("%d\n", currentView); // In ra để kiểm tra
glutPostRedisplay(); // Yêu cầu vẽ lại cửa sổ
break;
case 'w':
eyeY += 1.0;
break;
case 's':
eyeY -= 1.0;
break;
case 'a':
eyeX -= 1.0;
break;
case 'd':
eyeX += 1.0;
break;
case 'e':
eyeZ += 1;
break;
case 'r':
eyeZ -= 1;
break;
case 'f':
eyeX = 0.0; eyeY = 0.0; eyeZ = 0.0;
refX = 0.0; refY = 0.0; refZ = 0.0;
break;
case 'i':
refY += 1.0;
break;
case 'k':
refY -= 1.0;
break;
case 'j':
refX -= 1.0;
break;
case 'l':
refX += 1.0;
break;
case 'o':

37
refZ += 1;
break;
case 'p':
refZ -= 1;
break;
default:
break;
}

switch (currentView) {
case 1:
gluLookAt(35 + eyeX, 20.0 + eyeY, 30 + eyeZ, 0.0 + refX, 0.0 + refY, 0.0 + refZ, 0.0, 1.0, 0.0); //
Góc nhìn chéo

break;
case 2:
gluLookAt(17.0 + eyeX, 12.0 + eyeY, 60.0 + eyeZ, 17.0 + refX, 12.0 + refY, 0.0 + refZ, 0.0, 5.0,
0.0);
break;
case 3:
gluLookAt(17.0 + eyeX, 60.0 + eyeY, 15.0 + eyeZ, 17.0 + refX, 0.0 + refY, 15.0 + refZ, 0.0, 0.0, -
5.0);
break;

case 4:
default:
gluLookAt(17.0 + eyeX, 8.0 + eyeY, 0.1 + eyeZ, 17.0 + refX, 8.0 + refY, 20.0 + refZ, 0.0, 5.0,
0.0);
break;
}

38
Chương 3 : Kết luận
3.1 Các nội dung đã đạt được
 Khung cảnh phòng ngủ 3D:
 Hoàn thành mô hình 3D cơ bản của các vật dụng nội thất trong phòng ngủ như
giường ngủ, tủ quần áo, bàn trang điểm, ghế, đèn ngủ,...
 Thiết lập được kích thước, vị trí hiển thị cửa sổ.
 Hệ thống chiếu sáng:
- Áp dụng các kỹ thuật chiếu sáng OpenGL như chiếu sáng môi trường, chiếu
sáng cục bộ, chiếu sáng phản xạ,... để tạo ra hiệu ứng ánh sáng chân thực trong phòng
ngủ.
- Thiết lập được các giá trị thuộc tính phù hợp cho nguồn sáng môi trường, các
giá trị thuộc tính phù hợp cho nguồn sáng Spot Light.
 Hiệu ứng camera:
 Áp dụng các kỹ thuật camera OpenGL như camera di chuyển, camera xoay,...
để tạo ra các góc nhìn khác nhau trong phòng ngủ.
 Sử dụng các kỹ thuật điều khiển bằng bàn phím để cho phép người dùng tương
tác với môi trường phòng ngủ như bật/tắt từng nguồn sáng, bật/tắt tất cả các nguồn
sáng,thay đổi hướng chiếu của nguồn sáng
 Giao diện người dùng:
- Tạo ra một giao diện người dùng đơn giản cho phép người dùng điều khiển
camera, ánh sáng và các vật dụng nội thất trong phòng ngủ.
- Sử dụng các thư viện giao diện người dùng như GLUT hoặc GLFW để tạo ra
giao diện người dùng.
 Tối ưu hóa hiệu suất:
 Tối ưu hóa mô hình 3D và các thuật toán đồ họa để cải thiện hiệu suất chương
trình.
 Sử dụng các kỹ thuật tối ưu hóa bộ nhớ và bộ xử lý để giảm thiểu thời gian tải
và chạy chương trình.
 Bài tập lớn thiết kế phòng ngủ OpenGL đã đạt được các nội dung cơ bản như
mô hình 3D, hệ thống chiếu sáng, hiệu ứng camera, giao diện người dùng và tối ưu
hóa hiệu suất. Tuy nhiên, vẫn còn một số nội dung có thể được cải thiện further như:
 Thêm các chi tiết trang trí và phụ kiện cho phòng ngủ.
 Tạo ra các hiệu ứng động như di chuyển các vật dụng nội thất, mở cửa sổ,...
 Thêm các hiệu ứng âm thanh để tạo ra bầu không khí chân thực trong phòng
ngủ.
3.2. Bài học kinh nghiệm:
 Lập kế hoạch và quản lý thời gian:

39
 Chia nhỏ bài tập thành các phần nhỏ: Do là nhóm 5 người, nên chia nhỏ bài tập
thành các phần nhỏ và giao cho từng thành viên trong nhóm phụ trách một phần. Điều
này sẽ giúp phân chia công việc hợp lý và đảm bảo rằng mỗi thành viên đều có trách
nhiệm hoàn thành phần việc của mình.
 Đặt ra thời hạn cho từng phần: Sau khi chia nhỏ bài tập, hãy đặt ra thời hạn cho
từng phần. Điều này sẽ giúp nhóm theo dõi tiến độ và đảm bảo rằng nhóm đang hoàn
thành bài tập đúng hạn.
 Sử dụng công cụ quản lý dự án: Có rất nhiều công cụ quản lý dự án có sẵn để
giúp nhóm theo dõi tiến độ và hoàn thành bài tập đúng hạn. Một số công cụ phổ biến
bao gồm Trello, Asana, và Jira.
 Giao tiếp và hợp tác:
 Giao tiếp thường xuyên: Giao tiếp thường xuyên giữa các thành viên trong
nhóm là rất quan trọng để đảm bảo rằng mọi người đều hiểu rõ nhiệm vụ của mình và
đang làm việc hiệu quả. Nhóm nên tổ chức các cuộc họp thường xuyên để thảo luận
về tiến độ, giải quyết vấn đề và đưa ra quyết định.
 Sử dụng công cụ giao tiếp: Có rất nhiều công cụ giao tiếp có sẵn để giúp nhóm
giao tiếp hiệu quả. Một số công cụ phổ biến bao gồm Slack, Zoom, và Google Meet.
 Chia sẻ kiến thức và kinh nghiệm: Mỗi thành viên trong nhóm đều có những
kiến thức và kinh nghiệm riêng. Nhóm nên chia sẻ kiến thức và kinh nghiệm của mình
với nhau để học hỏi lẫn nhau và cải thiện hiệu quả công việc.
 Sử dụng các công cụ và thư viện phù hợp:
 Nghiên cứu các công cụ và thư viện OpenGL: Có rất nhiều công cụ và thư viện
OpenGL có sẵn để giúp nhóm hoàn thành bài tập lớn. Nhóm nên dành thời gian để
nghiên cứu các công cụ và thư viện này và chọn những công cụ phù hợp với nhu cầu
của nhóm.
 Học cách sử dụng các công cụ và thư viện: Sau khi chọn được các công cụ và
thư viện phù hợp, nhóm nên dành thời gian để học cách sử dụng chúng. Có rất nhiều
tài nguyên trực tuyến và sách hướng dẫn có thể giúp nhóm học cách sử dụng các công
cụ và thư viện này.
 Sử dụng các ví dụ và hướng dẫn: Có rất nhiều ví dụ và hướng dẫn có sẵn trực
tuyến để giúp nhóm học cách sử dụng các công cụ và thư viện OpenGL. Nhóm nên
tận dụng các ví dụ và hướng dẫn này để học cách thực hiện các tác vụ cụ thể.
 Kiểm tra và sửa lỗi kỹ lưỡng:
 Kiểm tra chương trình của nhóm thường xuyên: Khi nhóm đang thực hiện bài
tập, hãy kiểm tra chương trình của nhóm thường xuyên để đảm bảo rằng nó hoạt động
chính xác. Nhóm có thể sử dụng các công cụ gỡ lỗi để tìm và sửa lỗi trong chương
trình của nhóm.
 Kiểm tra chương trình của nhóm trên nhiều hệ thống: Sau khi hoàn thành bài
tập, hãy kiểm tra chương trình của nhóm trên nhiều hệ thống khác nhau để đảm bảo
rằng nó hoạt động tốt trên mọi hệ thống.

40
 Sử dụng các công cụ kiểm tra chất lượng: Có rất nhiều công cụ kiểm tra chất
lượng có sẵn để giúp nhóm tìm lỗi trong chương trình của nhóm. Một số công cụ phổ
biến bao gồm Coverity, SonarQube, và Static Code Analysis.

 Học hỏi từ kinh nghiệm của bản thân:


 Phản ánh về quá trình làm bài tập: Sau khi hoàn thành bài tập, nhóm nên dành
thời gian để phản ánh về quá trình làm bài tập. Xác định những điểm mạnh và điểm
yếu của nhóm và tìm cách cải thiện trong những bài tập sau.
 Chia sẻ kinh nghiệm của nhóm với những người khác: Chia sẻ kinh nghiệm của
nhóm với những nhóm lập trình viên khác để họ có thể học hỏi từ nhóm. Nhóm có thể
chia sẻ kinh nghiệm của nhóm trên các diễn đàn trực tuyến, trong các nhóm lập trình,
hoặc tại các hội nghị.

41
TÀI LIỆU THAM KHẢO
[1]http://elearning.eaut.edu.vn/course/search.php?search=k%C4%A9+thu
%E1%BA%ADt+%C4%91%E1%BB%93+h%E1%BB%8Da+m%C3%A1y+t
%C3%ADnh

42

You might also like