1. Trang chủ
  2. » Công Nghệ Thông Tin

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

40 117 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 40
Dung lượng 5,6 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Tìm hiểu kỹ thuật tạo bóng cứng Shadow VolumeTìm hiểu kỹ thuật tạo bóng cứng Shadow VolumeTìm hiểu kỹ thuật tạo bóng cứng Shadow VolumeTìm hiểu kỹ thuật tạo bóng cứng Shadow VolumeTìm hiểu kỹ thuật tạo bóng cứng Shadow VolumeTìm hiểu kỹ thuật tạo bóng cứng Shadow VolumeTìm hiểu kỹ thuật tạo bóng cứng Shadow VolumeTìm hiểu kỹ thuật tạo bóng cứng Shadow VolumeTìm hiểu kỹ thuật tạo bóng cứng Shadow VolumeTìm hiểu kỹ thuật tạo bóng cứng Shadow VolumeTìm hiểu kỹ thuật tạo bóng cứng Shadow VolumeTìm hiểu kỹ thuật tạo bóng cứng Shadow VolumeTìm hiểu kỹ thuật tạo bóng cứng Shadow VolumeTìm hiểu kỹ thuật tạo bóng cứng Shadow VolumeTìm hiểu kỹ thuật tạo bóng cứng Shadow Volume

Trang 2

L I C

d cho chúng em nh ng ki n th c b ích và quý giá trong su t 4

i.

Trang 3

M c L 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 m nhìn 31

2.5.2 T t c các m t sau c a bóng t v m nhìn 32

2.5.3 V y n u c a kh i 33

2.6 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

Trang 4

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í

Trang 5

ng trong th gi i th c ph n l ng 3 chi u còn thi t

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 c chuy n qua t c a thi t b chu n hóa

cho vùng không gian mà ta mu c

Trang 6

và y c a t thi t b chu n hóa sang t Pixel c a màn hình Thành ph n z ( 1 z 1 c chuy n [0,1] và s c s d ng

chi u sâu (Depth-Value) trong thu t toán Z-Buffer (b c s

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 i affine (Vì w s nh n m t giá tr khác 1)

c ti p theo, các vùng c a không gian hi n th mà không n m trong kh i tiêu chu 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 chianày s ng ph i c nh mong mu

c g i là phép chia ph i c nh (Perspective Division)

Trang 7

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 t camera c cho tùy ý v m t camera

v m nhìn trùng v i g c t ng nhìn d c theo chi u âm c a tr c Z (xem hình 2.1) Tr c Y sau phép bi ng s ch lên phía trên c a màn hình Tr c X s ch v phía ph i

M t cách thu n ti 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 m tham chi u) và m ng s

ch lên phía trên trong màn hình

Phép bi i hi n th s g c:

Trang 8

R E

n V

n V

u Ch v phía ph i, vuông góc v i n X

u n

Trang 9

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 t Các m t c a ng song song này song song v i các

m t c a h t m 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 a s này ph i

d ng hình vuông [-1,+1]2 zfront và zback m t ph ng c t

c và c t sau T c a t t c 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 n [- m g n m t

có giá tr chi u sâu nh

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 c b ng cách th c hi n các phép bi i sau theo th t :

nh ti n M t ( M) s a vùng không gian hi n th v g c

c c a vùng hi n th v m i chi u

Trang 10

i x ng qua m m n m g nh n giá tr z nh

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

b ng cách chia x ,y ,z cho w (Phép chia ph i c nh):

Trang 11

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

Trang 12

1.1.2

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

chi u sâu Các m 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 u m 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

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

m này là Z-buffer

b Depth test: V i m i pixel trên màn hình, b m chi ng

c coi là qua Depth test (depth test pass) và giá tr chi u sâu c c

Trang 13

thay th cho giá tr m N u giá tr chi u sâu c

v i m t giá tr tham chi u theo m

glStencilOp(GLenum fail, GLenum zfail, GLenum zpass);

Hà nh d li u trong stencil Buffer s i th nào n

m m tra stencil 3 hàm fail, zfail và zpass có th là

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

Trang 15

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

m m hi n th vùng n a bóng bên ngoài vùng bóng trung tâm và ph i

ánh sáng b t quy t c trong vùng n a bóng)

Trang 16

.

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

Trang 17

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 ng nh t, tuy nhiên khi nó g p m t b m t nó s b phân rã b ng nhau v m ng, Vì th

m m hay t m ng nh u có thành ph n Diffuse Light

Hình 1.9: 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ángxung 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 ng c a chúng có gi ng

Trang 18

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 ,

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

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

(hay còn g i là b các giá tr chi u sâu khi t o nh t v trí c a

hay n m trong bóng

Trang 19

- 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ào v t th i

m ch m v t th nào mà ta chia ra các tia sáng khác nhau

.:

- khung (Frame Buffer Algorithms):

Trang 20

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 c l y t m

nó th hi n hình d ng c ng 3D b ng 2 danh sách:

nh

Trang 21

ch xét v i m t ngu n sáng duy nh t o ra bóng kh i là ta s xây d ng

m ác bao quanh vùng bóng kh i mà v t th t c chi u

i tìm ra danh sách các c nh vi n c a v t th , chúng là nh ng c nh ch y t o ra bóng kh i, khi ánh sáng chi n nh ng

v t th v i tia sáng

Trang 23

Side: interger;

For i = 0 to n do Begin

thu t toán tìm danh sách các c nh vi i d ng mã gi

n: là s

Procedure Danhsachcanhvien() Begin

for i = 0 to n do // Ki m tra t t c giác

if (P[i].visible = true} // N u m t ch c chi u sáng

Trang 24

}}

//calculate the indicesfor(int ring=0; ring<torusPrecision; ring++){

for(int i=0; i<torusPrecision; 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;

Trang 25

planeEquations=new PLANE[numTriangles];

if(!planeEquations){

errorLog.OutputError("Unable to allocate memory for %d planes", numTriangles);

return false;

}for(unsigned int j=0; j<numTriangles; ++j){

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

Trang 26

v4.y = (v2.y - L.y) * He_so_chieu;

v t th i v i v trí c a ánh sáng N p m t sau thì ta ch c n chi u t ng m t sau c a

2.6

Trang 27

nh các t giác bao quanh bóng kh i

isFacingLight=new bool[numTriangles];

if(!isFacingLight){

errorLog.OutputError("Unable to allocate memory for %d booleans", numTriangles);

return false;

}//Create space for connectivity dataneighbourIndices=new GLint[numTriangles*3];

if(!neighbourIndices){

errorLog.OutputError("Unable to allocate memory for %d neighbour indices", numTriangles*3);

return false;

}//Create space for "is silhouette edge" booleansisSilhouetteEdge=new bool[numTriangles*3];

if(!isSilhouetteEdge){

errorLog.OutputError("Unable to allocate memory for %d booleans", numTriangles*3);

return false;

}//Calculate the neighboursSetConnectivity();

return true;

}

Trang 28

t bao nhiêu m c, bao nhiêu m t sau ta sdùng m t b m cho m m c n ki m tra, mà s

ph n bóng, Còn n u nó l m này n m trong vùng bóng và

m trong vùng bóng kh i N u nó c t s m c c a bóng kh i

Thu t toán s c mô t b ng mã gi

Procedure IN_SHADOW_TEST // Z-pass

Trang 29

For {T t c các m t sau c a bóng kh i nhìn t v trí c m nhìn} do

if Depth test passes then

- Gi m giá tr Stencil Buffer

End if End for

Trang 30

2.9

2.10 : Không

.

c th c hiXóa h t trong Z-buffer và Stencil-Buffer, Ch c ch n r ng Ch ghi vào Z-

Trang 31

- V các m t sau c a bóng kh i, N u chúng th c s c v ra.(Có

m giá tr Stencil Buffer

- B t ch Stencil test (ch nh m có giá tr Stencil = 0 m i

c v ra màn hình), Xóa Z-buffer, b t ch ghi vào Z-buffer, b t ngu n sáng

- V ra toàn b khung c nh nh m có giá tr trong stencil Buffer là 0

Cách th 3 là s d ng thu t toán Z-Fail do Thay vì tính toán giá tr Stencil

b ng vi c c a bóng kh i và gi m giá tr c a các m t sau khi Buffer Pass, toàn b quá trình s m t vô c m t

Z-m nhìn Vì th thu t toán này còn g i là Z-Fails

Thu t toán Z- c th hi n b n mã gi sau:

Procedure IN_SHADOW_TEST // Z-fail

if Depth test fails then

- Gi m giá tr Stencil Buffer

End if

Trang 32

2.5.1

Void SHADOW_MODEL::SetConnectivity()

{

//set the neighbour indices to be -1

for(unsigned int i=0; i<numTriangles*3; ++i)

neighbourIndices[i]=-1;

//loop through triangles

for(unsigned int i=0; i<numTriangles-1; ++i){

//loop through edges on the first triangle

for(int edgeI=0; edgeI<3; ++edgeI)

{//continue if this edge already has a neighbour set

if(neighbourIndices[i*3+edgeI]!=-1)

continue;

//loop through triangles with greater indices than this one

for(unsigned int j=i+1; j<numTriangles; ++j)

{//loop through edges on triangle jfor(int edgeJ=0; edgeJ<3; ++edgeJ)

{

Trang 33

//get the vertex indices on each edge

if(planeEquations[i].ClassifyPoint(lightPosition)==POINT_IN_FRONT_OF_PLANE)

isFacingLight[i]=true;

elseisFacingLight[i]=false;

}

//loop through edgesfor(unsigned int i=0; i<numTriangles*3; ++i){

//if this face is not facing the light, not a silhouette edge

Trang 34

isSilhouetteEdge[i]=0;

continue;

}//this face is facing the light

//if the neighbouring face is not facing the light, or there is no neighbouring face,//then this is a silhouette edge

Void SHADOW_MODEL::DrawInfiniteShadowVolume(VECTOR3D lightPosition, bool drawCaps)

//Loop through edges on this face

for(int j=0; j<3; ++j)

Trang 35

{//Draw the shadow volume "edge" if this is a silhouette edge

glVertex4f( vertex2.x-lightPosition.x,

vertex2.y-lightPosition.y,vertex2.z-lightPosition.z, 0.0f);

}}

}}

glEnd();

//Draw caps if required

if(drawCaps){

glBegin(GL_TRIANGLES);

{ for(unsigned int i=0; i<numTriangles; ++i)

{ for(int j=0; j<3; ++j)

{VECTOR3D vertex=vertices[indices[i*3+j]].position;

Trang 36

(Self-Shadow)

Trang 37

3.1 Bài toán

ng d ng k thu t t o bóng c ng minh h a cho k t qu tài s d ng ngôn ng l p trình visual c.net và ch ng

Ph n quan tr ng c a VS NET là các công ngh m i v i trung tâm là NET

xây d ng ng d ng Windows, ng d ng web và d ch v web XML T t c ngôn ng c d ch sang d ng ngôn ng trung gian c a

d ng mã th c thi b i m t trình d ch JIT (Just in Time) trên n n NET

CLR và MSIL cho phép t t c các ngôn ng NET làm vi c v i nhau Ví d

b n có th dùng m t l p C# k th a t m i t ng COM C++/ATL, l p này l i

phép tích h , b n có th ch y t b y l i qua c 3 ngôn ngtrong cùng m ng phát tri n ng d ng VS.NET

Trình d ch JIT cung c p thêm kh o m t, tính an toàn lúc th c thi và

kh y trên nhi u n n t ng (Microsoft cho bi t s dùng m t t p con chu n hoá c a NET Framework - c g i là n n t ng ngôn ng - xây d ng

m t th hi n trên FreeBSD) N u trình JIT cho mã ngôn ng trung gian làm b n liên

ng l ng dùng ngôn ngtrung gian trong Vbasic và h u h t các ph n m m ng d ng c a mình (k c

Office)t nhi

C# m t ngôn ng phát tri n t C++ có nhi u nét gi

, ngôn ng Visual C++ quen thugói vào VS.NET là Visual C++.NET bao g m ph n C++ truy n th ng dùng cho ng

d c l p v i ph n m dùng v i n n NET V ph n

p khá nhi u cho s

Trang 38

Mô t : D án này s hi n th b n Tori xoay quanh m m ánh sáng ngu n

qua:

1 V toàn b c nh lit c a ambient và m ng nh diffuse ánh sáng

t giá tr chi u sâu cho nhìn th y c nh

2 V kh i tin vào bóng t i stencil buffer Theo m nh, bóng t i kh i tin, s d ng "zFail" k thu t, v i m t infinite clip

c mô t trong "m nh m Stenciled Shadow volumes" gi y

3 V c nh lit v diffuse và specular, trong khu v c unshadowed

Yêu c u:

i v i hai bên-stencil Shadows:

EXT_stencil_two_side: kh ng bóng t i có th c rút ra ch m t l n cho t ng, ch không ph i hai l n Ph n c ng s g / gi m các b m

Ngày đăng: 27/02/2018, 09:35

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm