Presentation is loading. Please wait.

Presentation is loading. Please wait.

Open GL Programming Speaker: 彭任右 Date: 2005/10/3.

Similar presentations


Presentation on theme: "Open GL Programming Speaker: 彭任右 Date: 2005/10/3."— Presentation transcript:

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; }


Download ppt "Open GL Programming Speaker: 彭任右 Date: 2005/10/3."

Similar presentations


Ads by Google