Câc hăm B-Spline có thểựược sử dụng trong dạng tắch Tensor thay cho câc ựa thức Bernstein ựể ựạt ựược tắnh kiểm soât cao hơn khi thiết kế mặt cong. điều ựó có nghĩa ta sẽ thay phương trình (**) thănh:
P(u,v) = i M = ∑ 0 k L = ∑ 0
Pi,k.Ni,m(u).Nk,m(v)
Khối ựa diện kiểm soât gồm có (L+1).(M+1) ựiểm kiểm soât; u,v biến thiắn từ 0 tới giâ trị nút lớn nhất trong câc vector nút tương ứng của chúng.
Chương VỊ Thiết kếựường cong vă mặt cong Bezier vă B-Spline
82
đối với câc băng B-Spline, người ta vẫn dùng câc B-Spline bậc 4. Do việc chọn số ựiểm kiểm soât lă không giới hạn nắn có thể tạo ra nhiều dạng mặt cong rất phức tạp.
Tất nhiắn khi thiết kế, ta phải chọn khối ựa diện nút ựể tạo ra mặt có dạng mong muốn.
KHỬ đƯỜNG VĂ MẶT KHUẤT
7.1. CÂC KHÂI NIỆM
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 5, 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.
Vắ dụ: Mô tả vật thể như trong hình 7.1.
- 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:
1 2 3 4 5 6 Mặt 3 Mặt 1 Mặt 4 Mặt 5 Mặt 2 Hình 7.1
Chương VIỊ Khửựường vă mặt khuất 84 1 2 3 4 5 1,2,3 4,5,6 1,3,6,4 3,2,5,6 1,2,5,4
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:
Type Point3D = Record {điểm 3 chiều}
x,y,z:real;
end;
Vector3D = Record {Vector 3 chiềụ Mặc dù nó giống với
x,y,z:real; Point3D song ta vẫn khai ựể câc thuật toân end; ựược tường minh}
RGBColor = Record {Cấu trúc mău sắc của một mặt}
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}
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 dụng 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 ưụ 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ốị 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 saụ 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ăọ