Download presentation
Presentation is loading. Please wait.
Published byIsabella Lilian McDaniel Modified over 9 years ago
1
Open GL Programming Speaker: 彭任右 Date: 2005/10/3
2
Coordinate System World Window (0,0) (w,h) x x y y z+ left handedright handed (0,0) (w,h) View Port
3
OpenGL Color Models RGBA or Color Index color index mode Display 1 2 4 8 16 RedGreenBlue 0 1 2 3 24 25 26 12321974 RGBA mode
4
OpenGL Command Formats glVertex3fv( v ) Number of components 2 - (x,y) 3 - (x,y,z) 4 - (x,y,z,w) Data Type b - byte ub - unsigned byte s - short us - unsigned short i - int ui - unsigned int f - float d - double Vector omit “v” for scalar form glVertex2f( x, y )
5
Buffers Color Buffer Depth Buffer Stencil Buffer Accumulation Buffer Selection Buffer
6
State Machine Set State –glPointSize(size); –glLineWidth(width); –glLineStipple(repeat, pattern); –glShadeModel(GL_SMOOTH); Get State –glGet*(); Enable Features –glEnable(GL_LIGHTING); –glDisable(GL_TEXTURE_2D); –glIsEnable(GL_DEPTH_TEST);
7
Framework Clear the window Set the Viewing, Projection, and Viewport transformation Loop for each primitive –Modeling Transformation –Specify the primitive type, attributes, and rendering states Flush or Swap buffer
8
Clearing the Window glClearColor(red, green, blue, alpha);glClearColor(red, green, blue, alpha); –From 0.0f to 1.0f glClearDepth(1.0f);glClearDepth(1.0f); glClear();glClear(); –glClear(GL_COLOR_BUFFER_BIT); –glClear(GL_DEPTH_BUFFER_BIT); –Use the logical or ( | ) to combine
9
Specifying a Color glColor3f() –glColor3f(0.0, 0.0, 0.0) – black –glColor3f(1.0, 0.0, 0.0) – red –glColor3f(0.0, 1.0, 0.0) – green –glColor3f(0.0, 0.0, 1.0) – blue –glColor3f(1.0, 1.0, 0.0) – yellow –glColor3f(0.0, 0.0, 0.0) – magenta –glColor3f(0.0, 1.0, 1.0) – cyan –glColor3f(1.0, 1.0, 1.0) – White
10
MVPV
11
Matrix Operation glMatrixMode() –GL_PROJECTION –GL_MODELVIEW –GL_TEXTURE glLoadIdentity() glLoadMatrix() glMultMatrix() glPushMatrix() glPopMatrix()
12
Matrix Multiplication glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glMultMatrix(N); glMultMatrix(M); glMultMatrix(L); glBegin(GL_POINTS); glVertex3f(v); glEnd(); The vertex transformation is N(M(Lv))
13
Modeling Transformation Move object glTranslate{234}{fd}( x, y, z ) Rotate object around arbitrary axis glRotate{234}{fd}( angle, x, y, z ) –angle is in degrees Stretch, shrink, or mirror object glScale{234}{fd}( x, y, z )
14
Transformation Tutorial
15
Viewing Transformation Position the camera/eye in the scene –gluLookAt( posx, posy, posz, viewx, viewy, viewz, upx, upy, upz);
16
Projection Transformation Orthogonal Projection Perspective Projection
17
Orthogonal Projection glOrtho(left, right, bottom, top, near far); gluOrtho2D( left, right, bottom, top )
18
Perspective Projection glFrustum(left, right, bottom, top, zNear, zFar); gluPerspective (fovy, aspect, zNear, zFar);
19
Projection Tutorial
20
Viewport Transformation View Port –usually same as window size –viewport aspect ratio should be same as projection transformation or resulting image may be distorted –glViewport(x, y, width, height); (0,0) (x,y) width height
21
OpenGL Geometric Primitives All geometric primitives are specified by vertices GL_QUAD_STRIP GL_POLYGON GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_POINTS GL_LINES GL_LINE_LOOP GL_LINE_STRIP GL_TRIANGLES GL_QUADS
22
Shapes Tutorial
23
Drawing Primitives glBegin(GLenum mode);glBegin(GLenum mode); glColor*();glColor*(); glVertex*();glVertex*(); glEnd();glEnd();
24
glShadeModel() glShadeModel(GLenum mode);glShadeModel(GLenum mode); –Flat Shading GL_FLAT –Smooth Shading GL_SMOOTH
25
glPolygonMode() glPolygonMode(face, mode);glPolygonMode(face, mode); –GLenum face GL_FRONT GL_BACK –GLenum mode GL_POINT GL_LINE (hint: wireframe) GL_FILL
26
Depth –think as distance from view point Depthe Test –glEnable(GL_DEPTH_TEST); –If we draw rectangle first, the ellipse will cove the rectangle when the depth test is closed. Z = 1.0 Z = 2.0 Without Depth Test Z = 1.0 Z = 2.0 With Depth Test x y z+ left handed
27
Culling glFrontFace(GLenum mode);glFrontFace(GLenum mode); –GL_CW –GL_CCW glCullFace(GLenum mode);glCullFace(GLenum mode); –GL_FRONT –GL_BACK –GL_FRONT_AND_BACK glEnable(GL_CULL_FACE);glEnable(GL_CULL_FACE); Counterclockwise winding (Front facing)
28
Force Completion of Drawing Win32Win32 –SwapBuffers(hDC); GLUTGLUT –glutSwapBuffer();
29
glRenderMode() GLint glRenderMode(GLenum mode);GLint glRenderMode(GLenum mode); –GL_RENDER –GL_SELECTION –GL_FEEDBACK
30
Selection Mode Method to determine which primitives are inside the viewing volume Select selection mode for rendering –glRenderMode(GL_SELECT);
31
Selection Buffer glSelectBuffer(GLsizei size, GLuint *buffer);glSelectBuffer(GLsizei size, GLuint *buffer); 4 elements per hit –# of names on names stack –Z Min –Z Max –Bottom of names stack
32
Names Stack To identify a primitive, give it a name –“ names ” are just integer values, not strings Names are stack based –allows for hierarchies of primitives –glInitNames(); –glPushName(); –glPopName(); –glLoadName();
33
Sample void RenderScene() { // “ set the rendering states glInitNames(); glLoadName(1); “ draw something ” glLoadName(2); // draw something else … continue }
34
Picking gluPickMatrix(x, y, width, height, viewport); –x, y should be set as x Mouse and y Mouse glGetIntegerv(GL_VIEWPORT, viewport);
35
Sample void pick(xPos, yPos) { glSelectBuffer(LENGTH, selectBuff); glMatrixMode(GL_PROJECTION); glRenderMode(GL_SELECTION); glLoadIdentity(); gluPickMatrix(x, y, 2, 2, viewport); gluPerspective(fovy, aspect, near, far); RenderScene(); hits = glRenderMode(GL_RENDER); Cout << we pick << selectBuff[3] << object; }
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.