3d viewing 5542 - computer science and...
TRANSCRIPT
![Page 1: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/1.jpg)
3D viewing Set up a 3D scene is like taking a
photographp g p
![Page 2: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/2.jpg)
Viewing
Position and orient your camera
![Page 3: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/3.jpg)
Projection
Control the “lens” of the camera Project the object from 3D world to 2D screen Project the object from 3D world to 2D screen
![Page 4: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/4.jpg)
Viewing Important camera parameters to specify
Camera (eye) position (Ex,Ey,Ez) in world coordinate system
Center of interest (coi) (cx, cy, cz) Orientation (which way is up?) View up vector Orientation (which way is up?) View-up vector
(Up_x, Up_y, Up_z)
world(ex, ey, ez)
view up vectorworld(cx, cy, cz)
view up vector(Up_x, Up_y, Up_z)
![Page 5: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/5.jpg)
Viewing
Camera position and orientation forms a camera (eye) coordinate framecamera (eye) coordinate frame
uv n
ld
ny
Eye coordinate frame coi
Transform objects from world to eye space
world x
z
Transform objects from world to eye space
![Page 6: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/6.jpg)
Eye Space
Right hand coordinate system
uv ny
(1,0,0)(0,1,0)(0,0,1)
world x
y(0,0,0)
coi
z
Transform to eye space can simplify many d t ti ( h j ti ) i thdownstream operations (such as projection) in the pipeline
![Page 7: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/7.jpg)
OpenGL fixed function pipeline
In OpenGL:- gluLookAt (Ex, Ey, Ez, cx, cy, cz,
Up_x, Up_y, Up_z) h ll ( )- The view up vector is usually (0,1,0)
- Remember to set the OpenGL matrix mode to GL MODELVIEW firstGL_MODELVIEW first
![Page 8: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/8.jpg)
OpenGL fixed function pipeline
void display() {{
glClear(GL_COLOR_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); lL dId i ()glLoadIdentity();
gluLookAt(0,0,1,0,0,0,0,1,0);my_display(); // your display routiney_ p y(); // y p y
}
![Page 9: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/9.jpg)
Demo
![Page 10: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/10.jpg)
Projection Transformation
Control how to project the object from 3D 2D3D to 2D Perspective or Orthographic Field of view and image aspect ratio Near and far clipping planes
![Page 11: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/11.jpg)
Orthographic Projection
No foreshortening effect – distance from camera does not mattercamera does not matter
The projection center is at infinite
Projection calculation – just drop z coordinates
![Page 12: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/12.jpg)
Perspective Projection
Characterized by object foreshorteningObj t t b l if th l t- Objects appear to be larger if they are closer to
the camera- This is what happens in the real worldThis is what happens in the real world
Need: Projection center camera Field of View Image, near, far planes
Projection: Connecting the object
camera
Projection: Connecting the objectto the projection center
projection plane
![Page 13: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/13.jpg)
Field of View
Determine how much of the world is taken into the picturepicture
yyfield of view
center of projection
y
z
y
z
The larger is the field view, the smaller is the object projection size
x
projection size
![Page 14: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/14.jpg)
Near and Far Clipping Planes
Only objects between near and far planes are drawndrawn
y
Near plane Far plane
x
z
Near plane + far plane + field of view = Viewing FrustumViewing Frustum
![Page 15: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/15.jpg)
Viewing Frustum
3D counterpart of 2D world clip window
y
Near plane Far plane
x
y
z
Obj t t id th f t li d
x
Viewing Frustum
Objects outside the frustum are clipped
![Page 16: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/16.jpg)
Projection Transformation
In OpenGL fixed function pipeline:S t th t i d t Set the matrix mode to GL_PROJECTION
Perspective projection: use gluPerspective(fovy, aspect, near, far) or glFrustum(left, right, bottom, top, near, far)
Orthographic: glOrtho(left, right, bottom, top, near, far)
![Page 17: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/17.jpg)
gluPerspective(fovy, aspect, near, far)
Aspect ratio is used to calculate the i d id hwindow width
y
z
y
z fovyw
hx
eye
near farAspect = w / h
h
![Page 18: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/18.jpg)
glFrustum(left, right, bottom, top, near, far)
Or You can use this function in place of gluPerspective()g p ()
left top
y
z
xright
bottom
near far
![Page 19: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/19.jpg)
glOrtho(left, right, bottom, top, near, far)
For orthographic projection
y
left top
z
x
rightbottom
nearfar
![Page 20: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/20.jpg)
Projection Transformation
void display() {{
glClear(GL_COLOR_BUFFER_BIT); glMatrixMode(GL_PROJETION); lL dId i ()glLoadIdentity();
gluPerspective(fove, aspect, near, far);glMatrixMode(GL_MODELVIEW); g ( _ );glLoadIdentity(); gluLookAt(0,0,1,0,0,0,0,1,0); my display(); // your display routinemy_display(); // your display routine
}
![Page 21: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/21.jpg)
Demo
![Page 22: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/22.jpg)
3D viewing under the hood
M d li Vi i P j tiModeling Viewing Projection Transformation Transformation Transformation
Vi tViewport Transformation
Di lDisplay
![Page 23: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/23.jpg)
3D viewing under the hood
Topics of Interest:
Viewing transformation Projection transformation
![Page 24: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/24.jpg)
Viewing Transformation
Transform the object from world to eye j yspace Construct an eye space coordinate framey p Construct a matrix to perform the
coordinate transformation
![Page 25: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/25.jpg)
Eye Coordinate Frame
Known: eye position, center of interest, view-up vectorvector
To find out: new origin and three basis vectors
eye
center of interest (COI)Assumption: the direction of view is orthogonal to the view plane (the plane that objects will be projected onto)
90o
![Page 26: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/26.jpg)
Eye Coordinate Frame (2) Origin: eye position (that was easy) Three basis vectors: one is the normal vector (n) of ( )
the viewing plane, the other two are the ones (u and v) that span the viewing plane
v n is pointing away from the
eyeCenter of interest (COI)
uv n is pointing away from the
world because we use righthand coordinate system
N COIeyen
world origin
N = eye – COIn = N / | N |
world originRemember u,v,n should be all unit vectors (u,v,n should be orthogonal to each other)
![Page 27: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/27.jpg)
Eye Coordinate Frame (3)
How about u and v?
uv
V_up
We can get u first -
u is a vector that is perpendicular
eyeCOI
n
u u is a vector that is perpendicularto the plane spanned by N and view up vector (V_up)
n
U = V_up x n
u = U / | U |u = U / | U |
![Page 28: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/28.jpg)
Eye Coordinate Frame (4)
How about v? Knowing n and u, getting v iseasy
uv
V_up
easy
eyeCOI
n
u
v = n x u
v is already normalizedn v is already normalized
![Page 29: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/29.jpg)
Eye Coordinate Frame (5)
Put it all together Eye space origin: (Eye.x , Eye.y, Eye.z)
uv
V_up
Basis vectors:
n = (eye – COI) / | eye – COI| (V ) / | V |
eyeCOI
n
uu = (V_up x n) / | V_up x n | v = n x u
n
![Page 30: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/30.jpg)
World to Eye Transformation
Transformation matrix (M w2e) ?
P’ = M w2e x P
v 1 C i h h f iuv
nyP
1. Come up with the transformationsequence to move eye coordinate frame to the world
world
x
2. And then apply this sequence to the point P in a reverse order
z
![Page 31: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/31.jpg)
World to Eye Transformation
Rotate the eye frame so that it will be “aligned” with the world framethe world frame
Translate (-ex, -ey, -ez)
v
Rotation: ux uy uz 0vx vy vz 0
uv
ny
(ex ey ez)
vx vy vz 0nx ny nz 00 0 0 1
H t if th t ti t i ?world
x
(ex,ey,ez) How to verify the rotation matrix?
Translation: 1 0 0 -ex 0 1 0 -ey
z
y0 0 1 -ez 0 0 0 1
![Page 32: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/32.jpg)
World to Eye Transformation (2)
Transformation order: apply the transformation to the object in a reverse order - translation first and thenobject in a reverse order translation first, and then rotate
Mw2e = ux uy ux 0 1 0 0 -ex vx vy vz 0 0 1 0 -ey
uv
y ynx ny nz 0 0 0 1 -ez0 0 0 1 0 0 0 1
n
worldx
y(ex,ey,ez)
x
z
![Page 33: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/33.jpg)
World to Eye Transformation (3)
Head tilt: Rotate your head by Just rotate the object about the eye space z axis Just rotate the object about the eye space z axis -
Mw2e = cos(- -sin(- 0 0 ux uy ux 0 1 0 0 -ex sin(- cos(- 0 0 vx vy vz 0 0 1 0 -ey0 0 1 0 nx ny nz 0 0 0 1 ez0 0 1 0 nx ny nz 0 0 0 1 -ez0 0 0 1 0 0 0 1 0 0 0 1
uv un
worldx
y Why - ?
When you rotate your head by , it is like rotate the object by –x
z
rotate the object by
![Page 34: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/34.jpg)
Projection Transformation
Projection – map the object from 3D space to 2D screen
y
z
y
z
x
z
x
z
Perspective: gluPerspective() Parallel: glOrtho()
![Page 35: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/35.jpg)
Parallel Projection
After transforming the object to the eye space, parallel projection is relative easy – we could just p p j y jdrop the Z
Xp = x (Xp, Yp)
Yp = y Zp = -d
(Xp, Yp)
We actually want to keep Z – why?
x
y
z(x,y,z)
x
![Page 36: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/36.jpg)
Parallel Projection (2)
OpenGL maps (projects) everything in h i ibl l i i l ithe visible volume into a canonical view
volume(1, 1, 1)
(xmax, ymax, -far)
(-1, -1, -1)(xmin, ymin, -near)
Canonical View VolumeglOrtho(xmin, xmax, ymin, ymax, near, far)
![Page 37: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/37.jpg)
Parallel Projection (3)
Transformation sequence: 1 T anslation (M1) ( f )1. Translation (M1): (-near = zmax, -far = zmin)
-(xmax+xmin)/2, -(ymax+ymin)/2, -(zmax+zmin)/2
2 Scaling (M2):2. Scaling (M2):2/(xmax-xmin), 2/(ymax-ymin), -2/(zmax-zmin)
2/(xmax-xmin) 0 0 - (xmax+xmin)/(xmax-xmin)M2 x M1 = 0 2/(ymax-ymin) 0 - (ymax+ymin)/(ymax-ymin)
0 0 -2/(zmax-zmin) -(zmax+zmin)/(zmax-zmin) 0 0 0 10 0 0 1
![Page 38: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/38.jpg)
Perspective Projection
Side view: y
z
xProjection plane
(x,y,z)y
(0,0,0)
(x,y,z)
(x’,y’,z’)
yBased on similar triangle:
y -z y’ d=
d
-z
z y’ d
dY’ = y x
Eye (projection center)
y-z
![Page 39: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/39.jpg)
Perspective Projection (2)
Same for x. So we have:x’ = x x d / -zx x x d / z y’ = y x d / - z z’ = -d
Put in a matrix form: Put in a matrix form:
x’ 1 0 0 0 xy’ = 0 1 0 0 yy = 0 1 0 0 yz’ 0 0 1 0 zw 0 0 (1/-d) 0 1
OpenGL assume d = near, i.e. the image plane is at z = -near
![Page 40: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/40.jpg)
Perspective Projection (3) We are not done yet. We want to somewhat keep the z
information so that we can perform depth comparison
Use pseudo depth – OpenGL maps the near plane to -1, and far plane to 1
Need to modify the projection matrix: solve a and b x’ 1 0 0 0 x y’ = 0 1 0 0 yz’ 0 0 a b zw 0 0 (1/-d) 0 1
yz
x
Z = -1 z = 1 How to solve a and b?
![Page 41: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/41.jpg)
Perspective Projection (4)
Solve a and b x’ 1 0 0 0 x
y’ 0 1 0 0 yy = 0 1 0 0 y
z’ 0 0 a b z
w 0 0 (1/-d) 0 1
(0,0,-1) = M x (0,0,-near)(0,0,1) = M x (0,0,-far)
T
T
T
T M(0,0,1) M x (0,0, far)
a = (far+near)/(d*(far-near)) Verify this!
b = (2 x far x near) / (d*(far-near))
![Page 42: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/42.jpg)
Perspective Projection (5) Not done yet. OpenGL also normalizes the x and y
ranges of the viewing frustum to [-1, 1] (translate and scale)and scale)
y
(1, 1)
far
x
yz
eye
near
(top view)
And takes care the case that eye is not at the center
Z = 1 z = -1 (-1, -1)(top view)
And takes care the case that eye is not at the center of the view volume (shear)
![Page 43: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/43.jpg)
Perspective Projection (6) Final Projection Matrix:
x’ 2N/(xmax-xmin) 0 (xmax+xmin)/(xmax-xmin) 0 x
y’ = 0 2N/(ymax-ymin) (ymax+ymin)/(ymax-ymin) 0 y
z’ 0 0 -(F + N)/(F-N) -2F*N/(F-N) zz 0 0 -(F + N)/(F-N) -2F*N/(F-N) z
w’ 0 0 -1 0 1
glFrustum(xmin, xmax, ymin, ymax, N, F) N = near plane, F = far planeg ( , , y , y , , ) p , p
![Page 44: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/44.jpg)
Perspective Projection (7)
After perspective projection, the viewing frustum is also projected into a canonical view volume (like in p j (parallel projection)
(1, 1, -1)y
(-1, -1, 1)x
z
Canonical View Volume
![Page 45: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/45.jpg)
Flexible Camera Control
Instead of provide COI, it is possible to just give camera orientationgive camera orientation
Just like control a airplane’s orientation
y y
x
x
pitch yaw roll
![Page 46: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/46.jpg)
Flexible Camera Control
How to compute the viewing vector (x,y,z) from pitch() and yaw() ?from pitch() and yaw() ?
x Rcos()cos()z = Rcos()cos(90-)
y = 0 = 0
R
y x = Rcos()cos()
x
R
R cos()x
()
y = Rsin()z
z
![Page 47: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information](https://reader030.vdocuments.net/reader030/viewer/2022040601/5e92f67d1718fc0f8c4a125d/html5/thumbnails/47.jpg)
Flexible Camera Control
gluLookAt() does not let you to control pitch and yawand yaw
you need to compute/maintain the vector by yourselfyourself
And then calculate COI = Eye + (x,y,z) before you can call gluLookAt()before you can call gluLookAt().