资源描述:
《计算机图形学第八章opengl程序设计基础ppt培训课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第八章OpenGL程序设计基础一、通过辅助库(GLAUX)使用窗口系统二、几何图元与场景表达三、OpenGL中的变换四、OpenGL中的照明五、在OpenGL中使用纹理六、OpenGL中的曲线和曲面七、选择与拾取一、通过辅助库使用窗口系统OpenGL本身不涉及具体的窗口系统,通过使用OpenGL辅助库GLAUX可以摆脱对具体窗口系统的依赖,直接学习OpenGL的内容。1、本课程需要用到的aux函数查看工程:gl_1_1voidauxInitWindow(GLbyte*titleString);voidauxInitDisplayMode(GLbitfieldmask
2、);voidauxInitPosition(GLintx,GLinty,GLsizeiwidth,GLsizeiheight);voidauxReshapeFunc(void(*function)(GLsizei,GLsizei));voidauxKeyFunction(GLintkey,void(*function)(void));voidauxMouseFunc(GLintbutton,Glintmode,void(*function)(AUX_EVENTREC*));voidauxMainLoop(void(*displayFunc)(void));2、与窗口
3、系统进行交互查看工程:gl_1_2(1)本例将颜色位面设置为双缓冲(1)本例借助鼠标进行视点变换,以便改变视点的角度。(2)另外本例还涉及投影变换,以便保持坐标轴的比例关系。查看工程:gl_1_3(1)本例首先改变了投影方式:由平行投影改变为透视投影。(2)借助键盘和鼠标进行视点变换,增加了改变视点位置的功能。(3)有了一个模型——茶壶3、两个函数的说明(1)voidauxKeyFunc(GLintkey,void(*function)(void))定义键盘响应函数:参数function就是当按下key键时所调用的函数指针,辅助库为参数key定义了几个常量:AUX_
4、0至AUX_9、AUX_A至AUX_Z、AUX_a至AUX_z、AUX_LEFT、AUX_RIGHT、AUX_UP、AUX_DOWN(方向键)、AUX_ESCAPE、AUX_SPACE或AUX_RETURN。(2)voidauxMouseFunc(GLintbutton,Glintmode,void(*function)(AUX_EVENTREC*))定义鼠标响应函数:参数function就是当鼠标以mode方式作用于button时所调用的函数。参数button有AUX_LEFTBUTTON、AUX_MIDDLEBUTTON或AUX_RIGHTBUTTON;参数mo
5、de代表鼠标触击状态,击中时为AUX_MOUSEDOWN,释放时为AUX_MOUSEUP,移动时为AUX_MOUSELOC;参数function必须带一个参数,它是指向结构AUX_EVENNTREC的指针。当函数auxMouseFunc()被调用时,这个结构中具有相关的信息。例如鼠标的位置:voidfunction(AUX_EVENTREC*event){GLintx,y;x=event->data[AUX_MOUSEX];y=event->data[AUX_MOUSEY];...}4、数据类型及函数命名规则前缀数据类型相应C语言类型OpenGL类型bsifdubu
6、sui8-bitinteger16-bitinteger32-bitinteger32-bitfloating-point64-bitfloating-point8-bitunsignedinteger16-bitunsignedinteger32-bitunsignedintegersignedcharshortlongfloatdoubleunsignedcharunsignedshortunsignedlongGLbyteGLshortGLint,GLsizeiGLfloat,GLclampfGLdouble,GLclampdGLubyte,GLboolean
7、GLushortGLuint,GLenum,GLbitfield(1)数据类型:OpenGL在自己的函数原型中,对数据类型使用自己的记法:4、数据类型及函数命名规则(续)(2)函数名称:OpenGL的同一函数对不同维数和各种数据类型通常都进行定义,例如:voidglVertex2d(GLdoublex,GLdoubley);voidglVertex2f(GLfloatx,GLfloaty);voidglVertex2i(GLintx,GLinty);voidglVertex2s(GLshortx,GLshorty);voidglVertex3d(GLdouble