-------o0o-------
ISO 9001:2008
TÌM HI U K THU T T O BÓNG C NG SHADOW
VOLUME
Sinh viên th c hi n:
G
Mã s sinh viên:
H I PHÒNG
Nguy n Ti
PGS.TS.
1351010036
2013
án t t nghi p
p H i Phòng
L IC
Em xin g i l i c
i các th y cô khoa Công ngh thông
i h c Dân L p H i Phòng, nh
nd y
d cho chúng em nh ng ki n th c b ích và quý giá trong su t 4
c qua, nh
cho chúng em hành trang
i.
Nguy n Ti
- CT1301
1
án t t nghi p
p H i Phòng
M cL c
L
U......................................................................................................................3
H A BA CHI U VÀ BÀI TOÁN T O BÓNG ..4
1.1. Khái quát v
h a 3 chi u................................................................... 4
1.1.1. Hi n th 3D(3D Viewing) ............................................................... 4
1.1.2 B
m và các phép ki m tra ........................................................ 11
1.2 Bài toán t o bóng .................................................................................. 12
1.2.1 Bóng và các d ng ngu n sáng........................................................ 12
1.2.2 M t s cách ti p c n trong t o bóng .............................................. 17
THU T T O BÓNG C NG B
VOLUME ...........................................................................................................................19
2.1
.............................................................................................. 19
....................................................................... 20
2.3
.......................................... 24
2.4 T o bóng kh i b ng thu t toán Z-Pass................................................. 27
2.5 T o bóng b ng thu t toán Z-Fail........................................................... 30
2.5.1. T t c các m
c c a bóng t v
2.5.2 T t c các m t sau c a bóng t v
2.5.3. V
yn
2.6
m nhìn ........................ 31
m nhìn ............................ 32
u c a kh i ................................................... 33
...................................................................... 35
C NGHI M....................................................36
3.1 Bài toán ................................................................................................. 36
3.2 Phân tích, l a ch n công c .................................................................. 36
3.2.1 Gi i thi u ngôn ng l p trình......................................................... 36
3.2.2 L a ch n công c ........................................................................... 37
3.3 K t qu
............................................................................. 37
K T LU N ................................................................................................. 39
TÀI LI U THAM KH O:................................................................................................39
Nguy n Ti
- CT1301
2
án t t nghi p
p H i Phòng
h a máy tính là m t l nh v c phát tri n nhanh nh t trong tin h c. Nó
c áp d ng r ng rãi trong nhi u l nh v c khác nhau thu c v khoa h c, k ngh , y
khoa, ki n trúc và gi i trí
H c vi n Công ngh
h a 3D b ng vi c phát minh ra thi t b hi n th
tn
(head-
u khi n b
nhìn có th th
c hình
thành m t trong nh
u
u
u tiên.
i d ng l p th 3D. T
c phát tri n r c r nh t c
i
h a 3D tr
h a máy tính.
c ng d ng r ng rãi trong h u h t t t c
v
n nh,
Ho t hình, ki n trúc và các ng d ng xây d ng các mô hình th c t i
không th không nh
n vai trò t i quan tr ng c
h a 3D trong vi c t o ra các
game s d
h a hi
và s t o nên m t n n công nghi p game phát tri n m nh m .
h
M
h a 3D là t o ra và mô t
ng, các mô hình
trong th gi i th t b ng máy tính sao cho càng gi ng v i th t càng t t. Vi c nghiên
c
thu t khác nhau c
h
n
m t m c tiêu duy nh
ng, các mô hình
c t o ra trong máy tính gi ng th t nh t. Và m
là t
ng.
Xu t phát t v
án c a em xây d ng g
KHÁI QUÁT V
H A BA CHI U VÀ BÀI TOÁN
T O BÓNG
3D, v
bi u di
m và các phép bi
i
.
C
K THU T T O BÓNG C NG B
SHADOW VOLUME
v
Shadow Volume
và các d ng ngu n sáng.
C NGHI M
Nguy n Ti
- CT1301
3
án t t nghi p
p H i Phòng
ng trong th gi i th c ph n l
ng 3 chi u còn thi t
b hi n th ch 2 chi u. Do v y, mu n có hình nh 3 chi u ta c n ph i gi l p.
Chi
n là chuy
it
c. Hình nh s
c hình thành t
t , ngày càng chi ti
các t
nh v i t
nh v
c
o trong kh
th trên màn hình)
nh vùng nhìn (là m
Vi c chuy n t các t
c:
th gi i sang t
th gi i. Cùng v i
ng c a camera
c hi n
c th c hi n theo
u tiên th c hi n m t phép bi
o tr v v trí và
ng tiêu chu
m nhìn (eyepoint) s
t g ct
ng
nhìn trùng v
ng âm c a tr c Z. Tr c X ch v phía ph i và tr c Y ch lên phía
trên trong màn hình. H t
m i này s
c g i là H t
M t (Eye
Coordinate System). Phép bi n i t t
th gi i sang các t
m t là m t
phép bi
c g i là phép bi
i hi n th (Viewing Transformation).
C t
th gi i và t
m
c bi u di n b i t
ng nh t
(Homogeneous Coordinates) v i w=1.
c th 2. T a
m
t trong m t kh i l
m
g
c cu i cùng, phép bi
c chuy n qua t
c a thi t b chu n hóa
cho vùng không gian mà ta mu
c
n:
có thành ph n z nh
i c ng nhìn (Viewport Transformation) là s
k t h p c a 1 phép co giãn tuy n tính và 1 phép t nh ti n. S chuy n thành ph n x
Nguy n Ti
- CT1301
4
án t t nghi p
và y c a t
p H i Phòng
thi t b chu n hóa
sang t
hình. Thành ph n z ( 1 z 1
c chuy
n [0,1] và s
chi u sâu (Depth-Value) trong thu t toán Z-Buffer (b
d ng cho vi c x
nh m t s
c th 2 bao g
c s d ng
cs
c hi n th .
c con :
- M t phép chi u chuy n t vùng nhìn sang 1 kh i l
t
Pixel c a màn
ng nh t:
nv i
ng h p s d ng phép
chi u tr c giao, vùng nhìn này s có d ng m t ng song song 3D v i các m t song
song v i các m t c a h t
m
ng h p s d ng phép chi
i
x ng, vùng nhìn s là m t hình tháp c t v
m t. H t
ng nh t (4 thành ph
u mút là g c t
c sau phép chi
c ah t
c g i là h t a
c t (Clipping Coordinate System). Phép chi u s là m t phép bi
i affine
ng h p phép chi u là phép chi u tr c giao. N u phép chi u là phép chi u
ph i c nh s không ph i là m t phép bi
1)
tiêu chu
i affine (Vì w s nh n m t giá tr khác
c ti p theo, các vùng c a không gian hi n th mà không n m trong kh i
c g i là kh i nhìn tiêu chu n) s b c
ng th
c ch a trong ho c là có m t ph n trong s
c thay
ch ph n n m trong kh i nhìn tiêu chu n m
c gi l i. Ph n còn l i
không c n quan tâm nhi u n a.
Sau khi c t g t, các t
ng nh t s
c chuy n sang t
c a thi t b
b ng cách chia x,y,z cho w. N u w nh n 1 giá tr
u, thì phép chia
này s
ng ph i c nh mong mu
c g i là phép chia ph i c nh (Perspective Division)
Nguy n Ti
- CT1301
5
án t t nghi p
p H i Phòng
Hình 1.1: T ng quan v hi n th 3D và các phép chi u.
Phép bi
i hi n th s
v
m nhìn trùng v i g c t
(xem hình 2.1) Tr c Y sau phép bi
hình. Tr c X s ch v phía ph i.
M t cách thu n ti
t camera
c cho tùy ý v m t camera
ng nhìn d c theo chi u âm c a tr c Z
ng s ch lên phía trên c a màn
nh v trí c a camera o là cho sãn v trí c a
m nhìn E , M
m trong khung nhìn R
ch lên phía trên trong màn hình.
Phép bi
Nguy n Ti
i hi n th s g
- CT1301
m tham chi u) và m
ng
s
c:
6
án t t nghi p
p H i Phòng
t phép t nh ti n s
m nhìn E v g c t
. Ma tr n bi
i
ng s là M t ( E ) . K t qu s
t phép quay s chuy
m t ph ng YZ. Vector
s ch
c v tr
v
c quay v trùng v i tr c Y n u
c h t ta s xây d ng t
vuông góc v i
n t c phù h p trong t
th gi i.
n
u
v
E
R
E
R
V
n
V
n
cv
ng nhìn
Z
Ch v phía ph i, vuông góc v i n
Ch lên gi ng
n u
( Oz )
X
ng góc v i n và u
Y
y ma tr n c a phép quay s là: M r (u,v, n)
n c a phép bi
u, v và
Nguy n Ti
- CT1301
i s là:
c tính t E , R và V
7
án t t nghi p
p H i Phòng
ng h p phép chi u tr c giao, vùng không gian hi n th là m t ng
song song trong h t
m tc ah t
m
m t. Các m t c a ng song song này song song v i các
c và v trí c a vùng không gian hi n th
c xác
nh b i t
m t xleft, xright, ybottom, ytop, zfront và zback . (xleft, ybottom) và (xright, ytop)
nh m t c a s trong m t ph ng chi u (ho c là b t k m t nào song song v i
m t XY) mà vùng không gian hi n th s
c hi n th
d ng hình vuông [-1,+1]2. zfront và zback
a s này ph i
m t ph ng c t
c và c t sau. T
c at tc
m trong không gian (ho c ít nh t là nh ng
m ta mu n nhìn) ph i th a mãn zback z zfront . Kho ng giá tr c a z ph
c
các giá tr chi u sâu (depth value) n
có giá tr chi u sâu nh
n [-
mg nm t
Hình 1.2 : Vùng không gian hi n th c a phép chi u tr c giao.
Phép chi u tr
theo th t :
nh ti n M t ( M ) s
t
c ah t
c b ng cách th c hi n các phép bi
i sau
a vùng không gian hi n th v g c
m t.
c c a vùng hi n th v
m i
chi u.
Nguy n Ti
- CT1301
8
án t t nghi p
p H i Phòng
i x ng qua m
mn mg
nh n giá tr z
nh
i x ng
bi
trên có th
c ch b ng m t phép
M s (S ) v i:
y ma tr n c a phép chi u tr c giao s là:
Thành ph
i affine. Phép chi
hình h c (các t s kho
i, b i vì phép chi u tr c giao là m t phép bi n
c s d ng trong các ng d ng c
n các quan h
Phép chi u ph i c nh phù h p và g
i quan sát c
i (b ng
m t m t) trong th gi i 3D. T t c
m trên m
ng th
m nhìn
s
c ánh x lên cùng m
m
nh
b it
thi t b chu n hóa x và y. N
c ánh x vào cùng m
m
trên màn hình, ta c n ph
m nào s
c hi n th b ng thu t toán Zu sâu c a chúng. Vì lý do này chúng ta c
m t thành ph n t
khác c a thi t b chu n hóa là z sao cho nó là m
u c a kho ng cách t
n m t ph ng m t XY. Kho ng cách t m t
n m t ph ng XY không b ng v i kho ng cách t
t g ct
c các m t s
c hi n th .
y, phép chi u tr c giao s
m (v i t
ng nh t) trong
h t
m t (x,y,z,1) v m
m (t
ng nh t) trong h t
c t
(x ,y ,z ,w
c a thi t b chu n hóa (affine) (x ,y ,z ) s
c
b ng cách chia x ,y ,z cho w (Phép chia ph i c nh):
Nguy n Ti
- CT1301
9
án t t nghi p
p H i Phòng
V i phép chi u ph i c nh, vùng không gian hi n th là m t hình tháp c t v i
u mút là g c t
.
Hình 1.3: Vùng không gian hi n th c a phép chi u ph i c nh cân x ng
(Symmetrical Perspective Projection)
Phép bi
l
i c ng nhìn ch g m m t phép t nh ti n và m
:
thi t b chu n hóa (x, y) v i
t
it
c chuy n qua
pixel.
nzv i
Giá tr z w này s
có giá tr z w nh s n
c co l
cs d
c nh
lo i b nh ng b m t b
- CT1301
.
n. Nh
m
m có giá tr z w l
Xây d ng ma tr n bi
i là công vi
n u ta th c hi n phép bi
i m t cách tr c ti p:
Nguy n Ti
n
n. Tuy nhiên s hi u qu
10
án t t nghi p
p H i Phòng
1.1.2
M tm
ng c a h u h
h a là v
c các
b c tranh ra màn hình. Màn hình là m t m ng hình vuông c a các pixel. M i pixel
hi n th
c 1 màu nh
nh. Sau các quá trình quét (bao g m Texturing
và fog
li
thành pixel, nó v n ch
m nh này ch a d li u chung cho m
chi u sâu. Các m
i
c là giá tr
qua m t lo t các phép ki m tra và các thao tác
c v ra màn hình.
N um
c các phép ki m tra (test pass) thì nó s tr thành các
v các pixel này, ta c n ph i bi
c màu s c c a chúng là gì, và thông
tin v màu s c c a m
m màu (Color Buffer).
tr d li u cho t ng pixel xu t hi
c g i là b
m (Buffer). Các b
m khác nhau s
t lo i d li u khác nhau cho pixel
và b nh cho m i pixel có th s khác nhau gi a các b
tb
m thì 2 pixel b t k s
c c p cùng m
m t bít thông tin cho m
ph bi
ng b nh gi ng nhau. M t b
c g i là m t bitplane. Có các b
m
m
-Buffer)
a. Khái ni m: Là b
giá tr chi u sâu cho t
c
dùng trong vi c lo i b các b m t n. Gi s
m sau các phép chi
c ánh
x vào cùng m
m nào có giá tr chi u sâu (z) nh
c vi
m có giá tr chi u sâu l
y nên ta g i b
m này là Z-buffer.
b. Depth test: V i m i pixel trên màn hình, b
m chi
cách vuông góc t
u giá tr chi u sâu c a m
c ánh x vào pixel
c coi là qua Depth test (depth test pass) và giá tr chi u sâu c
Nguy n Ti
- CT1301
ng
m
m
c
11
án t t nghi p
p H i Phòng
thay th cho giá tr
tr
m. N u giá tr chi u sâu c
m tra chi u sâu. (Depth test
Fail)
a. Khái ni m: B
trong khung c
B
m
cs d
gi i h n m t vùng nh
um
t o ra bóng ho
t o ra nh ph n x c a m t v t th
b. Stencil Test: Phép ki m tra Stencil ch
khuôn. (N u không có b
c th c hi n khi có b
m khuôn thì phép ki
m
c coi là luôn
pass). Phép ki m tra Stencil s so sánh giá tr
i m t Pixel
v i m t giá tr tham chi u theo m
c
GL_EQUAL, GL_GEQUAL, GL_GREATER hay là GL_NOTEQUAL. Gi s
hàm so sánh là GL_LESS, m
c coi là qua phép ki m tra
(pass) n
tham chi u nh
Ngoài ra OpenGL còn h tr m t hàm là
glStencilOp(GLenum fail, GLenum zfail, GLenum zpass);
Hà
nh d li u trong stencil Buffer s
i th nào n
m tra stencil. 3 hàm fail, zfail và zpass có th là
m
ng v i gi nguyên giá tr hi n t i, thay th nó v i 0, thay th nó b i m t giá tr
tham chi
m giá tr
c s d ng
n
u nó pass thì hàm zfail s
c dùng n u
c dùng n
c n u
không có phép ki
c th c hi n. M
nh c 3 tham s này là
GL_KEEP.
1.2
t vùng t i n m gi a m
hi n khi m t v t th
Nguy n Ti
c chi u sáng, xu t
c chi u sáng toàn b ho c m t ph
- CT1301
12
án t t nghi p
p H i Phòng
Bóng là m t trong nh ng y u t quan tr ng nh t c
vi c nh n bi t các v t th trong th gi i 3 chi u. Bóng giúp cho ta nh n bi
iv
cv
ic av t
bóng (occluder) v i m t nh n bóng (receiver), nh n bi t
c và d ng hình h c c a c v
bóng và m t nh n bóng.
Hình 1.4: Bóng cung c p thông tin v v
bên trái ta không th bi
c v trí c a con r
ph i ta th y v kho ng cách c a chúng so v i m
i c a v t th . V i nh
il
t 3 nh bên
t xa d n.
Hình 1.5: Bóng cung c p thông tin v d ng hình h c c a m t ti p nh n. Hình
bên trái ta không th bi
c d ng hình h c c a m t ti p nh n, còn m t bên ph i
thì d dàng th
c.
Nguy n Ti
- CT1301
13
án t t nghi p
p H i Phòng
Hình 1.6: Bóng cung c p thông tin v d ng hình h c c a con r i. Hình bên
trái con r i c
gi a nó c m cái vòng, và bên ph i nó c m cái m trà.
H u h t các thu
u có th
c chia
làm 2 lo i chính là bóng c ng (Hard shadow) và bóng m m (Soft shadow), ph
thu c vào lo i bóng mà nó t o ra.
c hi n th
c chia làm 2 ph n phân bi t: Ph n chính mà
n
c g i là vùng
bóng, vùng bao bên ngoài nó và
có m t ph n n
c g i là vùng n a bóng. Các thu t toán t o bóng
c ng là nh ph n vi m i th
u ch có 2 tr
c chi u sáng
(0) Chúng ch hi n th duy nh t ph n bóng c a bóng. Các thu t toán t o bóng
m m hi n th vùng n a bóng bên ngoài
x lý tính toán ph n m
c
ánh sáng b t quy t c trong vùng n a bóng)
Nguy n Ti
- CT1301
vùng
bóng trung tâm và ph i
.(K t qu t s phân b
14
án t t nghi p
p H i Phòng
1.7
.
h
c bi t nó là
thành ph n không th thi
t o ra bóng. Có ngu n sáng ch chi u theo m t
ng nh
ng ánh sáng m t tr i), có ngu n sáng chi u ra toàn khung
c
t khung c nh có th có nhi u ngu n sáng. Các ngu n sáng này có
th
c t t b t t ng cái gi
ng công t c v y. Theo mô hình ánh
sáng c a OpenGl thì ánh sáng g m có 4 thành ph n chính: Emissive Light, Ambient
Light, Diffuse Light, Specular Light. Các thành ph n này có th
c
l p v i nhau, và cu
c k t h p l i v i nhau.
Ambient Light là ánh sáng b phân rã b
ng và không th
nh
ng c a chúng. N u trong m t khung c
nh ngu n sáng thì k t
qu
d ng Ambient Light.
Nguy n Ti
- CT1301
15
án t t nghi p
p H i Phòng
Hình 1.8: Chi c
c chi u b ng Ambient Light.
Diffuse Light (ánh sáng khu ch tán) là ánh sáng chi u theo m
tuy nhiên khi nó g p m t b m t nó s b phân rã b ng nhau v m
nó sáng b
m
m hay t m
t m t nhìn
a. M i ngu
ng nh
u có thành ph n Diffuse Light.
Hình 1.9:
ng nh t,
ng, Vì th
nt
c chi u b ng Diffuse Light
Specular Light là ánh sáng ph n x . Khi g p m t b m t nó s ph n x l i
t ph n x . Nó có th
c nhìn th y trên nh ng b m t cong.
Ánh sáng xung quanh là m c sáng trung bình, t n t i trong m t vùng không
gian. M t không gian lý t ng là không gian mà t i
m i v t u
c cung
c p m t l ng ánh sáng lên b m t
nhau, t m i phía m i n Thông
th ng ánh sáng xung qua
c xác nh v i m t m c c th g i là m c sáng
xung quanh c a vùng không gian mà v t th
ng , sau
ta c ng v i c ng
sáng có
c t các ngu n sáng khác
có
c c ng
sáng cu i cùng lên
m t
m hay m t m t c a v t th
Ngu n
nh h
ng gi ng
nh ng gì mà m t tr i cung c p cho chúng
ta. Nó bao g m m t t p các tia sáng song song, b t k c
Nguy n Ti
- CT1301
ng
c a chúng có gi ng
16
án t t nghi p
p H i Phòng
nhau hay không. Có hai lo i k t qu c a ánh sáng nh h ng khi chúng chi u n
b m t là: khuy ch tán và ph n chi u. N u b m t ph n x toàn b (gi ng
m t
g ng) thì các tia ph n x s có h ng ng c v i h ng c a góc t i (Hình 8.1).
Trong tr ng h p ng c l i, n u b m t là không ph n x toàn ph n (có
nhám, xù xì) thì m t ph n các tia sáng s b to
các h ng khác hay b h p th ,
ph n còn l i thì ph n x l i, và l ng ánh sáng ph n x l i này t l v i góc t i.
ây chúng ta s quan tâm n hi n t ng ph n x không toàn ph n vì ây là hi n
t ng ph bi n (vì ch có nh ng i t ng
c c u t o t nh ng m t
m t
g
m i x y ra hi n t
ng ph n x toàn ph n), và
ng th i tìm cách tính c
ng
c a ánh sáng ph n x trên b m t.
óng
Các tính toán bóng th c ch t là vi
nh xem m
m trong khung
nhìn có n m trong vùng bóng không. M
n nó là m t phép ki m tra tính
hi n th c a m
m. Các thu t toán t o bóng c ng ph bi n là:
-
t t o bóng gi (Fakes Shadow) : các thu t toán t o bóng gi
bao g
ng h
c bi t t
nb
toán h c. Nh
t này ch
cs d
ng h
t(ví d
bóng ch v cho nh
c bi t, hay là bóng ch
c v lên m t m t
ph
o ra bóng làm cho ta có c m giác khá
th t.
Bóng kh i (Shadow Volume) : Bóng kh
t t o bóng c n
n c u trúc hình h c c a v
bóng. V
bóng ph
c t o b i các kh
nh và c nh vi n, là nh ng c
o nên
bóng kh i. M t tia sang khi chi u t i v t th s ti p xúc v i v t th t
m ho c
c nh vi
t m t ph ng nh n bóng. Nh ng c nh vi
nh vi n s t o ra
các m
a bóng kh i. T
a vào các phép ki m tra ta s ki m tra
cm
m trong khung c nh có thu c bóng kh i hay không.
Dùng b
bóng (Shadow Mapping)
t toán s d ng
nb
m chi
ng ch y u là s d ng b
chi u sâu
(hay còn g i là b
các giá tr chi u sâu khi t o nh t v trí c a
ánh sáng r
d ng các giá tr
c chi u sáng
hay n m trong bóng.
-
Nguy n Ti
- CT1301
17
án t t nghi p
p H i Phòng
L n theo tia sáng (Ray Tracing) : v i m
m t ta
vào không gian là m
ng th ng s c t vào c a s (màn hình) và ch m vào v t
th trong không gian (g n nh t t m t). T
m ch m v t th
m ch m vào v t th
i
nào mà ta chia ra các tia sáng khác
nhau.
.
:
khung (Frame Buffer Algorithms):
-
.
(Distributed and Bidirectional
-
Ray Tracing) :
-
.
-
nâng cao (Radiosity):
.
Nguy n Ti
- CT1301
18
án t t nghi p
p H i Phòng
PHÁP SHADOW VOLUME
2.1
.
2.1
Thu t toán bóng kh i là thu t toán t o bóng d a trên các thông tin v hình
d ng c a v t th c n t o bóng (Geometry Based Shadow Algorithm), vì th
h i ph i có các thông tin v tính k t n i c
a t t c các v t th
có th tính toán m t cách hi u qu và chính xác.
Các thông tin v v t th có th
cl yt m
nó th hi n hình d ng c
ng 3D b ng 2 danh sách:
nh.
Danh sách các c
Nguy n Ti
- CT1301
u và cu i c a t ng c nh.
19
án t t nghi p
p H i Phòng
nh và các c
th t cho thích h p.
Hình 2.2: Bi u di n c a m
Ngoài ra còn có th l y t
c t o ra khi ta s d ng các công c
xây d
Thu t toán bóng kh i còn là thu t toán trên t ng pixel (Per Pixel Algorithm)
Vì ta s th c hi n m t phép ki
c
v ra màn hình. Nó bao g m 2 ph n riêng bi t. Ph
hi
n vi c t o ra cái mà
u tiên chúng ta ph i th c
g i là bóng kh i.
.
M i v t th
i v i m i ngu n sáng s có m t bóng kh
ch xét v i m t ngu n sáng duy nh
t o ra bóng kh i là ta s
m
ác bao quanh vùng bóng kh i mà v t th t
i tìm ra danh sách các c nh vi n c
chúng là nh ng c nh ch y
t o ra bóng kh i, khi ánh sáng chi
c
không d ng l
p. Có th hi
ng c nh ti
v t th v i tia sáng.
Nguy n Ti
- CT1301
n ta s
xây d ng
c chi u
a v t th ,
n nh ng
p xúc c a
20
án t t nghi p
p H i Phòng
Hình 2.3: C nh vi
.
Hình 2.4: Khi nhìn t v trí c a ngu n sáng ta s không th y bóng và r t d
nh c
nh vi n.
t
c các c nh vi
c tiên ta c
nh m t nào c a v t
th s
c chi u b i ánh sáng và m t nào thì không. Vi
n khi ta
tt
c a ngu
nc am
am t
ph ng. Ta ch vi c thay t
ngu
t ph ng, r i tính k t
qu , n u k t qu
n và ngu n sáng n m cùng m t phía v i
m t ph
c chi u sáng. Th t
nh m
c chi u sáng
s
G i P[i](x,y,z) = a*x + b*
a m t th i
c a v t th .
L = (Lx, Ly, Lz) là v trí c a ngu n sáng.
n: S m t c a v t th
Procedure VisiblePlaneTest( )
Nguy n Ti
- CT1301
21
án t t nghi p
p H i Phòng
Begin
Side: interger;
For i = 0 to n do
Begin
Side =a*Lx + b*Ly + c*Lz + d;
if (Side>0) then P[i].visible = True
else P[i].visible = False;
End
End
M i c nh s có 2 m t ch a nó, m i c nh vi n s ph i có m
chi u t i b i ánh sáng và m t thì b che. B i vì n u c
sáng ho c là c
u b che thì c n
không ph i là c nh vi
thu t toán tìm danh sách các c nh vi
i d ng mã gi
G
c
c chi u
i c a v t th .
n: là s
Procedure Danhsachcanhvien()
Begin
for i = 0 to n do
if (P[i].visible = true}
// Ki m tra t t c
giác.
// N u m t ch
c chi u
sáng
Begin
for {t t c c nh c
if {c
do
trong danh sách c nh vi n}
- Lo i b nó ra kh i danh sách.
else
- Thêm c
End;
End;
Nguy n Ti
- CT1301
22
án t t nghi p
p H i Phòng
Code tìm danh sách c nh vi n
for(int ring=1; ring
{
for(int i=0; i
{
vertices[ring*(torusPrecision+1)+i].position=vertices[i].position.GetRotated
Y(ring*360.0f/torusPrecision);
vertices[ring*(torusPrecision+1)+i].normal=vertices[i].normal.GetRotatedY(
ring*360.0f/torusPrecision);
}
}
//calculate the indices
for(int ring=0; ring
{
for(int i=0; i
{
indices[((ring*torusPrecision+i)*2)*3+0]=ring*(torusPrecision+1)+i;
indices[((ring*torusPrecision+i)*2)*3+1]=(ring+1)*(torusPrecision+1)+i;
indices[((ring*torusPrecision+i)*2)*3+2]=ring*(torusPrecision+1)+i+1;
indices[((ring*torusPrecision+i)*2+1)*3+0]=ring*(torusPrecision+1)+i+1;
indices[((ring*torusPrecision+i)*2+1)*3+1]=(ring+1)*(torusPrecision+1)+i;
1;
indices[((ring*torusPrecision+i)*2+1)*3+2]=(ring+1)*(torusPrecision+1)+i+
}
}
//Calculate the plane equation for each face
Nguy n Ti
- CT1301
23
án t t nghi p
p H i Phòng
planeEquations=new PLANE[numTriangles];
if(!planeEquations)
{
errorLog.OutputError("Unable to allocate memory for %d
planes", numTriangles);
return false;
}
for(unsigned int j=0; j
{
planeEquations[j].SetFromPoints(vertices[indices[j*3+0]].position,
vertices[indices[j*3+1]].position,
vertices[indices[j*3+2]].position);
}
2.3
nh vi n r i, chúng ta s t o ra bóng kh i
b ng cách xây d ng các t giác t m i c nh vi
a vào v trí c a ngu n sáng.
n
uc at
nh c a c nh vi
nh ti p theo s n
ng
th ng n i gi a ngu
nh này theo lý thuy t s
c chi u ra
vô c
s không c n thi t vì th ta s ch cho chúng các giá tr t
l n là
c.
nh c a m t c nh vi n b t k trong danh sách.
L là v trí c a ngu n sáng.
v3 và v4 s
m c n tìm t
t o ra t giác.
Const He_so_chieu 100 //H s chi u này
là m t s l n.
v3.x = (v1.x - L.x) * He_so_chieu;
v3.y = (v1.y - L.y) * He_so_chieu;
v3.z = (v1.z - L.z) * He_so_chieu;
v4.x = (v2.x - L.x) * He_so_chieu;
Nguy n Ti
- CT1301
24