Surface Rendering With OpenGL CS460 Project by Rui Yu 11/30/03 Two aspects • Windowing system or user interface Use MFC Create a window Viewport is the client area of the window Capture mouse move events in the client area Add buttons on a tools bar • OpenGL commands Use gl,glu fuctions Viewing pipeline Surface rendering Viewing pipeline 3D modeling coordinates Modeling transformation 3D world coordinates Clipping & projection ChoosePixelFormat wglCreateContext // Define pixel format //Create rendering context. glMatrixMode(GL_MODELVIEW); glRotatef //rotate glScalef //scale glMatrixMode(GL_PROJECTION) glOrtho(-1,1,-1,1,-1,1); //Parellel projection glViewport(0, 0, cx, cy); Transform into viewport 2D device coordinates glBegin(GL_LINES); //or GL_POLYGON and etc. glVertex3d glVertex3d glEnd; SwapBuffers; Example: •Pixel Format: DOUBLE BUFFER, RGBA, DRAW_TO_WINDOW •View volume: Screen Shots (1) -draw 3D points interactively draw points position of cursor is unprojected to a 3d vertex. Here shows its model coordinates Screen Shots (2) -draw 3D bezier surface with zoom and rotation draw the surface This is a bezier surface with control points defined on a cylinder Rotate Zoom in Zoom out Drag of mouse defines rotation angle and direction as shown here Shading The Mathematics of Lighting: vertex color = global ambient light * ambient material + i attenuation factor *Ii * [ ambient light *ambient material + (max { 1 x n , 0 } ) * diffuse light * diffuse material + (max {s x n ,0} )*shininess * specular light * specular material ] l : the unit vector that points from the vertex to the light position n: the unit normal vector at the vertex. Default Lighting Value: Global Ambient Light: {0.2, 0.2, 0.2, 1.0 }; Table1: Default Values for glLight0() Parameter Name Default Value Meaning GL_AMBIENT (0.0, 0.0, 0.0, 1.0) ambient RGBA intensity of light GL_DIFFUSE (1.0, 1.0, 1.0, 1.0) diffuse RGBA intensity of light GL_SPECULAR (1.0, 1.0, 1.0, 1.0) specular RGBA intensity of light GL_POSITION (0.0, 0.0, 1.0, 0.0) (x, y, z, w) position of light Table2: Default Values for glMaterial() Parameter Name Default Value Meaning GL_AMBIENT (0.2, 0.2, 0.2, 1.0) ambient color of material GL_DIFFUSE (0.8, 0.8, 0.8, 1.0) diffuse color of material GL_SPECULAR (0.0, 0.0, 0.0, 1.0) specular color of material GL_SHININESS 0.0 specular exponent Screen Shots (3) -Change light intensity and material property (1) Opens a dialogue to change default values. Back of surface is dark as ambient light of light0 is 0. Only global ambient(0.2) works here. Screen Shots (4) -Change light intensity and material property (2) After increase the ambient light, the back of the surface becomes brighter Screen Shots (5) -Drag control points of bezier surface and texture mapping (1) enable move control points show control points drag a control point with mouse Bezier surface with 16 control points initially on a plane old and new postion of the control point Screen Shots (6) -Drag control points of bezier surface and texture mapping (2) shade texture mapping The surface drawn by moving control points bibliography • Msdn http://www.msdn.com • OpenGL Programming Guide or 'The Red Book’ from Silicon Graphics, Inc • Guide to OpenGL on Windows from Silicon Graphics http://www.opengl.org/developers/documentation/overviews.html • OpenGL Win32 Tutorial http://www.nullterminator.net/opengl32.html http://www.opengl.org/developers/code/tutorials.html • Basic Curves And Surfaces Modeler by Sharjith http://www.codeproject.com/useritems/cadsurf.asp