I.1. Cấu trúcvật thểbằngmôhình"câcmặtđagiâ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âcmặtđagiâc(Polygonmeshmodel)
• Mô hìnhWireFrame: Đêtrìnhbăyởchương trước,nóchotahìnhdângcủavật thểdướidạngmộtbộ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 (thayvìcâccạnhnhưtrongmôhình WireFrame),vă mỗi mộtmặtlạiđược
xâc địnhthông qua câcđiểm mă câc điểm năy đư ợc xem như lă câc đỉnhcủa
mặt đa giâc, với mô hình câc mặt đa giâc thì chún g 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ấtkhâc của vật thể . Song để có thểmô tả vật
thể3Dmột câchtrungthực(như trongthếgiớithực)thìđòihỏingườilậptrình phảitính toân vă giảlậpnhiều thôngtin,mămấuchốtlăvấn đềkhử mặtkhuất vă chiếu sâng.Trong chươngnăy chúngta sẽ tậptrung nghiín cứu vấn đề khử mặtkhuất.
Ví dụ:Môtảvậtthểnhưtronghìnhvẽsau:
Trang106
Chương 7: Mô hình các mặt đa giác & Vấn đề
khử mặt khuất - Nguyễn Hữu Tài
Mặt1 2 1 3 Mặt5 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ặt4 Mặt3 5 4 Mặt2 6 -Danh sâchcâcđỉnh:1,2,3,4,5,6
(a)MộtconCọpvớicâcmặtđagiâcchưatômău. (b)Tômăuđagiâctheomẫu
Trang107
Chương 7: Mô hình các mặt đa giác & Vâ
ún đề khử mặt khuất - Nguyễn Hữu T
ài
Mộtnhđnvậtgametheomôhìnhcâcmặtđagiâccùngvớiphĩpânhxạbềmặtvật liệulíncâcđa giâc.
Chúngtacóthểđưaranhiềucấutrúcdữliệukhâcnhauđểlưutrữchođagiâc. Dướiđđylăphâtthảomộtkiểucấutrúc:
Point3D=record {Điểm3chiề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đượctườngminh}
x,y,z:real; end;
RGBColor=record {Cấutrúcmăusắccủamộtmặt}
Trang108
Chương 7: Mô hình các mặt đa giác & Vâ
ún đề khử mặt khuất - Nguyễn Hữu Tài
B,G,R:Byte; end;
KieuMat=record
Sodinh:cardinal; {Sốđỉnhcủamặt}
List:arrayofinteger; {Danh sâchthứ tự câcđỉnh tạo nínmặt. Ởđđytadùngmảngđộng}
Color:RGBColor; {măusắccủamặt} end;
Obj3D=record {Đốitượng3chiều} ObjName:string; {Tíncủađốitượng} Sodinh:cardinal; {Sốđỉnh}
Dinh:arrayofpoint3d; {Danh sâch đỉnh. Ở đđy ta dùng kiểu mảngđộng}
SoMat:cardinal; {Sốmặt}
Mat:arrayofKieuMat; {Danhsâchmặt}
Xworld,Yworld,Zworld,Zoom:Real; {Toạ độ vă kích thước thật củavậttronghệtoạđộthếgiới}
end;
Khi căiđặt cho một ứngdung cụ thìviệc sử dụng mảng cố địnhcó 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ấutrúc danhsâch mócnối.Songsongvớiđiềuđólăviệcbớtđihayđưathímcâc thuộctính cầnthiếtđểbiểudiễn câcđặctínhkhâccủamặthaycủađốitượng
*Vấnđềkhửmặt khuất:
Khi thểhiệnvậtthể3Dmộtvấn đềnảy sinhlă lămsaochỉthểhiệncâcmặt có thể nhìn thấyđượcmă khôngthểhiện câc mặt khuất phía sau.Việcmộ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ểmnhìncũngnhưbốicảnhmăvậtthểđóđượcđặtvăo.