+ All Categories
Home > Documents > lecture12-ch5.ppt [호환 모드]dis.dankook.ac.kr/.../sites/75/2020/11/lecture12-ch5.pdf11/5/2020...

lecture12-ch5.ppt [호환 모드]dis.dankook.ac.kr/.../sites/75/2020/11/lecture12-ch5.pdf11/5/2020...

Date post: 17-Mar-2021
Category:
Upload: others
View: 2 times
Download: 0 times
Share this document with a friend
24
Viewing 527970 Fall 2020 11/5/2020 Kyoung Shin Park Computer Engineering Dankook University
Transcript
Page 1: lecture12-ch5.ppt [호환 모드]dis.dankook.ac.kr/.../sites/75/2020/11/lecture12-ch5.pdf11/5/2020 Kyoung Shin Park Computer Engineering Dankook University Camera Movement To give

Viewing

527970Fall 202011/5/2020

Kyoung Shin ParkComputer Engineering

Dankook University

Page 2: lecture12-ch5.ppt [호환 모드]dis.dankook.ac.kr/.../sites/75/2020/11/lecture12-ch5.pdf11/5/2020 Kyoung Shin Park Computer Engineering Dankook University Camera Movement To give

Camera Movement

To give a camera movement in OpenGL, you can apply a transformation matrix opposite to the camera movement at the beginning of the display function.

For example, to move the camera 10 units in z-axis from the origin, you can move the world by -10 units in z-axis.

void display(){

Projection = glm::perspective(45, 1, 0.1, 1000);View = glm::mat4(1.0f); // Identity matrixWorld = glm::translate(glm::mat4(1.0f), glm::vec3(0, 0, -10));drawObjects();

}

Page 3: lecture12-ch5.ppt [호환 모드]dis.dankook.ac.kr/.../sites/75/2020/11/lecture12-ch5.pdf11/5/2020 Kyoung Shin Park Computer Engineering Dankook University Camera Movement To give

Camera Movement

In general camera movement, the camera position and orientation is applied to the world as an inverse transformation matrix.

Example

float cameraX, cameraY, cameraZ, cameraHeading;void display(){

Projection = perspective(45, 1, 0.1, 1000);View = mat4(1.0f); // Identity matrixWorld = rotate(mat4(1.0f), -cameraHeading, vec3(0, 1, 0))

* translate(mat4(1.0f), vec3(-cameraX, -cameraY, -cameraZ));drawObjects();

}

Page 4: lecture12-ch5.ppt [호환 모드]dis.dankook.ac.kr/.../sites/75/2020/11/lecture12-ch5.pdf11/5/2020 Kyoung Shin Park Computer Engineering Dankook University Camera Movement To give

Camera Movement

Navigation Fly-through (6DOF)

Yaw (y), pitch (x), roll (z) orientation Walk forward/backward (z), strafe right/left (x), fly up/down

(y) movement Walk-through (2DOF)

Pan (y) Walk forward/backward (z)

Page 5: lecture12-ch5.ppt [호환 모드]dis.dankook.ac.kr/.../sites/75/2020/11/lecture12-ch5.pdf11/5/2020 Kyoung Shin Park Computer Engineering Dankook University Camera Movement To give

Hidden Surface

Hidden surfaces provides the occlusion depth cue. In computer graphics, the term occlusion refers to

objects that are close to the viewer to occlude objects that are far from the viewer.

In the graphics pipeline, hidden surface removal is performed before shading and rasterization with occlusion culling.

Page 6: lecture12-ch5.ppt [호환 모드]dis.dankook.ac.kr/.../sites/75/2020/11/lecture12-ch5.pdf11/5/2020 Kyoung Shin Park Computer Engineering Dankook University Camera Movement To give

Hidden Surface Removal

Hidden Surface Removal Algorithm Object space technique – compare objects or parts of objects to

determine which side and line are not visible as a whole. Depth-sorting algorithm – After aligning each side of the polygon

according to the depth, it is drawn from the far one to front one. Also known as Painter’s algorithm.

Binary Space Partitioning (BSP) tree – Using BSP tree, the space is continuously partitioned by separating front and back according to the viewer direction.

Image space technique – act as part of the projection, and visibility is determined in units of points at the location of object pixels on each projection line. Z-buffer (depth buffer) – This is the most commonly used image

space technique. By examining the visibility of an object in pixels, it draws the value of the plane with the smallest z (depth) value. We need a depth buffer (z-buffer) to store the z-value.

Ray-casting – It projects light (ray) through each pixel on the projection surface at the viewpoint, selects the object that first meets this light and draws the pixel. It is an effective hidden surface removal algorithm for curved surface.

Page 7: lecture12-ch5.ppt [호환 모드]dis.dankook.ac.kr/.../sites/75/2020/11/lecture12-ch5.pdf11/5/2020 Kyoung Shin Park Computer Engineering Dankook University Camera Movement To give

Hidden Surface Removal

Hidden surface removal methods Depth test

glEnable(GL_DEPTH_TEST);

Cull the face/backside glEnable(GL_CULL_FACE); glCullFace(GL_FRONT); glCullFace(GL_BACK);

Page 8: lecture12-ch5.ppt [호환 모드]dis.dankook.ac.kr/.../sites/75/2020/11/lecture12-ch5.pdf11/5/2020 Kyoung Shin Park Computer Engineering Dankook University Camera Movement To give

Z-buffer

Page 9: lecture12-ch5.ppt [호환 모드]dis.dankook.ac.kr/.../sites/75/2020/11/lecture12-ch5.pdf11/5/2020 Kyoung Shin Park Computer Engineering Dankook University Camera Movement To give

Z-buffer

Polygon rendering means eventually being filled with pixels.

The color buffer contains RGB color per pixel to be drawn.

The depth buffer (Z-buffer) has depth information per pixel to be drawn.

Color buffer Depth buffer

Page 10: lecture12-ch5.ppt [호환 모드]dis.dankook.ac.kr/.../sites/75/2020/11/lecture12-ch5.pdf11/5/2020 Kyoung Shin Park Computer Engineering Dankook University Camera Movement To give

Z-buffer Algorithm

Whenever a new pixel is drawn, the Z-buffer algorithm compares the new depth information with the previous depth information in the z-buffer.

Polygons can be drawn in any direction and can intersect.

Color buffer Depth buffer

Page 11: lecture12-ch5.ppt [호환 모드]dis.dankook.ac.kr/.../sites/75/2020/11/lecture12-ch5.pdf11/5/2020 Kyoung Shin Park Computer Engineering Dankook University Camera Movement To give

OpenGL Z-buffering

To use the z-buffer in OpenGL, first initialize the depth buffer and then activate the depth test.glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH);glEnable(GL_DEPTH_TEST);

Clear the depth buffer in every frame in display function.glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

Activate the culling to remove all faces facing away from the viewer.glEnable(GL_CULL);

Page 12: lecture12-ch5.ppt [호환 모드]dis.dankook.ac.kr/.../sites/75/2020/11/lecture12-ch5.pdf11/5/2020 Kyoung Shin Park Computer Engineering Dankook University Camera Movement To give

Depth Fighting

The depth value of the Z-buffer has a limited resolution. The overlap of polygons with a depth value that is very

close to the depth buffer creates “depth-fighting”. This is a phenomenon that occurs due to “floating point

round-off errors” when polygons are drawn, where random parts of polygons flight for rendering each other.

Page 13: lecture12-ch5.ppt [호환 모드]dis.dankook.ac.kr/.../sites/75/2020/11/lecture12-ch5.pdf11/5/2020 Kyoung Shin Park Computer Engineering Dankook University Camera Movement To give

Planar Shadow [J. Blinn, 88]

101000000000

1

0

z

y

x

y

yz

xy

z

x

ppp

lll

ll

s

s

yy

y

pll

t

dlptl

0sn

s

sy = 0

yy

y

xyy

xxyx

yy

y

xx

xx

xx

y

xx

yy

pll

t

lpllpl

pll

lpl

ll

lppl

s

s

s0

0

Page 14: lecture12-ch5.ppt [호환 모드]dis.dankook.ac.kr/.../sites/75/2020/11/lecture12-ch5.pdf11/5/2020 Kyoung Shin Park Computer Engineering Dankook University Camera Movement To give

Planar Shadow [J. Blinn, 88]

101000000000

1

0

z

y

x

y

yz

xy

z

x

ppp

lll

ll

s

s

zzyy

yzz

y

xxyy

yxx

yy

y

lppl

lls

s

lppl

lls

lppl

ll

0

s

yy

yxxy

yy

xxyyyx

xxyy

yxx

plplpl

pllplpll

lppl

lls

yy

zyyz

yy

zzyyyz

zzyy

yzz

plplpl

pllplpll

lppl

lls

sx = lypx – lxpy+ 0pzsy = 0sz = 0px – lzpy + lypzw = 0px – py +0pz +ly

Page 15: lecture12-ch5.ppt [호환 모드]dis.dankook.ac.kr/.../sites/75/2020/11/lecture12-ch5.pdf11/5/2020 Kyoung Shin Park Computer Engineering Dankook University Camera Movement To give

Projection Shadow

p

n·p+d=0

L

s

0

dlptl

sns 0 dlptln

lpldt

ldlptdlptl

nnn

nnnnn

)( lpl

dll

p

nnns

Point light source (at Point L)

11z

y

x

zyx

zzzyzxz

yzyyyxy

xzxyxxx

z

y

x

ppp

lnnnndlnldlnnlnldlnlnldlnnldlnlnlnldln

sss

Page 16: lecture12-ch5.ppt [호환 모드]dis.dankook.ac.kr/.../sites/75/2020/11/lecture12-ch5.pdf11/5/2020 Kyoung Shin Park Computer Engineering Dankook University Camera Movement To give

Projection Shadow

zzzz

yyyy

xxxx

lppnln

dlnls

lppnln

dlnls

lppnln

dlnls

lppnln

dlnl

s

lnpnpnpn

dlpnlpnlpnldln

lnpnpnpndllnlpdlnpnlpnlpnllnl

pnlnldlnpdlnpnlnl

lppnln

dlnls

zzyyxx

xzzxyyxxxx

zzyyxx

xxxzzxyyxxxxx

xxx

xxxx

11z

y

x

zyx

zzzyzxz

yzyyyxy

xzxyxxx

z

y

x

ppp

lnnnndlnldlnnlnldlnlnldlnnldlnlnlnldln

sss

Page 17: lecture12-ch5.ppt [호환 모드]dis.dankook.ac.kr/.../sites/75/2020/11/lecture12-ch5.pdf11/5/2020 Kyoung Shin Park Computer Engineering Dankook University Camera Movement To give

Projection Shadow Matrix

1,0],,,[

],,,[

11

wwwzyx

wzyx

z

y

x

wwzwywxw

wzzzyzxz

wyzyyyxy

wxzxyxxx

z

y

x

llllwherelllll

nnnnn

ppp

nllnnlnlnlnlnllnnlnlnlnlnllnnlnlnlnlnlln

sss

점광원이면평행광원이면광원

투영평면

Page 18: lecture12-ch5.ppt [호환 모드]dis.dankook.ac.kr/.../sites/75/2020/11/lecture12-ch5.pdf11/5/2020 Kyoung Shin Park Computer Engineering Dankook University Camera Movement To give

Projection Shadow Matrix// create a shadow matrix that will project the desired shadowvoid ShadowMatrix(GLfloat shadowMat[16], GLfloat plane[4], GLfloat lightpos[4]) {

GLfloat dot; // dot product of light position and ground plane normaldot = plane[0] * lightpos[0] + plane[1] * lightpos[1] + plane[2] * lightpos[2]

+ plane[3] * lightpos[3];shadowMat[0] = dot - lightpos[0] * plane[0]; shadowMat[1] = 0.f - lightpos[1] * plane[0]; shadowMat[2] = 0.f - lightpos[2] * plane[0]; shadowMat[3] = 0.f - lightpos[3] * plane[0]; shadowMat[4] = 0.f - lightpos[0] * plane[1]; shadowMat[5] = dot - lightpos[1] * plane[1]; shadowMat[6] = 0.f - lightpos[2] * plane[1]; shadowMat[7] = 0.f - lightpos[3] * plane[1]; shadowMat[8] = 0.f - lightpos[0] * plane[2]; shadowMat[9] = 0.f - lightpos[1] * plane[2]; shadowMat[10] = dot - lightpos[2] * plane[2]; shadowMat[11] = 0.f - lightpos[3] * plane[2]; shadowMat[12] = 0.f - lightpos[0] * plane[3]; shadowMat[13] = 0.f - lightpos[1] * plane[3]; shadowMat[14] = 0.f - lightpos[2] * plane[3]; shadowMat[15] = dot - lightpos[3] * plane[3];

}

Page 19: lecture12-ch5.ppt [호환 모드]dis.dankook.ac.kr/.../sites/75/2020/11/lecture12-ch5.pdf11/5/2020 Kyoung Shin Park Computer Engineering Dankook University Camera Movement To give

Shadow

Render with shadowRender without shadow

Page 20: lecture12-ch5.ppt [호환 모드]dis.dankook.ac.kr/.../sites/75/2020/11/lecture12-ch5.pdf11/5/2020 Kyoung Shin Park Computer Engineering Dankook University Camera Movement To give

Reflection

http://www.gamasutra.com/features/19990723/opengl_texture_objects_02.htm

Page 21: lecture12-ch5.ppt [호환 모드]dis.dankook.ac.kr/.../sites/75/2020/11/lecture12-ch5.pdf11/5/2020 Kyoung Shin Park Computer Engineering Dankook University Camera Movement To give

Planar Reflection

How to calculate the reflection point, q’=(x0’, y0’, z0’) of the point, q=(x0, y0, z0) for the mirror plane (n, d)

000 ,, zyxq

',','' 000 zyxq

vector unit is n whenn

n

n

)(2

2

2'

222000

dqnqcba

dczbyaxq

kqq

1000221222221222221

2

2

2

cdcbcacbdbcbabadacaba

R

npkn

Plane n· p + d = 0

-2knp = q - kn

Rqq '

The signed shortest distance from point q to planeis k = n•q + d (if n is a unit vector)

Page 22: lecture12-ch5.ppt [호환 모드]dis.dankook.ac.kr/.../sites/75/2020/11/lecture12-ch5.pdf11/5/2020 Kyoung Shin Park Computer Engineering Dankook University Camera Movement To give

Planar Reflection

)1()(2'''

222000

0

0

0

0

0

0

cbavectorunitisnwhen

cba

dczbyaxzyx

zyx

adaczabyxa

adczbyaxxx

222)21(

)(2'

0002

00000

bdbczybabx

bdczbyaxyy

22)21(2

)(2'

002

0

00000

cdzcbcyacx

cdczbyaxzz

2)21(22

)(2'

02

00

00000

1000221222221222221

2

2

2

cdcbcacbdbcbabadacaba

R

0

0

0

0

0

0

'''

zyx

Rzyx

Page 23: lecture12-ch5.ppt [호환 모드]dis.dankook.ac.kr/.../sites/75/2020/11/lecture12-ch5.pdf11/5/2020 Kyoung Shin Park Computer Engineering Dankook University Camera Movement To give

Planar Reflection

Reflection transformation matrix for the plane (yz-, xz-, xy-plane)

1000010000100001

yzR

1000010000100001

xzR

1000010000100001

xyR

yz-plane Plane(1,0,0,0) xz-plane Plane(0,1,0,0) xy-plane Plane(0,0,1,0)

Page 24: lecture12-ch5.ppt [호환 모드]dis.dankook.ac.kr/.../sites/75/2020/11/lecture12-ch5.pdf11/5/2020 Kyoung Shin Park Computer Engineering Dankook University Camera Movement To give

Planar Reflection Matrixvoid ReflectionMatrix(GLfloat reflectionMat[16], GLfloat plane[4]) // create a reflection matrix {

reflectionMat[0] = 1 - 2 * plane[0] * plane[0]; reflectionMat[1] = - 2 * plane[0] * plane[1]; reflectionMat[2] = - 2 * plane[0] * plane[2]; reflectionMat[3] = - 2 * plane[0] * plane[3];

reflectionMat[4] = - 2 * plane[1] * plane[0]; reflectionMat[5] = 1 - 2 * plane[1] * plane[1]; reflectionMat[6] = - 2 * plane[1] * plane[2]; reflectionMat[7] = - 2 * plane[1] * plane[3];

reflectionMat[8] = - 2 * plane[2] * plane[0]; reflectionMat[9] = - 2 * plane[2] * plane[1]; reflectionMat[10] = 1 - 2 * plane[2] * plane[2]; reflectionMat[11] = - 2 * plane[2] * plane[3];

reflectionMat[12] = 0.0; reflectionMat[13] = 0.0; reflectionMat[14] = 0.0; reflectionMat[15] = 1.0;

}


Recommended