View Transformation - PowerPoint PPT Presentation

1 / 64
About This Presentation
Title:

View Transformation

Description:

View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT Positioning Synthetic Camera Eye Coordinates Transformation to Eye Coordinates ... – PowerPoint PPT presentation

Number of Views:123
Avg rating:3.0/5.0
Slides: 65
Provided by: tlalocSf
Category:

less

Transcript and Presenter's Notes

Title: View Transformation


1
View Transformation
  • CSC 830 Note 3

Course note credit to Prof. Seth Teller, MIT
2
View Transformation
Transform (i.e., express) geometry into
coordinates that are well-suited to (simple)
clipping and projection hardware
3
Positioning Synthetic Camera
What are our degrees of freedom in camera
positioning? To achieve effective visual
simulation, we want 1) the eye point to be in
proximity of modeled scene 2) the view to be
directed toward region of interest, and 3) the
image plane to have a reasonable twist
4
Eye Coordinates
Eyepoint at origin u axis toward right of image
plane v axis toward top of image plane view
direction along negative n axis
5
Transformation to Eye Coordinates
Our task construct the transformation M that
re-expresses world coordinates in the viewer frame
6
Machinery Changing Orthobases
Suppose you are given an orthobasis u, v, n What
is the action of the matrix M with rows u, v, and
n as below?
7
Applying M to u, v, n
Two equally valid interpretations, depending on
reference frame 1 Think of uvn basis as a rigid
object in a fixed world space Then M rotates
uvn basis into xyz basis 2 Think of a fixed axis
triad, with labels from xyz space Then M
reexpresses an xyz point p in uvn coords! It is
this second interpretation that we use today to
relabel world-space geometry with eye space
coordinates
8
Positioning Synthetic Camera
Given eyepoint e, basis ˆu, ˆv, ˆn Deduce M that
expresses world in eye coordinates Overlay
origins, then change bases
9
Positioning Synthetic Camera
Check does M re-express world geometry in eye
coordinates?
10
Positioning Synthetic Camera
Camera specification must include World-space
eye position e World-space lookat direction -n
Are e and -n enough to determine the camera DOFs
(degrees of freedom)?
11
Positioning Synthetic Camera
Are e and -n enough to determine the camera
DOFs? No. Note that we were not given u and
v! (Why not simply require the user to specify
them?)
We must also determine u and v, i.e., camera
twist about n. Typically done by specification
of a world-space up vector provided by user
interface, e.g., using gluLookat(e, c,
up) Twist constraint Align v with world up
vector (How?)
12
Positioning Synthetic Camera
13
Where are we?
14
What is Projection?
Any operation that reduces dimension (e.g., 3D to
2D)
Orthographic Projection Perspective Projection
15
Orthographic Projection
  • focal point at infinity
  • rays are parallel and orthogonal to the image
    plane

16
Comparison
17
Simple Perspective Camera
  • camera looks along z-axis
  • focal point is the origin
  • image plane is parallel to xy-plane at distance d
  • d is call focal length

18
Similar Triangles
  • Similar situation with x-coordinate
  • Similar Triangles point x,y,z projects to
    (d/z)x, (d/z)y, d

19
Projection Matrix
  • Projection using homogeneous coordinates
  • transform x, y, z to (d/z)x, (d/z)y, d
  • 2-D image point
  • discard third coordinate
  • apply viewport transformation to obtain physical
    pixel coordinates

20
Perspective Projection
21
Perspective Projection
z 0 not allowed (what happens to points on
plane z 0?) Operation well-defined for all
other points
22
Perspective Projection
Matrix formulation using homogeneous 4-vectors
Finally, recover projected point using homogenous
convention Divide by 4th element to convert
4-vector to 3-vector
23
Are we ready to rasterize? Not yet.
  • It is difficult to do clipping directly in the
    viewing frustum

24
The View Frustum
25
Canonical View Volume
26
Matrix Formulation
27
Perspective Projection
Suppose we have transformed from World to Eye to
Canonical coordinates How do we project onto
image plane?
Simply ignore z coordinate!
28
Qualitative Features of Perspective Projection
Equal-sized objects at different depths project
to different sizes!
Perspective projection does not preserve shape of
planar figures!
29
Families of parallel lines have vanishing
points projection of point at infinity in
direction of lines
30
Continue withOpenGL
31
OpenGL
  • OpenGL is a low-level graphics API
  • Window system independent
  • No facility for window events/user input
  • Can use additionally libraries (eg. GLUT)
  • Vertex driven
  • Primitives assembled from vertices
  • OpenGL is a state machine

32
OpenGL
Commands or display list
per vertex operations primitive assembly
per pixel operations
Frame Buffer
Rasterization
33
Clearing the Buffers
Clears the buffers using the specified values
glClearColor(GLclampf red, GLclampf
green, GLclampf blue, GLclampf
alpha) glClear(GLbitfield mask)
Masks
GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT, GL_ACCUM
_BUFFER_BIT, GL_STENCIL_BUFFER_BIT
34
Drawing Primitives
Begin/End drawing a primitive
glBegin(GLenum mode) glEnd()
Modes
GL_POINTS, GL_LINES, GL_TRIANGLES, GL_TRIANGLE_STR
IP, GL_QUADS, GL_POLYGON
35
Drawing Primitives
Draw a vertex of a primitive
glVertex3f(GLfloat x, GLfloat y, GLfloat z)
Variants
glVertex3fv(const GLfloat v) 2d,3d,4d, shorts,
ints, floats, doubles
The vertex is drawn according to the current state
36
Elements of Current State
  • Current
  • Color
  • Normal
  • Texture coordinates
  • Drawing mode
  • Matrix mode
  • Matrix on
  • Modelview stack
  • Perspective stack
  • Texture stack

37
Drawing Example
Draw a simple square
glBegin(GL_POLYGON) glVertex3f(-0.5,
0.5,0.5) glVertex3f( 0.5, 0.5,0.5)
glVertex3f( 0.5,-0.5,0.5) glVertex3f(-0.5,-0.5
,0.5) glEnd()
38
Changing the Current Color
Set the current color
glColor3f(GLfloat red, GLfloat green, GLfloat
blue)
Variants
glColor4f(red, green, blue, alpha) bytes,
unsigned bytes, shorts, ints, floats, doubles
39
Drawing Example
Adding color
glBegin(GL_POLYGON) glColor3f(1,0,0)
glVertex3f(-0.5, 0.5,0.5) glVertex3f( 0.5,
0.5,0.5) glVertex3f( 0.5,-0.5,0.5)
glVertex3f(-0.5,-0.5,0.5) glEnd()
40
Changing the Current Normal
Set the current normal
glNormal3f(GLfloat nx, GLfloat ny, GLfloat
nz)
Variants
glNormal3fv(const GLfloat v) bytes, shorts,
ints, floats, doubles
41
Drawing Example
Adding normals
glBegin(GL_POLYGON) glColor3f(1,0,0)
glNormal3f(0,0,1) glVertex3f(-0.5, 0.5,0.5)
glVertex3f( 0.5, 0.5,0.5) glVertex3f(
0.5,-0.5,0.5) glVertex3f(-0.5,-0.5,0.5) glEnd
()
42
Transformation Pipeline
Stages of vertex transformations
Modelview Matrix
Projection Matrix
Viewport Mapping
Object coords
Camera coords
Normalized coords
Window coords
43
Transformation Pipeline
  • Matrices are set up on stacks
  • Matrix commands are post-multiplied onto the
  • current matrix
  • the last command issued is
  • the first transformation applied to the object
  • Can save/restore the current matrix

44
Transformation Pipeline
Save/Restore the current matrix
glPushMatrix() glPopMatrix()
Change the current matrix stack
glMatrixMode(GLenum mode) GL_MODELVIEW,
GL_PROJECTION, GL_TEXTURE
45
Transformation Pipeline
Translate
glTranslatef(GLfloat x, GLfloat y,
GLfloat z)
Scale
glScalef(GLfloat x, GLfloat y, GLfloat
z)
46
Transformation Pipeline
Rotate
glRotatef(GLfloat angle, GLfloat x, GLfloat
y, GLfloat z)
is given in degrees
angle
is the unit rotation axis
X,y,z
47
Transformation Pipeline
Hierarchical Modelling
glTranslatef(waistx,waisty,waistz) glPushMatrix()
glRotatef(ra,rx,ry,rz) // draw right
arm glPopMatrix() glPushMatrix()
glRotatef(la,lx,ly,lz) // draw left
arm glPopMatrix()
48
Drawing Example
Adding transformations
glMatrixMode(GL_MODELVIEW) glBegin(GL_POLYGON)
glTranslatef(0,0,0) glRotatef(0,0,1,0)
glScalef(1,1,1) glColor3f(1,0,0)
glNormal3f(0,0,1) glVertex3f(-0.5, 0.5,0.5)
glVertex3f( 0.5, 0.5,0.5) glVertex3f(
0.5,-0.5,0.5) glVertex3f(-0.5,-0.5,0.5) glEnd
()
49
Cameras
Perspective Camera
glFrustum(GLdouble left, GLdouble
right, GLdouble bottom, GLdouble
top, GLdouble near, GLdouble far)
Orthographic Camera
glOrtho(GLdouble left, GLdouble right,
GLdouble bottom, GLdouble top, GLdouble near,
GLdouble far)
50
Shading
Setting the Shading Model
glShadeModel(GLenum mode)
Modes
GL_FLAT - FLAT shading GL_SMOOTH - GOURAUD
shading
51
Lights
Defining Lights
glLightfv(GLenum light, GLenum pname,
GLfloat param) glEnable(GL_LIGHTING) glEnable(GL_
LIGHT0)
Parameters
GL_AMBIENT - RGBA ambient intensity GL_DIFFUSE
- RGBA diffuse intensity GL_SPECULAR - RGBA
specular intensity GL_POSITION light position
52
Lights
Setting the Ambient Light
glLightModelfv(GLenum pname, GLfloat param)
Parameters
GL_LIGHT_MODEL_AMBIENT - global RGBA ambient
intensity
53
Materials
Defining Material Properties
glMaterialfv(GLenum face, GLenum pname,
GLfloat param)
Faces
GL_FRONT, GL_BACK, GL_FRONT_AND_BACK
Parameters
GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GL_EMISSION,
GL_SHININESS
54
Drawing Example
Adding Lighting
float lPos 1.0,1.0,1.0,1.0 glLightfv(GL_LIG
HT0,GL_POSITION,lPos) glEnable(GL_LIGHTING) glEn
able(GL_LIGHT0) glShadeModel(GL_SMOOTH) float
diffuse 1.0,0.0,0.0,1.0 glMaterialfv(GL_FRO
NT,GL_DIFFUSE,diffuse) // Setup camera // Draw
objects
55
Event Driven Programming
  • Program responds to events
  • Events are handled by user defined callback
    functions
  • Callbacks must know context and event type
    (passed through variables)

56
Event Driven Programming
Display Handler
Main Event Loop
Keyboard Handler
Mouse Handler
57
Simple GLUT Example
Displaying a square
int main (int argc, char argv)
glutInit(argc, argv) glutInitDisplayMode(GLUT_
RGBA GLUT_DOUBLE) int windowHandle
glutCreateWindow("Simple GLUT App")
glutDisplayFunc(redraw) glutMainLoop()
return 0
58
Display Callback
Called when window is redrawn
void redraw() glClear(GL_COLOR_BUFFER_BIT)
glBegin(GL_QUADS) glColor3f(1, 0, 0)
glVertex3f(-0.5, 0.5, 0.5) glVertex3f(0.5,
0.5, 0.5) glVertex3f(0.5, -0.5, 0.5)
glVertex3f(-0.5, -0.5, 0.5) glEnd() //
GL_QUADS glutSwapBuffers()
59
More GLUT
Additional GLUT functions
glutPositionWindow(int x,int y)
glutReshapeWindow(int w, int h)
Additional callback functions
glutReshapeFunction(reshape)
glutMouseFunction(mousebutton)
glutMotionFunction(motion) glutKeyboardFunction
(keyboardCB) glutSpecialFunction(special)
glutIdleFunction(animate)
60
Reshape Callback
Called when the window is resized
void reshape(int w, int h) glViewport(0.0,0.0,
w,h) glMatrixMode(GL_PROJECTION)
glLoadIdentity() glOrtho(0.0,w,0.0,h, -1.0,
1.0) glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
61
Mouse Callbacks
Called when the mouse button is pressed
void mousebutton(int button, int state, int x,
int y) if (buttonGLUT_LEFT_BUTTON
stateGLUT_DOWN) rx x ry winHeight
- y
Called when the mouse is moved with button down
void motion(int x, int y) rx x ry
winHeight - y
62
Keyboard Callbacks
Called when a button is pressed
void keyboardCB(unsigned char key, int x, int
y) switch(key) case 'a' coutltlt"a
Pressed"ltltendl break
Called when a special button is pressed
void special(int key, int x, int y)
switch(key) case GLUT_F1_KEY coutltltF1
Pressed"ltltendl break
63
Animation Callbacks
Called when the system is idle
void animationCB() float time
glutGet(GLUT_ELAPSED_TIME) glRotated(time,0.0,1
.0,0.0) glutPostRedisplay()
64
Menu Callbacks
Creating a menu
enum M_NONE, M_OPEN, M_SAVE, M_EXIT
glutCreateMenu(menuFunc) glutAddMenuEntry("Open
", M_OPEN) glutAddMenuEntry("------------------
-----", M_NONE) glutAddMenuEntry("Exit",
M_EXIT) glutAttachMenu(GLUT_RIGHT_BUTTON)
Called when a menu button is pressed
void menuFunc(int value) switch(value)
case M_EXIT exit(0) break
Write a Comment
User Comments (0)
About PowerShow.com