Kỹ năng- Sử dụng thành thạo các ngôn ngữ C++ và áp dụng thư viện đồ họa hỗ trợ là OpenGL để tạo nên các mô hình cần dựng.- Kỹ năng sử dụng các phép biến đổi, chiếu phối cảnh, thiết lập v
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO THỰC NGHIỆM THUỘC HỌC
Trang 2HÀ NỘI - 2022
Trang 3TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO THỰC NGHIỆM THUỘC HỌC
Trang 4HÀ NỘI - 2022
Trang 5MỤC LỤC
DANH MỤC HÌNH ẢNH 1
DANH MỤC BẢNG 2
LỜI MỞ ĐẦU 3
1.1 Tên đề tài: 3
1.2 Nội dung nghiên cứu 3
1.2.1 Kiến thức 3
1.2.2 Kỹ năng 4
Chương 1 XÁC ĐỊNH VÀ PHÂN TÍCH BÀI TOÁN 5
1.2 Bài toán 5
1.2 Mô tả các đối tượng cần thiết kế 5
1.4 Mô tả kịch bản của chương trình 6
Chương 2 CÀI ĐẶT CHƯƠNG TRÌNH 7
2.1 Kỹ thuật tạo mô hình showroom 7
2.2 Kỹ thuật tạo mô hình Xe máy 7
2.2.1 Phần đầu xe 7
2.2.2 Phần thân xe 8
2.2.3 Phần đuôi xe 8
2.3 Kỹ thuật tạo mô hình Robot 8
2.3.1 Phần đầu 9
2.3.2 Phần thân 9
2.4 Kỹ thuật điều khiển camera và phép chiếu 10
2.5 Kỹ thuật chiếu sáng 11
Trang 62.9 Kỹ thuật phản chiếu 12
Chương 3 KẾT QUẢ ĐẠT ĐƯỢC 13
3.1 Mô hình showroom 13
3.2 Mô hình xe máy và robot 14
3.3 Điều khiển camera và phép chiếu 17
3.4 Chiếu sáng 18
3.5 Đổ bóng 19
3.6 Phản chiếu 19
KẾT LUẬN 20
3.1 Kết quả đạt được 20
3.2 Hướng phát triển 20
TÀI LIỆU THAM KHẢO 22
Trang 7DANH MỤC HÌNH Ả
Hình 2.1 Sơ đồ phân cấp phần đầu xe máy 7
Hình 2.2 Sơ đồ phân cấp phần thân của robot 9
Hình 2.3 Mô phỏng chiếu phối cảnh 10Y Hình 3.1 Mô hình showroom 13
Hình 3.2 Mô hình showroom nhìn từ phía trước 13
Hình 3 3 Mô hình showroom nhìn từ phía trên 14
Hình 3.4 Mô hình xe máy nhìn từ phía trước 14
Hình 3.5 Mô hình xe máy và robot nhìn phía ngang 15
Hình 3 6 Mô hình xe máy và robot nhìn phía Sau 15
Hình 3 7 Mô hình xe máy và robot nhìn thẳng xuống 16
Hình 3 8 Mô hình xe máy và robot nhìn chéo từ phía trên 16
Hình 3.9 Camera gần vật 17
Hình 3.10 Camera xa vật 17
Hình 3.11 Mô hình showroom khi không chiếu sáng 18
Hình 3.12 Mô hình showroom khi chiếu sáng 18
Hình 3.13 Hình ảnh phản chiếu của xe xuống mặt sàn 19
Hình 3.14 Hình ảnh bóng của xe dưới mặt sàn 19
Trang 8DANH MỤC BẢNG
Bảng 1.1 Bảng mô tả kịch bản 6
Trang 9LỜI MỞ ĐẦU
1.1 Tên đề tài:
Mô phỏng showroom xe máy
1.2 Nội dung nghiên cứu
1.2.1 Kiến thức
Sự phát triển của khoa học, kĩ thuật, nghệ thuật, kinh doanh và công nghệ luôn luôn phụ thuộc vào khả năng truyền đạt thông tin của chúng ta, hoặc thông qua các bit dữ liệu lưu trữ trong microchip hoặc thông qua giao tiếp bằng tiếng nói
Câu châm ngôn từ xa xưa “một hình ảnh có giá trị hơn cả vạn lời” hay
“trăm nghe không bằng một thấy” cho thấy ý nghĩa rất lớn của hình ảnh trong việc truyền tải thông tin Hình ảnh bao giờ cũng được cảm nhận nhanh và dễ dàng hơn, đặc biệt là trong trường hợp bất đồng về ngôn ngữ Do đó không có
gì ngạc nhiên khi mà ngay từ khi xuất hiện máy tính , các nhà nghiên cứu đã
cố gắng sử dụng nó để phát sinh các hình ảnh trên màn hình Trong suốt gần
50 năm phát triển của máy tính, khả năng phát sinh hình ảnh bằng máy tính của chúng ta đã đạt tới mức mà bây giờ hầu như tất cả các máy tính đều có khả năng đồ họa
Đồ họa máy tính là một trong những lĩnh vực lí thú nhất và phát triển nhanh nhất của tin học Ngay từ khi xuất hiện, đồ họa máy tính đã có sức lôi cuốn mãnh liệt, cuốn hút rất nhiều người ở nhiều lĩnh vực khác nhau như : khoa học, nghệ thuật, kinh doanh, quản lí,… Tính hấp dẫn và đa dạng của đồ họa máy tính có thể được minh họa rất trực quan thông qua việc khảo sát các ứng dụng của nó
Trang 11Chương 1 XÁC ĐỊNH VÀ PHÂN TÍCH BÀI TOÁN
1.2 Mô tả các đối tượng cần thiết kế
1.2.1 Thiết kế mô hình showroom
- Gồm các khối hình chữ nhật ghép lại với nhau thành hình hộp bao gồm mặt đáy, 4 mặt cạch
- Trong đó, một mặt cạnh sẽ có khoảng trống để tạo cửa ra vào
1.2.2 Thiết kế mô hình xe máy
- Gồm có các khối hình như: Hình trụ,hình cầu,hình hộp chữ nhật, để
mô phỏng mô hình xe máy
- Các bộ phận của mô hình có vị trí phù hợp để đứng thẳng được trên mặt sàn
1.2.3 Thiết kế mô hình robot
- Gồm có các khối hình như: hình tròn, hình trụ, hình chữ nhật, để mô phỏng hình người ngồi trên xe máy
- Các bộ phận của mô hình có vị trí phù hợp khi được thiết kế ngồi trên
xe máy
Trang 121.3 Mô tả bố cục khung cảnh chung
Hình 1.1 Bốố c nh chung c a showroom xe máy ả ủ
1.4 Mô tả kịch bản của chương trình
Bảng 1.1 Bảng mô tả kịch bản
Trang 13Chương 2 CÀI ĐẶT CHƯƠNG TRÌNH
2.1 Kỹ thuật tạo mô hình showroom
- Sử dụng hàm glBegin(GL_QUADS) để vẽ các mặt trong showroom:
mặt bên trái, mặt bên phải, mặt đáy, mặt trước
- Sử dụng hàm GlBindTexture() để dán các poster lên tường của
Hình 2.1 Sơ đồ phân cấp phần đầu xe máy
- Sử dụng hàm glBegin(GL_QUADS) để vẽ phần đầu và đèn xe
- Sử dụng hàm GlBindTexture() để dán ảnh cho đèn xe và mặt đo vận tốccho xe
- Sử dụng hàm gluCylinder vẽ một hình trụ làm tay lái và phanh xe
Trang 14- Sử dụng hàm glutSolidTorus() đê vẽ bánh xe.
- Sử dụng hàm gluCylinder() và glutSolidSphere() để vẽ giảm sóc
- Sử dụng hàm gluCylinder() để vẽ trục chính cho thân xe.
- Sử dụng hàm glBegin(GL_TRIANGLES) để vẽ phần nối bánh sau
với thân xe
- Sử dụng hàm glBegin(GL_POLYGON) và glBegin(GL_QUADS) để
vẽ yên xe
- Sử dụng hàm gluCylinder() để vẽ bầu động cơ và bình xăng.
- Sử dụng hàm glTranslatef và glScalef để dịch chuyển và chỉnh tỷ lệ
Trang 152.3 Kỹ thuật tạo mô hình Robot
Sử dụng Display List để xây dựng Ưu điểm của nó là khi nào cần đến
đối tượng Chỉ việc thực hiện gọi kết quả đã thực hiện xong Điều này làm cho chương trình chạy nhanh hơn, bài toán được xử lý tối ưu hơn Tuy nhiên, khi đã thực hiện xong display list rồi thì kết quả đó sẽ không thể bị tác động bởi các nhân tốt khác thực hiện sau đó
2.3.1 Phần đầu
- Sử dụng hàm glutSolidCube() để vẽ khối rắn để làm phần đầu và phần cổ
- Sử dụng hàm DrawCircle đã được định nghĩa trước để vẽ 2 mắt
- Sử dụng hàm gluCylinder vẽ một hình trụ được định hướng dọc theo trục z để vẽ tai và mắt
- Sử dụng hàm gluSphere vẽ một hình cầu cho phần mũi.
- Sử dụng hàm glTranslatef và glScalef để dịch chuyển và chỉnh tỷ lệ cho
phù hợp
- Sử dụng hàm toMau được định nghĩa trước với đối số truyền vào để tô màu cho các phần
2.3.2 Phần thân
Trang 16Hình 2 2 Sơ đồ phân cấp phần thân của robot
- Sử dụng hàm glutSolidCube để vẽ khối rắn để làm phần thân.
- Sử dụng hàm gluCylinder để vẽ các hình trụ phần tay và chân.
- Sử dụng hàm glutSolidSphere vẽ hình cầu cho khớp nối giữa khửu tay
và bắp tay, giữa bắp tay và thân; giữa chân với thân
- Sử dụng hàm glTranslatef và glScalef để dịch chuyển và chỉnh tỷ lệ cho
phù hợp
- Sử dụng hàm toMau để tô màu cho các phần
- Phần tay có bắp tay và cánh tay di chuyển phù hợp theo độ quay của đầu xe máy
2.4 Kỹ thuật điều khiển camera và phép chiếu
Trang 17Hình 2 3 Mô phỏng chiếu phối cảnh
- glTranslate và glRotate sẽ thực hiện việc thay đổi ma trận model để thực hiện quá trình tịnh tiến và quay vật
- Sử dụng hàm gluLookat(eye_x, eye_y, eye_z, model_x, model_y,
model_z, up_x, up_y, up_z); để thiết đặt vị trí đặt của cameral trong hệ
tọa độ
- Sử dụng phép chiếu phối cảnh:
o Vật càng gần cameral thì trông sẽ càng to hơn và càng xa cameral thì càng nhỏ hơn,
o Giá trị càng tăng thì vùng chiếu càng mở rộng và vật cũng nhỏ dần
o Near Far quyết định đến việc các vật ở xa được trông thấy hoặc các vật
ở gần bị mất đi khi nó thay đổi giá trị
2.5 Kỹ thuật chiếu sáng
- Sử dụng glEnable(GL_LIGHTING) và glEnable(GL_LIGHT0); để bật
chế độ chiếu sáng trong hàm lighting
- Sử dụng GLfloat light_diffuse để tạo ánh sáng khuếch tán cho đối
Trang 18- Các hàm GLfloat light_diffuse,GLfloat light_directional, GLfloat
light_ambient là các tham số chính để thiết lập ánh sáng cho màn hình
- Chọn vị trí ánh sáng chiếu vào: GLfloat light_positional[] =
{ 10.0,10.0,10.0,1.0 }; glLightfv(GL_LIGHT0, GL_POSITION,
light_positional);
+ Như thế này nghĩa là: ánh sáng chiếu theo chiều ngược với trục X,Y,Z của OpenGL X,Y,Z đâm ra ngoài màn hình thì ánh sáng chiếu từ ngoài màn hình vào
2.6 Kỹ thuật đổ bóng
- Tạo hàm DrawShadow để thiết lập đổ bóng.
- Sử dụng shadowMatrix(floorShadow, floorPlane, lightPosition) để bật
- Sử dụng hàm glTranslatef(x, y, z) để thực hiện Câu lệnh này cho phép
bạn rời hệ quy chiếu sang một vị trí mới với giá trị x, y, z được truyền vào
- Khi muốn trở về vị trí cũ, sử dụng câu lệnh glLoadIdentity() để đưa hệ
tọa độ trở về ban đầu
- Sử dụng thêm 2 câu lệnh: glPushMatrix để cất hệ trục hiện tại vào stack,
sau đó dùng gltranslate để thay đổi hệ tọa độ mới.
- Các thông số được thay đổi bởi sự kiện bấm phím
2.8 Kỹ thuật quay
Về bản chất, cũng là cách thay đổi hệ trục tọa độ hiện hành, nhưng không phải là phép dời trục mà là phép xoay trục
Trang 19- Sử dụng câu lệnh glRotatef(angle, x, y, z); để quay.
- Các thông sổ được thay đổi bở sự kiện bấm phím và chuột
2.9 Kỹ thuật phản chiếu
- Tạo hàm DrawFlection để thiết lập đổ bóng.
- Sử dụng glBlendFunc(GL_SRC_ALPHA , GL_ONE_MINUS_SRC_
ALPHA); để bật chế độ phản chiếu.
- Sử dụng glEnable(GL_STENCIL_TEST) để tạo khuôn phản chiếu
- Sử dụng glEnable(GL_DEPTH_TEST) để tạo độ sâu của hình ảnh phản chiếu
- Sử dụng glColorMask(1, 1, 1, 1) để tạo màu
2.9 Kỹ thuật dán ảnh
- Vật liệu ở đây chính là một tấm ảnh dạng bitmap và chúng được gọi là texture
- Kỹ thuật về texture có thể nói là đa dạng và phức tạp, vì vậy nhóm sử
dụng hàm LoadTexture(), glBindTexture(), glTexImage2D() để dán ảnh
giúp cho mô phỏng gần như chân thực nhất
- Khi view càng gần, thì NEAREST thể hiện là sự kết hợp bởi các hình vuông nhỏ, nó giống như điểm ảnh sắp xếp với nhau trên một bức ảnh
Trang 20Hình 3 3 Mô hình showroom nhìn từ phía trên
3.2 Mô hình xe máy và robot
Hình 3.4 Mô hình xe máy nhìn từ phía trước
Trang 21Hình 3.5 Mô hình xe máy và robot nhìn phía ngang
Hình 3 6 Mô hình xe máy và robot nhìn phía Sau
Trang 22Hình 3 7 Mô hình xe máy và robot nhìn thẳng xuống
Hình 3 8 Mô hình xe máy và robot nhìn chéo từ phía trên
Trang 233.3 Điều khiển camera và phép chiếu
Hình 3.9 Camera gần vật
Hình 3.10 Camera xa vật
Trang 243.4 Chiếu sáng
Hình 3.11 Mô hình showroom khi không chiếu sáng
Hình 3.12 Mô hình showroom khi chiếu sáng
Trang 26KẾT LUẬN
3.1 Kết quả đạt được
Trong quá trình xây dựng chương trình Mô hình Showroom xe máy, các thành viên trong nhóm đã tổng hợp được rất nhiều kiến thức của môn đồ hoạ máy tính để áp dụng vào xây dựng chương trình Thông qua quá trình làm việc nhóm các thành viên trong trong nhóm đã đoàn kết với nhau hơn, tinh thần làm việc tập thể được nâng cao hơn, rèn luyện kỹ năng làm việc nhóm Nhưng do kiến thức và kinh nghiệm còn hạn chế nên nhóm rất mong nhận được sự đóng góp ý kiến của thầy giáo và các bạn để bài thực nghiệm của nhóm xây dựng được hoàn thiện hơn Nhóm xin chân thành cảm ơn thầy Vũ Đức Huy đã nhiệt tình hướng dẫn nhóm trong suốt quá trình thực hiện đề tài này, được sự nhiệt tình hướng dẫn của thầy nhóm đã hoàn thành được đề tài
và hiểu hơn về môn học
3.2 Hướng phát triển
Sử dụng thư viện OpenGL với các hàm có sẵn để có thể dễ dàng vẽ các hình ảnh đồ họa trong Win32 Console application Trước đây, trong khác phiên bản từ Visual C++ 6.0 trở về trước, cũng như các phiên bản Turbo C, Borland C để vẽ hình có thể sử dụng thư viện graphics.h tuy nhiên ở những phiên bản Visual Studio sau này, thư viện graphics.h đã bị loại bỏ và cũng không còn được hỗ trợ Bởi vì bên cạnh thư viện graphics.h đã lỗi thời, nổi lên các thư viện đồ hoạ tốt hơn và cũng dễ dàng sử dụng hơn, điển hình trong
đó là thư viện OpenGL Đơn giản hóa việc tương tác giữa các mô hình không gian 3 chiều bằng một giao diện lập trình thống nhất
OpenGL hỗ trợ tối đa các chức năng của giao diện OpenGL bằng cách épbuộc các phần cứng 3 chiều khác nhau phải tương thích Ngay cả khi không thể ép phần cứng hỗ trợ hoàn toàn, OpenGL có thể yêu cầu hệ thống sử dụng thêm sức mạnh phần mềm để xử lý
Trang 27Tiêu chuẩn OpenGL nhận các nguyên hàm hình học như điểm, đường thẳng và đa giác rồi chuyển thành các điểm đồ họa (pixel) trên màn hình Quátrình này được thực hiện thông qua luồng ống dẫn đồ họa (thuật ngữ graphics pipeline) Một tên gọi khác của OpenGL cũng được giới kỹ thuật chia sẻ đó là
bộ máy trạng thái OpenGL
Trang 28TÀI LIỆU THAM KHẢO
[1] Edward Angel, Dave Shreiner (2019), Interactive Computer Graphics,
Addison-Wesley, 6th Edition
[2] Peter Shirley, Steve Marschner (2009), Fundamentals Of Computer
Graphics, A K Peters/CRC, 3 Edition.
[3] Dave Shreiner, Graham Sellers, John M Kessenich, Bill M Licea-Kane
(2013), OpenGL Programming Guide, Addison-Wesley, 8th Edition.
[4] Foley,Van Dam (1995), Computer Graphics Principles And Practice In C,
Ed Addison Wesley, 2Nd Edition