Tải bản đầy đủ (.pdf) (40 trang)

Tìm hiểu kỹ thuật tạo bóng cứng Shadow Volume (Đồ án tốt nghiệp)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (5.6 MB, 40 trang )

-------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);


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 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


×