《计算机图形学computergraphics课件5.ppt》由会员分享,可在线阅读,更多相关《计算机图形学computergraphics课件5.ppt(23页珍藏版)》请在优知文库上搜索。
1、1Programming with OpenGLPart 2:Complete Programs2ObjectivesRefine the first program Alter the default values Introduce a standard program structureSimple viewing Twodimensional viewing as a special case of threedimensional viewingFundamental OpenGL primitivesAttributes3Program Structure Most OpenGL
2、programs have a similar structure that consists of the following functionsmain():defines the callback functions opens one or more windows with the required properties enters event loop(last executable statement)init():sets the state variables Viewing Attributes callbacks Display function Input and w
3、indow functions4simple.c revisitedIn this version,we shall see the same output but we have defined all the relevant state values through function calls using the default valuesIn particular,we set Colors Viewing conditions Window properties5simple.c#include void mydisplay()glClear(GL_COLOR_BUFFER_BI
4、T);/glColor3f(1.0f,0.0f,0.0f);glBegin(GL_POLYGON);glVertex2f(-0.5,-0.5);glVertex2f(-0.5,0.5);glVertex2f(0.5,0.5);glVertex2f(0.5,-0.5);glEnd();glFlush();int main(int argc,char*argv)glutCreateWindow(simple);glutDisplayFunc(mydisplay);glutMainLoop();6main.c#include int main(int argc,char*argv)glutInit(
5、&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(500,500);glutInitWindowPosition(0,0);glutCreateWindow(simple);glutDisplayFunc(mydisplay);init();glutMainLoop();includes gl.hdefine window propertiesset OpenGL stateenter event loopdisplay callback7GLUT functionsglutInit allows
6、application to get command line arguments and initializes systemgluInitDisplayMode requests properties for the window(the rendering context)RGB color Single buffering Properties logically ORed togetherglutWindowSize in pixelsglutWindowPosition from topleft corner of displayglutCreateWindow create wi
7、ndow with title“simple”glutDisplayFunc display callbackglutMainLoop enter infinite event loop8init.cvoid init()glClearColor(0.0,0.0,0.0,1.0);glColor3f(1.0,1.0,1.0);glMatrixMode(GL_PROJECTION);glLoadIdentity();glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0);black clear coloropaque windowfill/draw with whiteviewi
8、ng volume9Coordinate SystemsThe units in glVertex are determined by the application and are called object or world coordinatesThe viewing specifications are also in object coordinates and it is the size of the viewing volume that determines what will appear in the imageInternally,OpenGL will convert
9、 to camera(eye)coordinates and later to screen coordinates OpenGL also uses some internal representations that usually are not visible to the application10OpenGL CameraOpenGL places a camera at the origin in object space pointing in the negative z directionThe default viewing volume is a box centere
10、d at the origin with a side of length 2glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0);11Orthographic Viewingz=0z=0In the default orthographic view,points are projected forward along the z axis onto theplane z=012Transformations and Viewing In OpenGL,projection is carried out by a projection matrix(transformati
11、on)There is only one set of transformation functions so we must set the matrix mode first glMatrixMode(GL_PROJECTION)Transformation functions are incremental so we start with an identity matrix and alter it with a projection matrix that gives the view volume glLoadIdentity();glOrtho(-1.0,1.0,-1.0,1.
12、0,-1.0,1.0);13Two-and three-dimensional viewing In glOrtho(left,right,bottom,top,near,far)the near and far distances are measured from the camera Twodimensional vertex commands place all vertices in the plane z=0 If the application is in two dimensions,we can use the function gluOrtho2D(left,right,b
13、ottom,top)In two dimensions,the view or clipping volume becomes a clipping window14mydisplay.cvoid mydisplay()glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_POLYGON);glVertex2f(-0.5,-0.5);glVertex2f(-0.5,0.5);glVertex2f(0.5,0.5);glVertex2f(0.5,-0.5);glEnd();glFlush();15OpenGL Primitives16Polygon Issues Ope
14、nGL will only display polygons correctly that are Simple:edges cannot cross Convex:All points on line segment between two points in a polygon are also in the polygon Flat:all vertices are in the same plane User program can check if above true OpenGL will produce output if these conditions are violat
15、ed but it may not be what is desired Triangles satisfy all conditionsnonsimple polygonnonconvex polygonApproximating a Sphere1718AttributesAttributes are part of the OpenGL state and determine the appearance of objects Color(points,lines,polygons)Size and width(points,lines)Stipple pattern(lines,pol
16、ygons)Polygon mode Display as filled:solid color or stipple pattern Display edges Display vertices19RGB color Each color component is stored separately in the frame buffer Usually 8 bits per component in buffer Note in glColor3f the color values range from 0.0(none)to 1.0(all),whereas in glColor3ub the values range from 0 to 25520Indexed ColorColors are indices into tables of RGB valuesRequires less memory indices usually 8 bits not as important now Memory inexpensive Need more colors for shadin