Khóa luận Nghiên cứu và xây dựng thử nghiệm 3D Engine - Phần 10

Trên cơsởnhững gì đã tìm hiểu và nắm bắt được từcông nghệShaders trên

phần cứng, chúng em đã tìm cách triển khai công nghệnày đểphát triển một 3D

Engine mới độc lập, thích hợp cho nhiều loại ứng dụng. Đểtăng cường tính năng đồ

họa cho Engine, chúng em cũng đã nghiên cứu rất nhiều thuật toán Vertex Shader

và Pixel Shader nhưShadow Volume, per-pixel lighting và bước đầu đã có

những kết quảrất khảquan. 3D Engine được chúng em phát triển trên cơsởtìm

hiểu và phân tích nhiều khía cạnh của Engine nhưphân tích vềmặt cấu trúc, phân

tích cách phát triển thưviện độc lập theo module do đó Engine này có thểdễ

dàng được nâng cấp và có thểdùng lại cho nhiều ứng dụng đầu cuối khác nhau.

pdf13 trang | Chuyên mục: Mạng Máy Tính | Chia sẻ: dkS00TYs | Lượt xem: 1686 | Lượt tải: 0download
Tóm tắt nội dung Khóa luận Nghiên cứu và xây dựng thử nghiệm 3D Engine - Phần 10, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
Engine vật lý Novodex 
+ Save as triangles: Lưu tập tin dạng đa giác 
+ Save as convex: Lưu tập tin dạng convex 
+ Generate convex: Tự tạo tập tin convex từ các đa 
giác đầu vào. 
+ Cook it!: Lưu vào tập tin 
6 
Thuộc tính bổ sung khi chọn chức năng Save as 
triangles 
+ Generate PMap: Tạo thêm tập tin chứa dữ liệu 
PMap 
+ Use as height field: Dùng đối tượng như dạng địa 
hình 
+ Height extent: Độ sâu của địa hình (nếu dùng Use 
as height field) 
B. Các chương trình hỗ trợ thiết kế Vertex Shader và Pixel Shader 
 ATI RenderMonkey IDE (www.ati.com) 
 ATI RenderMonkey là ứng dụng IDE giúp người lập trình và người thiết kế có 
thể thiết kế các phương pháp dựng hình (dùng Vertex và Pixel Shader) hoàn toàn 
độc lập với ứng dụng. Giao diện chương trình ATI RenderMonkey IDE 
 - 147 - 
 NVIDIA FX Composer (www.nvidia.com) 
 NVIDIA FX Composer giúp người lập trình thiết kế Vertex Shader và Pixel 
Shader trên nền của định dạng tập tin Effect (FX file). Giao diện của NVIDIA FX 
Composer: 
 - 148 - 
C. Engine vật lý NovodeX 
 Sơ lược về NovodeX: 
 NovodeX là Engine vật lý của công ty NVIDIA. NovodeX là một hệ thống vật 
lý được xây dựng thành từng gói riêng biệt nhằm tạo sự dễ dàng trong việc sử dụng 
và tích hợp với các Engine khác để tạo nên một Game hoàn chỉnh. 
 NovodeX xử lý hầu hết các vấn đề cơ bản của vật lý cổ điển như vị trí, vận tốc, 
gia tốc, momen, lực, chuyển động quay, năng lượng, động lượng, ma sát, độ nảy, va 
chạm. NovodeX cho phép chúng ta mô phỏng rất nhiều các thiết bị, cơ cấu, máy 
móc, mô hình khác nhau. 
 Quá trình phát triển của NovodeX: 
• Ngày 25/8/2002 phiên bản đầu tiên 1.4 ra đời. 
• Ngày 3/10/2002 phiên bản 1.41 với các chức năng quản lý bộ nhớ, kèm một 
số tài liệu và dự án mẫu. 
• Ngày 8/10/2002 phiên bản 1.42 có sửa các lỗi về cài đặt. 
• Ngày 15/10/2002 phiên bản 1.43 có thêm nhiều tài liệu hướng dẫn, chỉnh sửa 
một số demo. 
• Ngày 30/10/2002 phiên bản 1.44 ra đời, đây là phiên bản có nhiều đổi mới 
như thêm kiểm tra va chạm mesh-mesh, mesh-plane, … Và sửa các lỗi trong 
tài liệu. 
• Ngày 2/12/2002 phiên bản 1.45 thêm các hàm trong sử lý đối tượng. 
• Ngày 9/1/2003 phiên bản 1.51. 
• Ngày 21/2/2003 phiên bản 1.6 sửa và thêm các chức năng trong viewer, 
Collision SDK, Rigid Body SDK. 
• Ngày 1/6/2003 phiên bản 1.8 tiếp tục phát triển tiếp về các thành phần đang 
phát triển dở dang trong phiên bản 1.6. 
 - 149 - 
• Ngày 7/7/2003 phiên bản 1.91 với hàng loạt chỉnh sửa và thay đổi trong 
Foundation SDK, công cụ hỗ trợ và thêm các demo về bánh xe răng cưa. 
• Ngày 19/2/2004 phiên bản 2.02 viết lại hầu hết tài liệu kĩ thuật. 
• Ngày 8/4/2004 phiên bản 2.03 
• Ngày 15/5/2004 phiên bản 2.1. 
• Ngày 15/7/2004 phiên bản 2.1.1. 
• Ngày 8/11/2004 phiên bản 2.1.2 
• Ngày 21/3/2005 phiên bản 2.2 ra đời với nhiều sự thay đổi về cấu trúc như 
gộp Foundation.dll vào trong physicSDK. Thêm các chức năng về điều khiển 
nhân vật cùng với các demo. 
 Đơn vị sử dụng trong NovodeX: 
 NovodeX không sử dụng một đơn vị đặc biệt nào trong thế giới thực. Do đó điều 
quan trọng là chúng ta xác định được sự chuyển đổi từ đơn vị thực vào trong ứng 
dụng. NovodeX SDK sử dụng các số đo không có đơn vị để đo 3 đại lượng cơ bản 
là khối lượng, chiều dài và thời gian do đó ta có thể định nghĩa 3 đại lượng này theo 
bất kì đơn vị nào ta muốn. Thông thường ta dùng sử dụng các đơn vị như kilogam 
cho khối lượng, met cho chiều dài, và giây cho thời gian. Các đơn vị của các đại 
lượng khác sẽ được xác định dựa trên đơn vị của 3 đại lượng trên ví dụ như đơn vị 
vận tốc sẽ là đơn vị theo chiều dài/đơn vị theo thời gian. 
 Cũng như bất cứ phần mềm sử dụng các số học nào, NovodeX mặc định sử dụng 
các số dấu chấm động đơn (single) nên chúng ta phải chú ý luôn giữ các số trong 
một khoảng giá trị thích hợp để NovodeX làm việc đúng đắn. 
 Các actor: 
 Trong NovodeX các actor là yếu tố chính trong một màn. Một actor có thể đóng 
một trong 2 vai trò là actor tĩnh hoặc actor động. Mỗi actor có thể mang nhiều hình 
(shape) khác nhau trong nó. Ví dụ một actor là chiếc xe có thể có nhiều hình như 
 - 150 - 
đầu xe, thân xa, các bánh xe. Chúng ta cần phải đảm bảo rằng các hình trong cùng 
một actor không xung đột và chạm lẫn nhau. 
 Thông thường các actor tĩnh có nhiệm vụ phát hiện va chạm là chính do đó ta 
cần phải thêm các hình vào cho nó. Còn các actor tĩnh ta thì có thể dùng để đại diện 
cho một điểm trong lượng nào đó do đó ta có thể không cần thêm các hình vào 
trong nó. Và một loại actor nữa là actor động học (kindmatic), đây là một loại actor 
đặc biệt của kiểu actor động được di chuyển trực tiếp bởi người sử dụng. 
 Các khớp: 
 Nếu không có các khớp và các hình thì actor làm được rất ít việc. Các khớp 
được cung cấp để nối các actor lại với nhau. Các khớp làm cho các actor kết nối với 
nhau cùng di chuyển theo một qui định nào đó. Trong NovodeX cung cấp cho 
chúng ta nhiều loại khớp các nhau để kết nối các actor, mỗi khớp sẽ được dùng kết 
nối các actor theo mục đích sử dụng của ta. Các loại khớp của NovodeX cung cấp: 
• Khớp cầu (spherical joint): 
Đây là loại khớp đơn giản nhất. Nó gắn 2 điểm hay 2 
thành phần khớp với nhau. Một ví dụ ta sử dụng khớp 
cầu là khớp vai của một cơ thể. Tất nhiên chúng ta có 
thể giới hạn lại góc quay cho khớp cầu này. 
• Khớp bao ở ngoài theo 1 trục (revolute joint): 
Đây là khớp mà ta chỉ có thể xoay theo một hướng duy 
nhất. Do đó ta cần phải xác định điểm kết nối và vector 
quay cho khớp này. Các điểm nằm trên chiều dài dọc theo 
vector hướng sẽ không được xét đến trong loại khớp nối 
này. Một ví dụ của khớp nối này là ta dùng như bản lề kết 
nối cánh cửa với tường nhà. 
 - 151 - 
• Khớp trụ (cylindrical joint): 
Khớp nối trụ cho phép 2 đối tượng cùng xoay với nhau theo 
một trục nhất định mà thôi. Và 2 đối tượng kết nối này sẽ cùng 
quay một góc nhau nhau. 
Một ví dụ sử dụng loại trục này là cây anten của tivi hoặc máy 
thu âm. 
• Khớp lăng trụ (prismatic joint): 
Khớp này giống như khớp trụ ở chỗ nó cùng cho 2 đối tượng 
cùng xoay theo một trục nhất định chỉ có điểm khác biệt là nó 
không đảm bảo 2 góc quay của 2 vật là như nhau. 
Ví dụ vì khớp trục là ta dùng trong phụt nhún làm giảm xốc cho 
xe. 
• Khớp với điểm nối trên đường: 
Điểm nối trên khớp đường đảm bảo điểm kết nối của một vật 
chi di chuyển trên một đường định trước trên vật kia. Ta cần 
các định điểm bắt đầu và vector hướng khi khởi tạo kết nối. 
Một ví dụ có thể dùng loại khớp này là cái giây treo đồ và đồ 
treo. 
• Khớp với điểm nối trên mặt phẳng: 
Loại khớp này cho phép ta kết nối 2 vật thể với 
điểm tiếp xúc của vật thể này sẽ di chuyển 
trong một mặt phẳng của vật thể khác. Khi 
khởi tạo cần xác định điểm đầu tiên và vector 
pháp tuyến của mặt phẳng. 
Ví dụ như một bút vẽ trên mặt phẳng. 
 - 152 - 
• Khớp cố định (fixed joint): 
 Loại khớp này kết dính hai vật thể với nhau và giới hạn khoản biến thiên thay 
đổi giữa 2 vật thể.Khớp này rất hữu ích khi mô phỏng những cho nứt, gãy. 
• Khớp khoảng cách (distance joint): 
 Loại khớp này sẽ cố gắng giữ giữa 2 vật luôn cách nhau một độ dài với giới giới 
hạn cho trước nào đó. Chúng ta có thể dùng mô phỏng phụt nhún của xe hay một 
sợi dây cao su. 
• Khớp ròng rọc: 
 Khớp này có thể dùng để mô phỏng các mắc dây xích nối với nhau. 
• Khớp 6 bậc tự do: 
 Đây là loại khớp khá tổng hợp cho phép ta có thể kết nối 2 vật theo bất kì một 
loại khớp nào ta có thể tưởng tượng ra. Tại mỗi bậc tự do ta đều có thể gới hạn góc 
quay và vận tốc cho nó. 
• Khớp có thể gãy được: 
 Đây là loại khớp kết nối đặc biệt mà ta có thể thiết lập độ lớn lực tối đa cho nó. 
Khi lực tương tác vượt qua ngưỡng này thì 2 vật kết nối nhau sẽ bị gãy rời ra. Khớp 
này ta có thể dùng để kết nối mặt bàn với các chân bàn. 
 Tóm lại, NovodeX cung cấp ta rất nhiều loại khớp và các cách để thiết lập thuộc 
tính về độ đàn hồi, nhún nhảy cho phép ta mô phỏng rất nhiều cơ cấu phức tạp có 
trong thực tế. 
 - 153 - 
 Các loại hình bao bọc và phát hiện va chạm: 
 Để xử dụng NovodeX ta phải dựa trên các đối tượng cơ bản của NovodeX để 
bao bọc đối tượng Game và quản lý các yếu tố vật lý thông qua các đối tượng này 
này di chuyển, phát hiện và xử lý va chạm. Các loại hình cơ bản: 
• Hình cầu (lớp NxSphereShape): 
 Đây là loại hình học cơ bản và đơn giản nhất. Ta chỉ cần xác định tâm và bán 
kính cho hình cầu này. 
• Khối hộp (lớp NxBoxShape): 
 Ta cần xác định kích thước khối hộp gồm chiều dài, chiều rộng và chiều cao. 
Đây là hình bao được dùng rất nhiều để bao bóc các đối tượng. 
• Hình capsule (lớp NxCapsuleShape): 
 Hình này giống hình trụ tròn nhưng bao tròn ở 2 đầu. Chúng ta có thể dùng để 
bao bọc thân người (bằng cách nối nhiều hình capsule với nhau). 
 - 154 - 
TÀI LIỆU THAM KHẢO 
[1] DirectX 9.0 SDK Update Summer 2004, Microsoft, 2004. 
[2] Jake Simpson, Game Engine Anatomy 101, April 12, 2002. 
[3] Bendik Stang, Game Engines, IMM DTU, 2003. 
[4] David H. Eberly, 3D Game Engine Design, Morgan Kaufmann Publishers, 
2003. 
[5] Wolfgang F. Engel, Shader X2 : Introductions & Tutorials with DirectX 
9, Wordware Publishing, Inc, 2004. 
[6] Wolfgang F. Engel, ShaderX2 : Shader programming tips and tricks 
with DirectX 9, Wordware Publishing, Inc, 2004. 
[7] Kris Gray, DirectX 9 Programmable Graphics Pipeline, Microsoft Press, 
2003. 
[8] William Ford, William Topp, Data Structures with C++ Using STL 
Second Editor, Prentice Hall, 2002. 
[9] Jim Adams, Advanced Animation with DirectX, Premier Press Game 
Development, 2003. 
[10] Evan Phipho, Focus on 3D Models, Premier Press Game Development, 
2003. 
[11] Jim Adams, Programming Role Playing Game With DirextX, Premier 
Press Game Development, 2002. 
[12] Maco Monster, Doom3 Models, September, 2004. 
[13] Website:  
[14] Website:  
[15] Website:  
[16] Website:  
[17] Website: www.flipcode.org. 
[18] Website: www.doom3world.org. 
[19] Website: www.ati.com. 
[20] Website: www.nvidia.com 

File đính kèm:

  • pdfthu_nghiem_3d_engine_10.pdf
Tài liệu liên quan