- 156 Views
- Uploaded on
- Presentation posted in: General

Viewing

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Viewing

고려대학교 컴퓨터 그래픽스 연구실

kucg.korea.ac.kr

- Perspective views
- finite COP (center of projection)

- Parallel views
- COP at infinity
- DOP (direction of projection)

parallel view

perspective view

kucg.korea.ac.kr

kucg.korea.ac.kr

kucg.korea.ac.kr

- Specific relationship between the objects and the viewers

kucg.korea.ac.kr

- Projectors are perpendicular to the projection plane
- preserve both distances and angles

temple and three multiview orthographic projections

orthographic projections

kucg.korea.ac.kr

- Projection plane can have any orientation with respect to the object
- projectors are still orthogonal to the projection planes

construction

top view

side view

kucg.korea.ac.kr

- Preserve parallel lines but not angles
- isometric – projection plane is placed symmetrically with respect to the three principal faces
- dimetric – two of principal faces
- trimetric – general case

kucg.korea.ac.kr

- Preserve parallel lines but not angles
- isometric – projection plane is placed symmetrically with respect to the three principal faces
- dimetric – two of principal faces
- trimetric – general case

kucg.korea.ac.kr

- Projectors can make an arbitrary angle with the projection plane
- preserve angels in planes parallel to the projection plane

construction

top view

side view

kucg.korea.ac.kr

- Diminution of size
- when objects are moved father from the viewer, their images become smaller

kucg.korea.ac.kr

- One-, two-, and three-point perspectives
- how many of the three principal directions in the object are parallel to the projection plane
- vanishing points

three-point perspective

two-point perspective

one-point perspective

kucg.korea.ac.kr

- One-, two-, and three-point perspectives
- how many of the three principal directions in the object are parallel to the projection plane
- vanishing points

three-point perspective

two-point perspective

one-point perspective

kucg.korea.ac.kr

- One-, two-, and three-point perspectives
- how many of the three principal directions in the object are parallel to the projection plane
- vanishing points

three-point perspective

two-point perspective

one-point perspective

kucg.korea.ac.kr

- One-, two-, and three-point perspectives
- how many of the three principal directions in the object are parallel to the projection plane
- vanishing points

three-point perspective

two-point perspective

one-point perspective

kucg.korea.ac.kr

- OpenGL places a camera at the origin of the world frame pointing in the negative z direction
- move the camera away from the objects

glTranslatef(0.0, 0.0, -d);

initial configuration

after change in the model-view matrix

kucg.korea.ac.kr

- Look at the same object from the positive x axis
- translation after rotation by 90 degrees about the y axis

glMatrixMode(GL_MODELVIEW);

glLoadIdentity( );

glTranslatef(0.0, 0.0, -d);

glRotatef(-90.0, 0.0, 1.0, 0.0);

kucg.korea.ac.kr

- Create an isometric view of the cube

y

y

y

z

x

x

view from positive z axis

view from positive z axis

view from positive x axis

kucg.korea.ac.kr

- Create an isometric view of the cube

glMatrixMode(GL_MODELVIEW);

glLoadIdentity( );

glTranslatef(0.0, 0.0, -d);

glRotatef(35.26, 1.0, 0.0, 0.0);

glRotatef(45.0, 0.0, 1.0, 0.0);

y

y

y

x

x

x

view from positive z axis

view from positive z axis

kucg.korea.ac.kr

- VRP (view-reference point), VPN (view-plane normal), and VUP (view-up vector)
- u, v (up-direction vector), n (normal vector)
x, y, z axes respectively

- u, v (up-direction vector), n (normal vector)

determination of the view-up vector

camera frame

kucg.korea.ac.kr

- Translation after rotation
- VRP – (x, y, z) T(-x, -y, -z)
- VNP – (nx, ny, nz) n
- VUP – vup v = vup – (vup• n) n
u = v n

(※ our assumption – all vectors must be normalized )

kucg.korea.ac.kr

- OpenGL utility function
- VRP: eyePoint
- VPN: – ( atPoint – eyePoint )
- VUP: upPoint – eyePoint

gluLookAt(eyex, eyey, eyez, atx, aty, atz, upx, upy, upz);

look-at positioning

kucg.korea.ac.kr

- Roll, pitch, and yaw
- ex. flight simulation

- Elevation and azimuth
- ex. star in the sky

kucg.korea.ac.kr

- Simple camera
- projection plane is orthogonal to z axis
- projection plane in front of COP

three-dimensional view

top view

side view

kucg.korea.ac.kr

Model-view

Projection

Perspective division

projection pipeline

- Homogeneous coordinates
- Perspective projection matrix

kucg.korea.ac.kr

- Projectors are perpendicular to the view plane
- Orthographic projection matrix

kucg.korea.ac.kr

- Angle of view
- only objects that fit within the angle of view of the camera appear in the image

- View volume
- be clipped out of scene
- frustum – truncated pyramid

kucg.korea.ac.kr

- Specification of a frustum
- near, far: positive number !!
zmax = – far

zmin = – near

- near, far: positive number !!

glMatrixMode(GL_PROJECTION);

glLoadIdentity( );

glFrustum(xmin, xmax, ymin, ymax, near, far);

kucg.korea.ac.kr

- Specification using the field of view
- fov: angle between top and
bottom planes

- fovy: the angle of view in the
up (y) direction

- aspect ratio: width divided
by height

- fov: angle between top and

glMatrixMode(GL_PROJECTION);

glLoadIdentity( );

gluPerspective(fovy, aspect, near, far);

kucg.korea.ac.kr

- Orthographic viewing function
- OpenGL provides only this parallel-viewing function
- near < far !!
no restriction on the sign

zmax = – far

zmin = – near

glMatrixMode(GL_PROJECTION);

glLoadIdentity( );

glOrtho(xmin, xmax, ymin, ymax, near, far);

kucg.korea.ac.kr

void keys(unsigned char key, int x, int y)

{

if(key == ‘x’) viewer[0] -= 1.0;

if(key == ‘X’) viewer[0] += 1.0;

if(key == ‘y’) viewer[1] -= 1.0;

if(key == ‘Y’) viewer[1] += 1.0;

if(key == ‘z’) viewer[2] -= 1.0;

if(key == ‘Z’) viewer[2] += 1.0;

}

void display(void)

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glLoadIdentity();

gluLookAt(viewer[0], viewer[1], viewer[2], 0,0,0, 0,1,0);

glRotatef(theta[0], 1.0, 0.0, 0.0);

glRotatef(theta[1], 0.0, 1.0, 0.0);

glRotatef(theta[2], 0.0, 0.0, 1.0);

colorcube( );

glFlush( );

glutSwapBuffers( );

}

kucg.korea.ac.kr

void myReshape(int w, int h)

{

glViewport(0, 0, w, h);

glMatrixMode(GL_PROJECTION);

glLoadIdentity( );

if( w <= h )

glFrustum(-2.0, 2.0, -2.0*(GLfloat)h/(GLfloat)w,

2.0*(GLfloat)h/(GLfloat)w, 2.0, 20.0);

else

glFrustum(-2.0 *(GLfloat)w/(GLfloat)h,

2.0 *(GLfloat)w/(GLfloat)h, -2.0, 2.0, 2.0, 20.0);

glMatrixMode(GL_MODELVIEW);

}

kucg.korea.ac.kr

- Shadow polygon
- Steps
- light source at (xl, yl, zl)
- translation (-xl, -yl, -zl)
- perspective projection through the origin
- translation (xl, yl, zl)

kucg.korea.ac.kr

GLfloat m[16];/* shadow projection matrix */

for(i=0; i<16; i++) m[i] = 0.0;

m[0] = m[5] = m[10] = 1.0;

m[7] = -1.0/yl;

glColor3fv(polygon_color);

glBegin(GL_POLYGON);

.

./* draw the polygon normally */

.

glEnd( );

glMatrixMode(GL_MODELVIEW);

glPushMatrix( );/* save state */

glTranslatef(xl, yl, zl);/* translate back */

glMultMatrixf(m);/* project */

glTranslatef(-xl, -yl, -zl);/* move light to origin */

glColorfv(shadow_color);

glBegin(GL_POLYGON);

.

. /* draw the polygon again */

.

glEnd( );

glPopMatrix( );/* restore state */

kucg.korea.ac.kr

kucg.korea.ac.kr