I.1. Cấu trúc vật thể bằng mô hình "câc mặt đa giâc"
Một vật thể 3D có thể biểu diễn trong mây tính bằng nhiều mô hình khâc nhau, song hai mô hình phổ biến nhất đó lă mô hình khung dđy (WireFrame) vă mô hình câc mặt đa giâc ( Polygon mesh model)
• Mô hình WireFrame: Đê trình băy ở chương trước, nó cho ta hình dâng của vật thể dưới dạng một bộ khung
• Mô hình câc mặt đa giâc: ở đđy một vật thể 3D được xâc định thông qua câc mặt (thay vì câc cạnh như trong mô hình WireFrame), vă mỗi một mặt lại được xâc định thông qua câc điểm mă câc điểm năy được xem như lă câc đỉnh của mặt đa giâc, với mô hình câc mặt đa giâc thì chúng ta không chỉ tạo ra được hình dâng của vật thể như mô hình Wireframe mă còn thể hiện được câc đặc tính về mău sắc vă nhiều tính chất khâc của vật thể. Song để có thể mô tả vật thể 3D một câch trung thực (như trong thế giới thực) thì đòi hỏi người lập trình phải tính toân vă giả lập nhiều thông tin, mă mấu chốt lă vấn đề khử mặt khuất vă chiếu sâng.Trong chương năy chúng ta sẽ tập trung nghiín cứu vấn đề khử mặt khuất.
Mặt 1 2 1 Mặt 5 3 Mặt 4 Mặt 3 5 4 Mặt 2 6
- Danh sâch câc đỉnh: 1,2,3,4,5,6
- Danh sâch câc mặt được xâc định theo bảng sau: Mặt Đỉnh 1 2 3 4 5 1,2,3 4,5,6 1,3,6,4 3,2,5,6 1,2,5,4
Một nhđn vật game theo mô hình câc mặt đa giâc cùng với phĩp ânh xạ bề mặt vật liệu lín câc đa giâc.
Chúng ta có thểđưa ra nhiều cấu trúc dữ liệu khâc nhau để lưu trữ cho đa giâc. Dưới đđy lă phât thảo một kiểu cấu trúc:
Point3D=record {Điểm 3 chiều} x,y,z:real;
end;
Vector3D=record {Vector 3 chiều. Mặc dù nó giống với
Point3D song ta vẫn khai để câc thuật toân được tường minh}
x,y,z:real; end;
B,G,R:Byte; end;
KieuMat=record
PhapVT:Vector3D; {Phâp vector của mặt} Sodinh:cardinal; {Số đỉnh của mặt}
List:array of integer; {Danh sâch thứ tự câc đỉnh tạo nín mặt.
Ở đđy ta dùng mảng động}
Color:RGBColor; {mău sắc của mặt} end;
Obj3D=record {Đối tượng 3 chiều} ObjName:string; {Tín của đối tượng} Sodinh:cardinal; {Số đỉnh}
Dinh: array of point3d; {Danh sâch đỉnh. Ở đđy ta dùng kiểu mảng động}
SoMat:cardinal; {Số mặt}
Mat:array of KieuMat; {Danh sâch mặt}
Xworld,Yworld,Zworld,Zoom:Real; {Toạ độ vă kích thước thật
của vật trong hệ toạ độ thế giới}
end;
Khi căi đặt cho một ứng dung cụ thì việc sử dụng mảng cố định có thể gđy ra câc trở ngại về kích thước tối đa hay tối thiểu, cũng như việc sử dụng bộ nhớ không tối ưu. Vì thế ngoăi câch dùng mảng cố định, ta có thể dùng mảng động trong một số ngôn ngữ như Visual Basic, Delphi hay Visual C++,… hoặc dùng cấu trúc danh sâch móc nối. Song song với điều đó lă việc bớt đi hay đưa thím câc thuộc tính cần thiết để biểu diễn câc đặc tính khâc của mặt hay của đối tượng
* Vấn đề khử mặt khuất:
Khi thể hiện vật thể 3D một vấn đề nảy sinh lă lăm sao chỉ thể hiện câc mặt có thể nhìn thấy được mă không thể hiện câc mặt khuất phía sau. Việc một mặt bị khuất hay không bị khuất thì tuỳ thuộc văo cấu trúc câc mặt của vật thể vă vị trí của điểm nhìn cũng như bối cảnh mă vật thểđó được đặt văo.