Thông tin tài liệu:
Mô hình WireFrame thể hiện hình dáng của đối tượng 3D bằng 2 danh sách...
Nội dung trích xuất từ tài liệu:
Chương 5: Biểu diễn các đối tượng ba chiều CHƯƠNG V BIỂU DIỄN CÁC ĐỐI TƯỢNG BA CHIỀU5.1. MÔ HÌNH WIREFRAME Mô hình WireFrame thể hiện hình dáng của đối tượng 3D bằng 2 danh sách : • Danh sách các đỉnh : lưu tọa độ của các đỉnh. • Danh sách các cạnh : lưu các cặp điểm đầu và cuối của từng cạnh. Các dỉnh và các cạnh được đánh số thứ tự cho thích hợp.Ví dụ: Biểu diễn 1 căn nhà thô sơ (hình5.1) Z P4 Danh sách các đỉnh Vector x y z 1 0 0 0 P9 P5 P3 2 0 1 0 3 0 1 1 P10 4 0 0.5 1.5 P8 5 0 0 1 Y 6 1 0 0 P1 7 1 1 0 P2 8 1 1 1 P6 9 1 0.5 1.5 P7 10 1 0 1 X Có nhiều cách để lưu giữ mô hình Hình 5.1WireFrame. Ở đây, chúng ta dùng cấu trúcrecord dựa trên 2 mảng: MaxDinh = 50; { Số đỉnh tối đa} Const MaxCanh = 100; {Số cạnh tối đa} Type ToaDo3D = record x, y, z:real; end; WireFrame = Record Chương V. Biểu diễn các đối tượng ba chiều Sodinh: 0..MaxDinh; Dinh: array [1..MaxDinh] of ToaDo3D; Socanh : 0..Maxcanh; Canh :array[1..Maxcanh, 1..2] of 1..MaxDinh; end;Khi đó, ta dùng một biến để mô tả căn nhà : Var House : WireFrame;với biến house ở trên, ta có thể gán giá trị như Danh sách các cạnh Cạnh Đỉnh đầu Đỉnh cuốisau: 1 1 2With House Do 2 2 3 3 3 4Begin 4 4 5 sodinh:=10; 5 5 1 6 6 7 socanh:=17; 7 7 8 dinh[1].x:=0; 8 8 9 9 9 10 dinh[1].y:=0; 10 10 6 dinh[1].z:=0; 11 1 6 12 2 7... 13 3 8 canh[1, 1]:=1; {Số đỉnh thứ nhất của 14 4 9 15 5 10 cạnh số 1} 16 2 5 canh[1, 2]:=2; {Số đỉnh thứ hai của 17 1 3 cạnh số 1} ...end;5.2. VẼ MÔ HÌNH WIREFRAME VỚI CÁC PHÉP CHIẾU Để vẽ một đối tượng WireFrame, ta vẽ từng cạnh trong danh sách các cạnh c ủamô hình. Vấn đề là làm thế nào để vẽ 1 đường thẳng trong không gian 3 chiều vàomặt phẳng? Để làm điều này, ta phải bỏ bớt đi 1 chiều trong mô hình biểu diễn, tức là ta phảidùng phép chiếu từ 3D → 2D . 64 Chương V. Biểu diễn các đối tượng ba chiều Kỹ thuật chung để vẽ một đường thẳng 3D là: Chiếu 2 điểm đầu mút thành các điểm 2D. Vẽ đường thẳng đi qua 2 điểm vừa được chiếu. Sau đây là thủ tục xác định hình chiếu của một điểm qua phép chiếu phối cảnh: Procedure Chieu(P3D:ToaDo3D; E:Real; Var P2D:ToaDo2D); Var t:Real; Begin If (P3D.x >=E) OR (E=0) Then Writeln(‘Điểm nằm sau mắt hoặc mắt nằm trên mặt phẳng nhìn’); Esle Begin t := 1/(1 - P3D.x/E); P2D.y := t*P3D.y; P2D.z := t*P3D.z; End; End;5.3. VẼ CÁC MẶT TOÁN HỌC Ta sẽ vẽ các mặt cong dựa trên phương trình tham số của các mặt đó. Ví dụ: (a) (b) (c) Hình 5.2 • Mặt Ellipsoid: (hình 5.2.a) 65 Chương V. Biểu diễn các đối tượng ba chiều x=Rx.cos(u).cos(v) y=Ry.sin(u).cos(v) z=Rz.sin(v) Trong đó: 0≤ u ≤ 2π -π/2 ≤ v ≤ π/2• Hypeboloid: (hình 5.2.b) Mặt x=u y=v z=u2 - v2 Trong đó u,v ∈[-1,1]• Hình xuyến: (hình 5.2.c) x=(R + a.cos(v)).cos(u) y=(R + a.cos(v)).sin(u) z= a.sin(v) Trong đó: 0≤ u ≤ 2π -π/2 ≤ v ≤ π/2• Hình trụ tròn ...