lecture12-ch5.ppt [호환 모드]dis.dankook.ac.kr/.../sites/75/2020/11/lecture12-ch5.pdf11/5/2020...
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](https://reader035.vdocuments.net/reader035/viewer/2022071420/6119390eb70e0230c65a715e/html5/thumbnails/1.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071420/6119390eb70e0230c65a715e/html5/thumbnails/2.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071420/6119390eb70e0230c65a715e/html5/thumbnails/3.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071420/6119390eb70e0230c65a715e/html5/thumbnails/4.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071420/6119390eb70e0230c65a715e/html5/thumbnails/5.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071420/6119390eb70e0230c65a715e/html5/thumbnails/6.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071420/6119390eb70e0230c65a715e/html5/thumbnails/7.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071420/6119390eb70e0230c65a715e/html5/thumbnails/8.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071420/6119390eb70e0230c65a715e/html5/thumbnails/9.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071420/6119390eb70e0230c65a715e/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071420/6119390eb70e0230c65a715e/html5/thumbnails/11.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071420/6119390eb70e0230c65a715e/html5/thumbnails/12.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071420/6119390eb70e0230c65a715e/html5/thumbnails/13.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071420/6119390eb70e0230c65a715e/html5/thumbnails/14.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071420/6119390eb70e0230c65a715e/html5/thumbnails/15.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071420/6119390eb70e0230c65a715e/html5/thumbnails/16.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071420/6119390eb70e0230c65a715e/html5/thumbnails/17.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071420/6119390eb70e0230c65a715e/html5/thumbnails/18.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071420/6119390eb70e0230c65a715e/html5/thumbnails/19.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071420/6119390eb70e0230c65a715e/html5/thumbnails/20.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071420/6119390eb70e0230c65a715e/html5/thumbnails/21.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071420/6119390eb70e0230c65a715e/html5/thumbnails/22.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071420/6119390eb70e0230c65a715e/html5/thumbnails/23.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022071420/6119390eb70e0230c65a715e/html5/thumbnails/24.jpg)
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;
}