CẤU TRÚC LUẬN VĂN Ngoài phần mở đầu và kết luận, luận văn được tổ chức thành ba chương: Chương 1: Cơ sở lý thuyết Ở chương này giới thiệu về thư viện đồ họa OpenGL ES 2.0, các khái niệ
Trang 1KHOA TIN HỌC
Đề tài:
XÂY DỰNG GAME HIGHWAY
BẰNG OPENGL ES 2.0
Sinh viên thực hiện : Nguyễn Thị Ngọc Thúy
Lớp : 10CNTT4
Đà Nẵng,
Trang 2LỜI CẢM ƠN
Lời đầu tiên em xin bày tỏ lòng biết ơn sâu sắc đến tất cả quý thầy cô khoa Tin học trường đại học Sư phạm – Đại học Đà Nẵng đã tận tình dạy dỗ, truyền đạt cho em những kiến thức quý giá trong suốt những năm học tại trường, là tiền
đề và cơ sở giúp cho em thực hiện đồ án này
Xin chân thành cảm ơn cô Lê Thị Bích Hồng đã tận tình chỉ bảo, hướng dẫn
và giúp đỡ cho em trong suốt quá trình thực hiện để hoàn thành đồ án này đúng thời hạn
Trong suốt quá trình thực hiện đồ án, mặc dù đã cố gắng hết mình để hoàn thành, tuy nhiên, do kinh nghiệm và vốn kiến thức còn hạn chế nên không tránh khỏi những thiếu sót Em rất mong nhận được sự góp ý, nhận xét của các thầy cô và các bạn
Em xin chân thành cảm ơn !
Sinh viên
Nguyễn Thị Ngọc Thúy
Trang 3LỜI CAM ĐOAN
Em xin cam đoan:
1 Những nội dung trong báo cáo này là do em thực hiện dưới sự hướng dẫn trực tiếp của cô Lê Thị Bích Hồng
2 Mọi tham khảo dùng trong báo cáo này đều được trích dẫn rõ ràng tên tác giả, tên công trình, thời gian và địa điểm công bố
3 Mọi sao chép không hợp lệ, vi phạm quy chế đào tạo, hay gian trái, em xin chịu hoàn toàn trách nhiệm
Sinh viên thực hiện
Nguyễn Thị Ngọc Thúy
Trang 4
MỤC LỤC
MỞ ĐẦU 1
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 3
1.1 Giới thiệu về thư viện đồ họa OpenGL 3
1.1.1 OpenGL là gì? 3
1.1.2 Cấu trúc lệnh trong OpenGL 4
1.2 Giới thiệu về thư viện đồ họa OpenGL ES 4
1.2.1 OpenGL ES là gì? 4
1.2.2 Hệ trục tọa độ và thiết bị chuẩn NDC 5
1.3 Các khái niệm đồ họa cơ bản 5
1.4 Mô hình đường ống – Quá trình vẽ tam giác 7
1.4.1 Mô hình đường ống 7
1.4.2 Quá trình vẽ tam giác 7
1.5 Các thành phần cơ bản đối tượng 10
1.5.1 Shader 10
1.5.2 Model 13
1.5.3 Texture 14
1.6 Các phép biến đổi Affine trong 3D 14
1.6.1 Hệ tọa độ đồng nhất 14
1.6.2 Phép biến đổi tịnh tiến 15
1.6.3 Phép biến đổi quay quanh trục 15
1.6.4 Phép biến đổi tỉ lệ 16
1.6.5 Thứ tự các phép biến đổi 17
1.6.6 Phép chiếu 18
1.7 Hệ tọa độ 3D và đối tượng camera 19
1.7.1 Hệ tọa độ 3D 19
1.7.2 Hệ tọa độ đối tượng 20
1.7.3 Hệ tọa độ thế giới thực 20
1.7.4 Hệ tọa độ camera 21
Trang 51.8 Tổng quan về Android 23
1.8.1 Android là gì? 23
1.8.2 Các tính năng mở của Android 23
1.8.3 Một số phiên bản của Android 23
CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ GAME HIGHWAY 25
2.1 Kịch bản của game 25
2.2 Phân tích yêu cầu 25
2.3 Đặc tả chức năng của game 26
2.3.1 Biểu đồ Use case 26
2.3.2 Mô tả Actor 27
2.4 Xây dựng game engine 27
2.4.1 Trạng thái game và vòng lặp game 27
2.4.2 Xây dựng cấu trúc game 29
2.4.3 Xử lý va chạm giữa các đối tượng 35
2.5 Xây dựng cầu nối của game trên Windows và Android 36
2.5.1 Trên Windows 36
2.5.2 Trên Android 37
2.5.3 Port từ C++ qua Android 39
CHƯƠNG 3: MỘT SỐ KẾT QUẢ ĐẠT ĐƯỢC 41
KẾT LUẬN 45
TÀI LIỆU THAM KHẢO 46
PHỤ LỤC 47
Trang 6DANH SÁCH TỪ VIẾT TẮT
1 API Viết tắt của Application Programming Interface
có nghĩa là các phương thức lập trình ứng dụng
2 Game Các trò chơi nói chung trên các thiết bị điện tử
3 Game Engine Mô hình thiết kế, xây dựng các thành phần cần
thiết để xây dựng một game hoàn chỉnh
4 3D, 2D Không gian ba chiều hoặc hai chiều
5 OpenGL Một thư viện lập trình đồ họa 3D và 2D
6 OpenGL ES Một thư viện lập trình đồ họa 2D, 3D dành cho
11 Shader Một loại chương trình dùng để xử lý các đỉnh
hoặc phân mảnh cho GPU hoạt động
12 Vertex Đỉnh của tam giác
13 Fragment Phân mảnh các mặt
14 GLUT Glut là 1 thư viện cung cấp các hàm để tạo cửa
sổ Window cho chương trình
15 NDC Là môi trường thiết bị chuẩn (NDC: Normal
Device Context)
Trang 7DANH MỤC CÁC HÌNH ẢNH
Hình 1: Sự khác nhau giữa quy tắc bàn tay trái và bàn tay phải 5
Hình 2: Tọa độ trong NDC 5
Hình 3: Hệ màu RGB 6
Hình 4: Mô hình đường ống trong OpenGL ES 2.0 7
Hình 5: Quá trình lắp ráp các đỉnh 8
Hình 6: Biên dịch Biên dịch Vertex shader và Fragment shader 13
Hình 7: Mô hình 3D 13
Hình 8: Kết hợp mô hình với hình ảnh tạo ra nhân vật 14
Hình 9: Tịnh tiến một điểm 15
Hình 10: Phép quay quanh trục 16
Hình 11: Phép chiếu tỉ lệ 17
Hình 12: Áp dụng phép quay sau đó áp dụng phép biến đổi tỷ lệ 17
Hình 13: Áp dụng phép biến đổi tỷ lệ trước khi áp dụng phép biến đổi quay 17
Hình 14: Áp dụng phép biến đổi tịnh tiến trước khi quay 18
Hình 15: Áp dụng phép biến đổi quay trước khi tịnh tiến 18
Hình 16: Hình ảnh phép chiếu phối cảnh 19
Hình 17: Hình ảnh phép chiếu vuông góc 19
Hình 18: Hệ trục tọa độ 20
Hình 19: Đối tượng trong hệ tọa độ của nó 20
Hình 20: Đối tượng trong hệ tọa độ thế giới thực 21
Hình 21: Các đối tượng trong thế giới thực dưới góc nhìn của camera 22
Hình 22: Sơ đồ biến đổi đối tượng vào NDC 22
Hình 23: Sơ đồ Use case 26
Hình 24: Mô hình chuyển đổi trạng thái game 28
Hình 25: Vòng lặp game 29
Hình 26: Cấu trúc game engine 30
Hình 27: Lớp dẫn xuất cơ bản của lớp Object 30
Hình 28: Sơ đồ cấu trúc mối quan hệ giữa Resource manager và Scene manager 32
Hình 29: Lớp dẫn xuất của lớp game state 34
Hình 30: Khối hộp bao quanh đối tượng 35
Trang 8DANH MỤC CÁC BẢNG
Bảng 1: Một số kiểu dữ liệu trong OpenGL 4
Bảng 2: Một số kiểu dữ liệu cơ bản 10
Bảng 3: Bảng phân loại biến 11
Bảng 4: Đặc tả Actor 27
Bảng 5: Đặc tả Use case 27
Trang 9MỞ ĐẦU
1 LÝ DO CHỌN ĐỀ TÀI
Ngày nay ngành công nghệ phần mềm đang phát triển và ngành công nghiệp phần mềm trên điện thoại di động cũng không nằm ngoài xu thế đó Có thể nói ngành công nghiệp phần mềm còn khá non trẻ Vì vậy việc nghiên cứu và phát triển các ứng dụng trên di động là rất cần thiết
Trong các loại hình giải trí thì game mang lại nhiều lợi nhuận tương đối cao Game là một lĩnh vực luôn có nhu cầu rất cao và thu hút một lượng lớn người dùng không phân biệt độ tuổi
Để hiểu rõ được các kỹ thuật phát triển game trên thiết bị di động, đặc biệt
là xây dựng đồ họa 3D phục vụ nhu cầu học tập và giải trí cho bản thân tôi chọn
đề tài: “Xây dựng game Highway bằng OpenGL ES 2.0”
2 MỤC ĐÍCH CỦA ĐỀ TÀI
- Cũng cố lại các kiến thức đã học về lập trình hướng đối tượng với ngôn ngữ C++, phân tích thiết kế bài toán, trí tuệ nhân tạo, phân tích thiết kế hướng đối tượng…
- Nghiên cứu và tìm hiểu một số nền tảng thông dụng như Windows, Android
- Nghiên cứu các kỹ thuật lập trình đồ họa 3D và thực hiện trên thư viện lập trình đồ họa Opengl ES
- Nghiên cứu cấu trúc game, từ đó xây dựng một game hoàn chỉnh
3 PHƯƠNG PHÁP NGHIÊN CỨU
- Tìm kiếm thông tin liên quan tới quá trình nghiên cứu từ thực tiễn, sách báo, tham khảo Internet
- Tìm hiểu các thư viện đồ họa 3D trong OpenGL ES
- Tìm hiểu các kỹ thuật lập trình trong quá trình thực tập tại công ty Gameloft
Trang 104 Ý NGHĨA KHOA HỌC THỰC TIỄN
- Đề tài góp phần nghiên cứu và tạo ra một game nhỏ trên cơ sở game engine xây dựng được
- Làm nguồn tư liệu cho các bạn sinh viên, các lập trình viên muốn tham gia tìm hiểu quá trình xây dựng một game đơn giản
5 CẤU TRÚC LUẬN VĂN
Ngoài phần mở đầu và kết luận, luận văn được tổ chức thành ba chương:
Chương 1: Cơ sở lý thuyết
Ở chương này giới thiệu về thư viện đồ họa OpenGL ES 2.0, các khái niệm
đồ họa cơ bản, các thành phần cơ bản của đối tượng, các phép biến đổi Affine trong 3D Sau đó áp dụng những lý thuyết này để xây dựng game bằng cách vẽ các đối tượng ra màn hình một cách phù hợp
Chương 2: Phân tích thiết kế game Highway
Ở chương này trình bày kịch bản của game, phân tích yêu cầu đặc tả chức năng từ đó xây dựng game engine, xây dựng cầu nối của game trên Windows và Android
Chương 3: Một số kết quả đạt được
Trình bày được một số hình ảnh tiêu biểu của game Highway
Trang 11CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
1.1 GIỚI THIỆU VỀ THƯ VIỆN ĐỒ HỌA OPENGL [1]
OpenGL hỗ trợ các hàm đồ họa:
- Xây dựng các đối tượng phức tạp từ các thành phần hình học cơ bản
(điểm, đoạn, đa giác, ảnh bitmap)
- Sắp xếp đối tượng trong 3D và chọn điểm thuận lợi để quan sát
- Tính toán màu sắc của các đối tượng (màu sắc của đối tượng được quy
định bởi điều kiện chiếu sáng, texture của đối tượng, mô hình được xây dựng hoặc là kết hợp của cả 2 hoặc 3 yếu tố đó)
- Biến đổi những mô tả toán học của đối tượng và thông tin màu sắc thành
phần các pixel trên màn hình (quá trình này được gọi là rasterization)
- Có API đa nền tảng: Windows, Mac, Linux, Unix
Các hệ thống dùng để nhúng:
- Iphone, Windows mobile…
Dùng cho đa ngôn ngữ:
- C, C++, Python, Ruby, PHP…
Dùng cho cả cách vẽ trong 2D và 3D
Những thứ OpenGL không hỗ trợ:
Trang 12- Bản thân OpenGL không có sẵn các hàm nhập xuất hay thao tác trên
window
- OpenGL không có sẵn các hàm cấp cao để xây dựng các mô hình đối
tượng, thay vào đó, người dùng phải tự xây dựng từ các thành phần hình học cơ bản (điểm, đoạn thẳng, đa giác)
1.1.2 Cấu trúc lệnh trong OpenGL
OpenGL sử dụng tiền tố gl và tiếp theo đó là những từ những từ được viết hoa ở chữ cái đầu để tạo nên tên của một lệnh, ví dụ glClearColor() Tương tự, OpenGL đặt tên các hằng số bắt đầu bằng GL_ và các từ tiếp sau đều được viết hoa và cách nhau bởi dấu ’_’ , Ví dụ: GL_COLOR_BUFFER_BIT
Bên cạnh đó, với một số lệnh, để ám chỉ số lượng cũng như kiểu tham số được truyền, một số hậu tố được sử dụng như trong bảng sau:
n 1: Một số kiểu dữ liệu trong OpenGL
1.2 GIỚI THIỆU VỀ THƯ VIỆN ĐỒ HỌA OPENGL ES
1.2.1 OpenGL ES là gì?
OpenGL ES là một bản rút gọn của OpenGL dành cho các thiết bị di động
và cầm tay, có cấu hình yếu, có khả năng chạy trên nhiều nền tảng, và tương thích với nhiều ngôn ngữ khác nhau
Trong đồ án này, sử dụng OpenGL ES 2.0 để nghiên cứu và phát triển Tất
cả các vấn đề được đề cập đến sau này được mặc định trong OpenGL ES 2.0
Trang 131.2.2 Hệ trục tọa độ và thiết bị chuẩn NDC
Theo truyền thống, OpenGL sử dụng quy tắc bàn tay phải để biểu diễu các điểm, vector
H nh 1: Sự khác nhau iữa quy tắc bàn tay trái và bàn tay ph i
NDC là thiết bị điều phối chuẩn, sử dụng quy tắc bàn tay trái (Ngược với OpenGL) được giới hạn trong một hình lập phương (Xem hình 1.2)
Trang 14 Màu sắc, kênh màu và hệ màu
Một màu sắc được tạo thành từ 3 màu cơ bản, tập hợp 3 màu cơ bản để tạo ra các màu sắc còn lại gọi là một hệ màu, mỗi màu cơ bản trong một hệ màu như vậy gọi là một kênh màu, một kênh màu được lưu trữ bằng 1 byte có giá trị từ 0 255
H nh 3: Hệ màu RG
Trang 151.4 MÔ HÌNH ĐƯỜNG ỐNG – QUÁ TRÌNH VẼ TAM GIÁC [4]
Kiểm tra độ sâu sớm
Fragment shader
Xử lý các phân mảnh
- Kiểm tra giá trị alpha
- Kiểm tra độ sâu
- Kiểm tra vùng thiết lập
Gán giá trị thuộc tính tọa độ của các đỉnh sau khi đã biến đổi cho biến gl_Position để vẽ ra màn hình Các thuộc tính và các hằng của các đỉnh cần sử dụng cho giai đoạn Fragment shader sẽ được gán cho một biến varying
Đầu ra của quá trình này chính là gl_Position và các varying được khai báo và sử dụng ở trên Vertex shader sẽ được gọi để xử lý cho mỗi đỉnh được truyền vào
Quá trình lắp ráp
Trang 16Quá trình này sẽ tiến hành gom các đỉnh theo thứ tự để tạo thành các thành phần hình học cơ bản như điểm, đường thẳng hay tam giác
H nh 5: Quá tr nh lắp ráp các đỉnh
Loại bỏ các vùng ngoài hệ tọa độ NDC
Sau khi biến đổi ở vertex shader sẽ có những đỉnh nằm ngoài hệ tọa độ của NDC Quá trình sẽ cắt bỏ các đỉnh và dữ liệu các đỉnh nằm ngoài tọa độ của NDC
Xét mặt trước mặt sau
Nhằm mục đích tối ưu các đối tượng được vẽ, quá trình này sẽ loại bỏ các mặt nằm ở mặt sau (mặt bị che khuất), chỉ giữ lại các mặt ở trước (mặt sẽ nhìn thấy)
Nội suy tuyến tính
Quá trình này sẽ dựa vào các varying của mỗi đỉnh đã được khai báo ở Vertex shader, để tính toán nội suy các giá trị varying tương ứng cho mỗi fragment được tạo ra từ quá trình rời rạc hóa ở trên Ví dụ như màu sắc, tọa
độ
Trang 17 Kiểm tra độ sâu sớm
Phép kiểm tra thông dụng nhất là kiểm tra độ sâu (Depth Test) Theo đó, trên cùng một tia chiếu, những điểm nằm ở xa sẽ bị che khuất bởi những điểm nằm gần hơn (nếu có) Tùy theo thiết bị, việc kiểm tra độ sâu này có thể được thực hiện trước (Early Depth Test) hoặc sau khi gọi Fragment Shader Ngoài việc đảm bảo hiệu ứng gần-xa, kiểm tra độ sâu sớm còn có lợi ích giảm số
lượng phân mảnh cần xử lý và do đó tăng tốc độ tính toán
Fragment shader sẽ được gọi một lần cho một phân mảnh được tạo ra Khi vẽ một tam giác với ba đỉnh thì có rất nhiều phân mảnh, nên Fragment shader sẽ được gọi rất nhiều lần Do đó, cần hạn chế những tính toán không cần thiết trong Fragment shader
Kiểm tra
Quá trình này sẽ kiểm tra lại một số ràng buộc, phân mảnh nào không thõa mãn sẽ bị loại và không được vẽ ra màn hình sau quá trình Fragment shader
Trộn màu
Một phân mảnh nếu có độ trong suốt (alpha) thì thường không thể che khuất hoàn toàn những phân mảnh nằm sau nó Khi đó, màu của nó sẽ được pha trộn với màu của các phân mảnh nằm phía sau Thao tác này gọi là pha màu và là thao tác không bắt buộc
Trang 18Tương ứng với hai giai đoạn Vertex shader và Fragment shader ở mô hình đường ống ta có hai loại shader tương ứng:
Vertex shader: là shader chuyên làm nhiệm vụ biến đổi toạ độ (quay, tịnh tiến, co giãn, chiếu, ) và thông tin của các đỉnh đầu vào
Fragment shader: là shader chuyên làm nhiệm vụ tính toán các hiệu ứng màu sắc cho các phân mảnh
Ngôn ngữ lập trình shader
Ngôn ngữ sử dụng để lập trình shader gọi là GLSL (viết tắt của OpenGL Shading Language) được thiết kế dựa trên ngôn ngữ C hỗ trợ xử lý số thực dấu chấm động sử dụng để xử lý các hiệu ứng đồ họa
3 vec2, vec3, vec4, ivec2, ivec3,
ivec4
Kiểu struct float, struct int
4 mat2, mat3, mat4 Kiểu ma trận
5 sampler2D, samplerCube Kiểu dữ liệu đặc biệt liên qua đến hình
ảnh
n 2: Một số kiểu dữ liệu cơ b n
Trang 19STT Loại Mô tả
1 attribute Dành cho các biến toàn cục ở Vertex shader, để nhận dữ liệu là
các thuộc tính của mỗi đỉnh được truyền từ RAM sang VRAM
2 uniform Dành cho các biến toàn cục ở cả Vertex shader và Fragment
shader, để nhận dữ liệu là các hằng của tất cả các đỉnh của một đối tượng được truyền từ RAM sang VRAM
3 varying Dành cho các biến toàn cục, dùng để tính toán nội suy giữa các
đỉnh
n 3: B n phân loại biến
Ngôn ngữ GLSL cung cấp sẵn các hàm tính toán liên quan đến vector,
ma trận để hỗ trợ việc lập trình và biến đổi
Cách truyền thông tin vào shader
Để truyền dữ liệu từ RAM sang VRAM cho shader xử lý ta làm các bước sau:
Bước 1: Khai báo sử dụng chương trình bằng lệnh:
glUseProgram(program);
Bước 2: Lấy vị trí của thuộc tính hoặc hằng cần truyền trong chương
trình
Bước 3: Truyền dữ liệu vào cho thuộc tính hoặc hằng thông qua vị trí
Trang 20attribute vec3 a_position;
attribute vec2 a_uv;
uniform mat4 u_WVP;
varying vec2 v_uv;
precision mediump float;
uniform sampler2D u_texture0;
varying vec2 v_uv;
Trang 21H nh 6: iên dịch iên dịch Vertex shader và Fra ment shader
Sau khiên biên dịch Vertex shader và Fragment shader ta sẽ có một biến lưu trữ chương trình đó Để sử dụng chương trình này để vẽ ta sử dụng câu
Trang 22Để lấy được các thông tin trên từ file nfg hoặc obj ta đọc lần lượt các
thông tin của các vertex và các fragment đưa vào hai mảng buffer
Cần xác định vị trí cần vẽ lên màn hình
Đưa về phép chiếu phối cảnh
Công việc thiết kế mô hình này thường được các họa sĩ thực hiện, sau đó chúng ta sẽ đọc thông tin các đỉnh của mô hình rồi truyền vào shader để thực hiện vẽ
1.5.3 Texture
Hình ảnh được áp dụng cho một mô hình nào đó để tạo nên một đối tượng 3D hoàn chỉnh
H nh 8: Kết hợp mô h nh với h nh nh tạo ra nhân vật
Kích thước dài, rộng của một hình ảnh thường phải là một số mũ của 2 Đối với những hình ảnh có kích thước khác có thể sẽ không được hiển thị trên một số GPU
1.6 CÁC PHÉP BIẾN ĐỔI AFFINE TRONG 3D [2]
1.6.1 Hệ tọa độ đồng nhất
Hệ tọa độ đồng nhất cho phép các biến đổi Affine có thể được biểu diễn trong một ma trận Một điểm n chiều được biểu diễn trong không hệ tọa độ đồng
Trang 23nhất thành n + 1 chiều Trong hệ tọa độ đồng nhất, hai tọa độ tỉ lệ với nhau cùng xác định 1 điểm
Ví dụ: P(x, y, z) là một điểm trong không gian 3 chiều thì được biểu diễn trong hệ tọa độ đồng nhất là P(x, y, z, w) (Với w = 1.0)
1.6.2 Phép biến đổi tịnh tiến
Phép biến đổi tịnh tiến được mô tả bằng cách di chuyển 1 điểm P qua một tọa độ khác P’ trong không gian
H nh 9: Tịnh tiến một điểm
Biểu diễn biến đổi tịnh tiến bằng ma trận:
Chú ý: Đối với biểu diễn vector, người ta luôn quy ước điểm đầu của vector luôn trùng với gốc tọa độ Thực tế thì phép tịnh tiến sẽ không làm thay đổi vector, vì vậy để đảm bảo giá trị vector không bị thay đổi bởi phép tịnh tiến với 1 vector 3 chiều (x, y, z) thì được biễu diển trong hệ tọa độ đồng nhất là (x, y, z, 0)
1.6.3 Phép biến đổi quay quanh trục
Phép biến đổi quay quanh trục được mô tả bằng cách quay một điểm P theo các trục của tọa độ qua một điểm P’ trong không gian
Trang 24H nh 10: Phép quay quanh trục
Biểu diễn quay quanh trục Ox qua ma trận:
Biểu diễn quay quanh trục Oy qua ma trận:
1.6.4 Phép biến đổi tỉ lệ
Qua phép chiếu tỷ lệ thì làm một hình nhỏ có thể to lên và hình to có thể nhỏ đi trong không gian
Trang 25H nh 11: Phép chiếu tỉ lệ
Biểu diễn phép tỉ lệ qua ma trận:
[Px’, Py’, Pz’, Pw’] = [Px, Py, Pz, Pw] * [
]
H nh 12: Áp dụn phép quay sau đó áp dụn phép biến đổi tỷ lệ
Khi thực hiện phép tỷ lên trước các trục của vật không thay đổi nên khi thực hiện phép quay sẽ đúng
H nh 13: Áp dụn phép biến đổi tỷ lệ trước khi áp dụn phép biến đổi quay
Trang 26 Khi một đối tượng bị ảnh hưởng bởi phép biến đổi quay với phép biến đổi tịnh tiến thì:
Nếu thực hiện phép biến đổi tịnh tiến trước thì tâm của vật đã bị thay đổi
so với ban đầu nên khi thực hiện phép biến đổi quay thì vật vẽ sẽ bị sai
H nh 14: Áp dụn phép biến đổi tịnh tiến trước khi quay
Nếu thực hiện phép biến đổi quay trước rồi biến đổi tịnh tiến thì phép biến đổi sẽ đúng vì phép quay thực hiện trước không làm thay đổi tâm của vật so với ban đầu
H nh 15: Áp dụn phép biến đổi quay trước khi tịnh tiến
Phép biến đổi quay theo ba trục Ox, Oy, Oz
Đối với phép quay quay ba trục Ox, Oy, Oz sẽ tiến hành quay theo quy tắc “roll-pitch-yaw” tức là quay theo trục Oz trước, đến trục Ox, đến trục
Như ta đã biết, các vật chỉ được vẽ ra nếu các đỉnh nằm trong NDC, tức là
có độ lớn nằm trong đoạn 0 1, trong khi các mô hình đối tượng được thiết kế một cách tự nhiên không bị giới hạn
Trang 27Các vật và khung cảnh ta nhìn thấy là trong thế giới thật không gian ba chiều, nhưng thiết bị hiển thị là không gian hai chiều Phép chiếu giúp chúng ta biến đổi các vật, khung cảnh từ không gian ba chiều có thể biểu diễn trên không gian hai chiều vào nằm trong NDC nếu nằm trong khoảng nhìn thấy Có hai loại phép chiếu thường được sử dụng: Phép chiếu vuông góc và chiếu xuyên tâm hay chiếu phối cảnh
Phép chiếu phối cảnh cho ta cảm giác các vật ở trong không gian 3D Các vật ở gần thì sẽ nhìn thấy to hơn các vật ở xa
Trang 28H nh 18: Hệ trục tọa độ
1.7.2 Hệ tọa độ đối tượng
Là hệ tọa độ ban đầu để thiết kế các đối tượng, biễu diễn sự tương quan giữa các thành phần, các mặt tạo nên đối tượng bao gồm các thuộc tính của các đỉnh như: tọa độ, vector pháp tuyến, texcoord
H nh 19: Đối tượn tron hệ tọa độ của nó
1.7.3 Hệ tọa độ thế giới thực
Là hệ tọa độ được dùng để biểu diễn đối tượng về vị trí, tỉ lệ, hướng của vật trong thế giới thực
Trang 29H nh 20: Đối tượng trong hệ tọa độ thế giới thực
Để biễu diễn một vật trong thế giới thực hay trong hệ tọa độ thế giới thực ta
mô tả đối tượng dựa vào ba thông số: vị trí, tỉ lệ theo ba trục x, y, z và hướng quay theo ba trục x, y, z Từ ba giá trị này ta xác định được ma trận W biến đổi đối tượng vào thế giới thực
W = S(x, y, z) * Rz (a) * Rx (b) * Ry (c) * T(x, y, z)
1.7.4 Hệ tọa độ camera
Các đối tượng trong thế giới thực được quan sát bởi một đối tượng đặc biệt gọi là camera Tùy vào vị trị, hướng nhìn (không cần thiết phóng to thu nhỏ đối tượng camera) của camera ta sẽ vị trí tương đối giữa các vật so với camera sẽ khác nhau
Để biểu diễn camera trong thế giới thực ta dùng ma trận W của nó được tính theo công thức tương tự:
W = Rz (a) * Rx (b) * Ry(c) * T(x, y, z)