view transformation csc 830 note 3 course note credit to prof. seth teller, mit
Post on 21-Dec-2015
223 views
TRANSCRIPT
![Page 1: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/1.jpg)
View TransformationView TransformationView TransformationView Transformation
CSC 830 Note 3CSC 830 Note 3
Course note credit to Prof. Seth Teller, MIT
![Page 2: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/2.jpg)
View Transformation
Transform (i.e., express) geometry into coordinates that arewell-suited to (simple) clipping and projection hardware
![Page 3: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/3.jpg)
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 scene2) the view to be directed toward region of interest, and3) the image plane to have a reasonable “twist”
![Page 4: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/4.jpg)
Eye Coordinates
Eyepoint at originu axis toward “right” of image planev axis toward “top” of image planeview direction along negative n axis
![Page 5: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/5.jpg)
Transformation to Eye Coordinates
Our task: construct the transformation M that re-expresses world coordinates in the viewer frame
![Page 6: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/6.jpg)
Machinery: Changing Orthobases
Suppose you are given an orthobasis u, v, nWhat is the action of the matrix M withrows u, v, and n as below?
![Page 7: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/7.jpg)
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 spaceThen M “rotates” uvn basis into xyz basis2: Think of a fixed axis triad, with “labels” from xyz spaceThen M “reexpresses” an xyz point p in uvn coords!It is this second interpretation that we use todayto “relabel” world-space geometry with eye space coordinates
![Page 8: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/8.jpg)
Positioning Synthetic Camera
Given eyepoint e, basis ˆu, ˆv, ˆnDeduce M that expresses world in eye coordinates:Overlay origins, then change bases:
![Page 9: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/9.jpg)
Positioning Synthetic Camera
Check: does M re-express world geometry in eye coordinates?
![Page 10: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/10.jpg)
Positioning Synthetic Camera
Camera specification must include:World-space eye position eWorld-space “lookat direction” -n
Are e and -n enough to determine the camera DOFs (degrees of freedom)?
![Page 11: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/11.jpg)
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?)
![Page 12: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/12.jpg)
Positioning Synthetic Camera
![Page 13: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/13.jpg)
Where are we?
![Page 14: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/14.jpg)
What is Projection?
Any operation that reduces dimension (e.g., 3D to 2D)
Orthographic ProjectionPerspective Projection
![Page 15: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/15.jpg)
Orthographic Projection• focal point at infinity • rays are parallel and orthogonal to the image
plane
Image
World
F
F
Image
World
I
W
![Page 16: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/16.jpg)
Comparison
![Page 17: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/17.jpg)
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
![Page 18: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/18.jpg)
Similar TrianglesY
Z
[0, d][0, 0]
[Y, Z]
[(d/Z)Y, d]
• Similar situation with x-coordinate• Similar Triangles:
point [x,y,z] projects to [(d/z)x, (d/z)y, d]
![Page 19: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/19.jpg)
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
d 0 0 0
0 d 0 0
0 0 d 0
0 0 1 0
x
y
z
1
dx dy dz z d
zxd
zy d
Divide by 4th coordinate
(the “w” coordinate)
![Page 20: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/20.jpg)
Perspective Projection
![Page 21: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/21.jpg)
Perspective Projection
z = 0 not allowed (what happens to points on plane z = 0?)Operation well-defined for all other points
![Page 22: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/22.jpg)
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:
![Page 23: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/23.jpg)
Are we ready to rasterize? Not yet.
• It is difficult to do clipping directly in the viewing frustum
![Page 24: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/24.jpg)
The View Frustum
![Page 25: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/25.jpg)
Canonical View Volume
![Page 26: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/26.jpg)
Matrix Formulation
![Page 27: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/27.jpg)
Perspective ProjectionSuppose we have transformed from World to Eye to Canonical coordinatesHow do we project onto “image plane”?
Simply ignore z coordinate!
![Page 28: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/28.jpg)
Qualitative Features of Perspective Projection
Equal-sized objects at different depths project to different sizes!
Perspective projection does not preserve shape of planar figures!
![Page 29: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/29.jpg)
Families of parallel lines have “vanishing points”projection of point at infinity in direction of lines
![Page 30: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/30.jpg)
Continue withContinue withOpenGLOpenGL
Continue withContinue withOpenGLOpenGL
![Page 31: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/31.jpg)
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***
![Page 32: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/32.jpg)
OpenGL
per vertexoperations &primitiveassembly
Rasterizationper pixeloperations
FrameBuffer
Commands or display list
![Page 33: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/33.jpg)
Clearing the BuffersClears the buffers using the specified valuesglClearColor(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
![Page 34: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/34.jpg)
Drawing PrimitivesBegin/End drawing a primitive
glBegin(GLenum mode)
glEnd()
Modes:
GL_POINTS, GL_LINES, GL_TRIANGLES,GL_TRIANGLE_STRIP, GL_QUADS,GL_POLYGON
![Page 35: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/35.jpg)
Drawing PrimitivesDraw a vertex of a primitive
glVertex3f(GLfloat x, GLfloat y, GLfloat z)
The vertex is drawn according to the current state
Variants:
glVertex3fv(const GLfloat *v)
2d,3d,4d, shorts, ints, floats, doubles
![Page 36: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/36.jpg)
Elements of Current State
Current: Color Normal Texture coordinates Drawing mode Matrix mode Matrix on:
Modelview stack Perspective stack Texture stack
![Page 37: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/37.jpg)
Drawing ExampleDraw 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();
![Page 38: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/38.jpg)
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
![Page 39: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/39.jpg)
Drawing ExampleAdding 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();
![Page 40: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/40.jpg)
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
![Page 41: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/41.jpg)
Drawing ExampleAdding 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();
![Page 42: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/42.jpg)
Transformation PipelineStages of vertex transformations:
Objectcoords
ModelviewMatrix
ProjectionMatrix
ViewportMapping
Cameracoords
Normalizedcoords
Windowcoords
![Page 43: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/43.jpg)
Transformation PipelineMatrices are set up on stacks
Matrix commands are post-multiplied onto thecurrent matrix
the last command issued is the first transformation applied to the object
Can save/restore the current matrix
![Page 44: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/44.jpg)
Transformation PipelineSave/Restore the current matrix:
glPushMatrix()
glPopMatrix()
Change the current matrix stack:
glMatrixMode(GLenum mode)
GL_MODELVIEW, GL_PROJECTION,GL_TEXTURE
![Page 45: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/45.jpg)
Transformation PipelineTranslate:
glTranslatef(GLfloat x, GLfloat y, GLfloat z)
Scale:
glScalef(GLfloat x, GLfloat y, GLfloat z)
![Page 46: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/46.jpg)
Transformation PipelineRotate:
glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
is given in degreesangle
is the unit rotation axisX,y,z
![Page 47: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/47.jpg)
Transformation PipelineHierarchical Modelling:
glTranslatef(waistx,waisty,waistz);glPushMatrix(); glRotatef(ra,rx,ry,rz); // draw right armglPopMatrix();glPushMatrix(); glRotatef(la,lx,ly,lz); // draw left armglPopMatrix();
![Page 48: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/48.jpg)
Drawing ExampleAdding 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();
![Page 49: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/49.jpg)
CamerasPerspective 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)
![Page 50: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/50.jpg)
ShadingSetting the Shading Model
glShadeModel(GLenum mode)
Modes:
GL_FLAT - FLAT shadingGL_SMOOTH - GOURAUD shading
![Page 51: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/51.jpg)
LightsDefining Lights
glLightfv(GLenum light, GLenum pname, GLfloat *param)
glEnable(GL_LIGHTING)glEnable(GL_LIGHT0)
Parameters:
GL_AMBIENT - RGBA ambient intensityGL_DIFFUSE - RGBA diffuse intensityGL_SPECULAR - RGBA specular intensityGL_POSITION – light position
![Page 52: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/52.jpg)
LightsSetting the Ambient Light
glLightModelfv(GLenum pname,GLfloat *param)
Parameters:
GL_LIGHT_MODEL_AMBIENT- global RGBA ambient intensity
![Page 53: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/53.jpg)
MaterialsDefining 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
![Page 54: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/54.jpg)
Drawing ExampleAdding Lighting:float lPos[] = {1.0,1.0,1.0,1.0};glLightfv(GL_LIGHT0,GL_POSITION,lPos);glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);glShadeModel(GL_SMOOTH);
float diffuse[] = {1.0,0.0,0.0,1.0};glMaterialfv(GL_FRONT,GL_DIFFUSE,diffuse);
// Setup camera// Draw objects
![Page 55: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/55.jpg)
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)
![Page 56: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/56.jpg)
Event Driven Programming
MainEventLoop
DisplayHandler
KeyboardHandler
MouseHandler
![Page 57: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/57.jpg)
Simple GLUT ExampleDisplaying a squareint main (int argc, char *argv[]){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); int windowHandle = glutCreateWindow("Simple GLUT App");
glutDisplayFunc(redraw);
glutMainLoop();
return 0;}
![Page 58: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/58.jpg)
Display CallbackCalled when window is redrawnvoid 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();}
![Page 59: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/59.jpg)
More GLUTAdditional 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);
![Page 60: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/60.jpg)
Reshape CallbackCalled when the window is resizedvoid 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(); }
![Page 61: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/61.jpg)
Mouse CallbacksCalled when the mouse button is pressedvoid mousebutton(int button, int state, int x, int y){ if (button==GLUT_LEFT_BUTTON && state==GLUT_DOWN) { rx = x; ry = winHeight - y; }}
Called when the mouse is moved with button downvoid motion(int x, int y){ rx = x; ry = winHeight - y;}
![Page 62: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/62.jpg)
Keyboard CallbacksCalled when a button is pressedvoid keyboardCB(unsigned char key, int x, int y){ switch(key) { case 'a': cout<<"a Pressed"<<endl; break; }}
Called when a special button is pressedvoid special(int key, int x, int y){ switch(key) { case GLUT_F1_KEY:
cout<<“F1 Pressed"<<endl; break; }}
![Page 63: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/63.jpg)
Animation CallbacksCalled when the system is idlevoid animationCB(){ float time = glutGet(GLUT_ELAPSED_TIME); glRotated(time,0.0,1.0,0.0); glutPostRedisplay();}
![Page 64: View Transformation CSC 830 Note 3 Course note credit to Prof. Seth Teller, MIT](https://reader035.vdocuments.us/reader035/viewer/2022062313/56649d5f5503460f94a3f522/html5/thumbnails/64.jpg)
Menu CallbacksCreating 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 pressedvoid menuFunc(int value){ switch(value) { case M_EXIT: exit(0); break; }}