Giáo trình Đồ họa máy tính - Chương 5: Giới thiệu đồ họa ba chiều

Các đối tượng trong thế giới thực phần lớn là các đối tượng ba chiều, nên việc thể

hiện các đối tượng ba chiều trên máy tính là một công việc hết sức cần thiết để đưa

tin học gần gũi với thực tế hơn. Cũng giống như các cách biểu diễn các đối tượng ba

chiều trên mặt phẳng khác (như của máy ảnh, camera, . ), biểu diễn bằng máy tính

cũng phải tuân theo các quy luật về phối cảnh, sáng, tối, . nhằm giúp người xem có

thể tưởng tượng lại hình ảnh một cách gần đúng nhất. Ngoài ra biểu diễn trên máy

tính có ưu thế giúp ta có thể quan sát đối tượng ở nhiều góc cạnh khác nhau, ở các

khoảng cách khác nhau.

Chương này sẽ giới thiệu một số kĩ thuật biểu diễn các đối tượng ba chiều trên máy

tính, từ các đối tượng đơn giản như các hình khối, các đa diện, . đến các đối tượng

tương đối phức tạp như các mặt đã được tìm hiểu ở các chương trước.

pdf41 trang | Chuyên mục: Đồ Họa Máy Tính | Chia sẻ: dkS00TYs | Lượt xem: 2112 | Lượt tải: 5download
Tóm tắt nội dung Giáo trình Đồ họa máy tính - Chương 5: Giới thiệu đồ họa ba chiều, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
 nhau được gọi là các điểm nối (joints), và giá 
trị t tại các điểm đó được gọi là nút (knot). 
Có thể kiểm chứng được g(t) liên tục tại mọi nơi trên giá mang của nó, nên đường 
cong tại các chỗ nối là trơn. g(t) là một ví dụ của hàm Spline. 
Hình 5.28 – Các thành phần của một đa thức riêng phần 
Định nghĩa hàm Spline 
Một hàm Spline cấp M là một đa thức riêng phần cấp M có các đạo hàm cấp (M-1) 
liên tục ở mỗi nút. 
Rõ ràng theo định nghĩa thì g(t) là một Spline bậc hai. 
Định nghĩa đường cong Spline 
Ta xây dựng đường cong p(t) dựa trên (L+1) điểm kiểm soát bằng cách sử dụng các 
hàm Spline làm các hàm trộn như sau : 
• Xây dựng tập các nút t0, t1, .., với ti∈ R và ti ≤ ti+1. 
• Vector T = (t0, t1, ... ) được gọi là vector nút. 
• Với mỗi điểm kiểm soát pk ta kết hợp nó với một hàm trộn tương ứng là Rk(t). Rk(t) là 
đa thức riêng phần liên tục trên mỗi đoạn con [ti, ti+1] và liên tục tại mỗi nút. 
Khi đó : ( ) ( )∑
=
=
L
k
kk tRptp
0
Các đoạn đường cong riêng phần này gặp nhau tại các điểm nút và làm cho đường 
cong liên tục. Ta gọi những đường cong như vậy là đường cong Spline. 
Vấn đề được đặt ra tiếp ở đây : Cho trước một vector nút, có tồn tại hay không họ các 
hàm trộn sao cho chúng có thể phát sinh ra mọi đường cong Spline được định nghĩa 
trên vector nút đó. Một họ các hàm như vậy được gọi là cơ sở cho Spline, nghĩa là bất 
kì đường cong Spline nào cũng có thể được đưa về cùng một công thức bằng cách 
chọn đa giác kiểm soát phù hợp. 
Câu trả lời là có nhiều họ hàm như vậy, nhưng đặc biệt có một họ hàm trộn có giá 
mang nhỏ nhất đó là B-Spline (B là từ viết tắt của basis). 
Định nghĩa đường cong B-Spline 
g(t)
t1 2 3
1/2
3/4
join
b(t)
a(t)
Knot
c(t)
span
Support
Một đường cong B-Spline cấp m xây dựng dựa trên vector nút T và (L+1) điểm kiểm 
soát pk có dạng : 
( ) ( )∑
=
=
L
k
mkk tNptp
0
, 
Trong đó Nk,m(t) là đa thức có bậc (m-1) có công thức đệ quy : 
( ) ( ) ( )tN
tt
tt
tN
tt
tt
tN mk
kmk
mk
mk
kmk
k
mk 1,1
1
1,
1
. −+
++
+
−
−+
⎟⎟⎠
⎞
⎜⎜⎝
⎛
−
−+⎟⎟⎠
⎞
⎜⎜⎝
⎛
−
−= , 
k=0, 1, .., L 
với ( )
⎩⎨
⎧ <≤= +
lại còn nếu 0
t nếu 1 1k
1, t
tt
tN kk 
Các điểm ti có thể được xác định theo nhiều cách khác nhau. Một trong các cách đó là 
cho ti = i, lúc này khoảng cách giữa các điểm nút là bằng nhau. Hay ta có một cách 
định nghĩa khác : 
⎪⎩
⎪⎨
⎧
>+−
≤≤+−=
Li nếu 2,mL
Lim nếu 1,mL
m<i nếu 0,
it 
với i = 0, …,L+m. 
2.6.3. Thiết kế các mặt cong dựa trên Bezier và B-Spline. 
Để mô tả và vẽ các mặt cong ta cũng có thể dùng các hàm trộn Bezier và B-Spline 
tương tự như trong trường hợp đường cong. 
Các mảnh Bezier (Bezier surface patches) 
Xét đường cong Bezier như là một hàm theo tham số v và có các điểm kiểm soát thay 
đổi theo u. Ta có công thức : 
( ) ( ) ( )∑
=
=
L
k
L
kk vBupvup
0
, 
Lúc này, khi u thay đổi ta sẽ có các điểm kiểm soát thay đổi kéo theo đường cong 
Bezier cũng thay đổi theo. Sự biến thiên của các đường cong Bezier này trong không 
gian sẽ tạo ra một mặt cong. 
Khi u thay đổi, các điểm pk(u) sẽ thay đổi trên một đường cong nào đó. Nếu cho các 
đường cong này chính là các đường cong Bezier, mỗi đường cong dựa trên (M+1) 
điểm kiểm soát thì : 
( ) ( )∑
=
=
M
i
M
ikik uBpup
0
, 
Lúc này : 
 ( ) ( ) ( )∑∑
= =
=
M
i
L
k
L
k
M
iki vBuBpvup
0 0
,, 
Ta gọi đây là dạng tích tensor của mảnh Bezier. 
Dán các mảnh Bezier lại với nhau 
Mục đích là để tạo ra một dạng mặt cong phức tạp gồm nhiều mảnh Bezier kết hợp 
lại với nhau sao cho trơn tru tại các biên chung. 
Khi dán hai mảnh Bezier lại với nhau (mỗi mảnh có một khối đa diện kiểm soát riêng 
và cùng sử dụng công thức ở trên với u,v biến thiên trong đoạn [0, 1]), vấn đề là làm 
sao để chúng có thể dán vào nhau một cách trơn tru ? 
Hai mảnh sẽ gắn vào nhau ở tất cả các điểm dọc biên chung nếu các đa diện kiểm 
Mảnh 1
Mảnh 2
u
v
u
v
soát của chúng trùng khớp với nhau ở biên. Điều này có được là do dạng của đường 
cong Bezier biên chỉ phụ thuộc vào đa giác kiểm soát nằm ở biên của khối đa diện 
kiểm soát. Do đó, để dán được ta chỉ cần chọn các đa giác kiểm soát biên cho hai mặt 
là trùng nhau. 
Hình 5.29 - Minh họa hai mảnh Bezier dán lại với nhau 
Về tính liên tục tại tiếp tuyến, điều kiện đủ là mỗi cặp cạnh của các khối đa diện tại 
biên phải là cộng tuyến. 
Các mảnh B-Spline (B-Spline patches) 
Các hàm B-Spline có thể dùng ở dạng tích tensor thay cho dạng đa thức Bernstein để 
đạt được tính kiểm soát cao hơn khi thiết kế mặt cong : 
( ) ( ) ( )vNuNpvup M
i
mk
L
k
miki∑∑
= =
=
0
,
0
,,, 
Khối đa diện kiểm soát có (M+1)x(L+1) đỉnh và u, v biến thiên từ 0 tới giá trị lớn 
nhất của nút trong các vector nút tương ứng của chúng. 
Thông thường để thiết kế, người ta vẫn dùng các B-Spline cấp 4 (tức là cubic B-
Spline) và do việc chọn số điểm kiểm soát không hạn chế (số lượng các điểm không 
ảnh hưởng đến bậc của đa thức như đối với đường cong Bezier) nên người ta có thể 
tạo ra các dạng mặt cong rất phức tạp. Tất nhiên trước đó, người ta phải chọn ra một 
đa diện nút (knot polyhedron) để tạo ra mặt cong có dạng mong muốn. 
TÓM TẮT 
Chúng ta vừa tìm hiểu một trong các mô hình dùng để vẽ các đối tượng ba chiều trên máy tính : đó là mô hình khung nối 
kết. Theo mô hình này, một đối tượng ba chiều có thể được mô tả bởi tập các đỉnh và tập các cạnh, do đó các đối tượng được thể 
hiện chưa được gần thực tế lắm, nó mới chỉ là khung rỗng của đối tượng mà thôi. Sau này bằng các kĩ thuật tô màu, khử các 
đường và mặt khuất chúng ta sẽ khắc phục được các hạn chế này. 
Để vẽ các đối tượng ba chiều bằng mô hình khung nối kết, mỗi cạnh phải được chiếu theo một cách nào đó từ tọa độ ba 
chiều sang hai chiều. Qua đó chúng ta cũng đã tìm hiểu hai phép chiếu khá đơn giản để làm việc này đó là phép chiếu trực giao 
và phép chiếu phối cảnh. Phép chiếu trực giao chỉ đơn giản là bỏ đi một trong ba tọa độ của điểm chiếu bằng cách cho các tia 
chiếu song song với một trong các trục tọa độ. Phép chiếu phối cảnh thì sử dụng một điểm cố định gọi là mắt và hình chiếu của 
các điểm được xác định bằng giao điểm của tia chiếu (nối điểm chiếu và mắt ) với mặt phẳng quan sát. Phép chiếu phối cảnh hội 
tụ tại mắt nên đối tượng càng xa trông càng nhỏ và ngược lại. 
Các phép chiếu trực giao và phối cảnh đều bảo toàn đường thẳng, đây là một tính chất rất hay giúp ta vẽ các đường thẳng 
ba chiều đơn giản hơn vì chỉ cần xác định hai hình chiếu của hai điểm đầu và cuối mà thôi. 
Biểu diễn các mặt trong đồ họa máy tính là một vấn đề luôn được đặt ra khi muốn mô tả các đối tượng lập thể trong thế 
giới thực. Chúng ta đã khảo sát về các phương pháp biểu diễn mặt phẳng và mặt cong thông qua dạng phương trình tham số. 
Trong đó, phương trình tham số của một mặt có dạng là một phương trình tham số hai biến p(u, v) và một điểm bất kì trên mặt sẽ 
được biểu diễn dưới dạng p(u, v) = (x(u, v), y(u, v), z(u, v)). Chúng ta đã khảo sát một số mặt đơn giản như các mặt có quy luật 
và các mặt tròn xoay để minh họa cho việc xác định các hàm x(), y(), z() trong biểu diễn trên. 
Việc tạo ra các đường cong theo ý muốn cũng là vấn đề thường gặp khi làm việc với đồ họa máy tính. Chúng ta đã khảo 
sát cách tiếp cận vẽ đường cong bằng Bezier và B-Spline. Cách tiếp cận này dựa trên cơ sở để vẽ đường cong bằng một tập điểm 
mô tả hình dáng của đường cong gọi là tập điểm kiểm soát. Khi thay đổi tập điểm này, hình dáng của đường cong sẽ thay đổi 
theo. Cách tiếp cận này cho thấy sự thuận lợi và linh hoạt khi cần phải vẽ các đường cong phức tạp và do đó nó được dùng nhiều 
trong thiết kế. 
Một nhược điểm trong cách vẽ đường cong bằng Bezier là khi một phần đường cong đã đạt yêu cầu, nhưng khi hiệu chỉnh 
phần còn lại sẽ làm mất đi phần đã đạt yêu cầu. Để khắc phục vấn đề này ta có cách tiếp cận cải tiến vẽ đường cong bằng B-
Spline. 
Trên cơ sở của việc vẽ các đường cong bằng Bezier và B-Spline chúng ta cũng có thể xây dựng được các mặt cong Bezier 
và B-Spline. 
BÀI TẬP 
1. Viết chương trình cho phép người dùng định nghĩa một vật thể ba chiều bằng mô hình khung nối 
kết. Vẽ vật thể trên dùng lần lượt phép chiếu trực giao và phép chiếu phối cảnh. 
2. Viết chương trình vẽ các mặt đơn giản đã được khảo sát như hình trụ, hình nón, hình cầu, …. 
3. Nhận xét cách tiếp cận vẽ đường trong thuật toán Casteljau khác với cách tiếp cận vẽ các đối 
tượng đồ họa cơ sở ở chương trước như thế nào ? 
4. Cài đặt thuật toán vẽ đường cong bằng Bezier cho phép người dùng định nghĩa tập điểm kiểm soát 
mô tả hình dạng đường cong và cho phép người dùng hiệu chỉnh một số điểm kiểm soát để hiệu 
chỉnh đường cong theo ý muốn. 
5. Viết chương trình vẽ đường Spline 
6. Viết chương trình vẽ các mặt Bezier. 

File đính kèm:

  • pdfGiáo trình Đồ họa máy tính - Chương 5 Giới thiệu đồ họa ba chiều.pdf