文档库 最新最全的文档下载
当前位置:文档库 › OpenGL学习笔记

OpenGL学习笔记

OpenGL学习笔记
OpenGL学习笔记

GL(Open Graphics Library)

1 状态管理

void glClearAccum (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);

void glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);

void glClearDepth (GLclampd depth);

void glClearIndex (GLfloat c);

void glClearStencil (GLint s);

设置累积颜色、颜色缓冲区、深度缓冲区、颜色索引、模板索引值。

void glClear (GLbitfield mask);

清除缓冲区。

void glColor{3 4}{b s i f d ub us ui}[v](parameters);

指定当前颜色值,parameters可以仅指定三个参数,此时不设定alpha值。

void glFlush (void);

void glFinish (void);

强制以前发出的OpenGL命令开始执行,其中glFinish在以前的命令执行完成之前不会返回。void glRect{s i f d}[v](parameters);

绘制z=0平面上,指定两点的,边平行于xy轴的矩形。

void glVertex{2 3 4}{s i f d}[v](parameters);

指定顶点,如果未指定z值,则z=0,指定四个参数时第四个参数w,此时坐标值要除以w。void glBegin (GLenum mode);

void glEnd (void);

绘制开始和结束。

glVertex, glColor, glSecondaryColor, glIndex, glNormal, glFogCoord, glTexCoord, glMultiTexCoord, glVertexAttrib, glEvalCoord, glEvalPoint, glArrayElement, glMaterial, glEdgeFlag, glCallList, glCallLists can be used between glBegin and glEnd, If any other GL command is executed between glBegin and glEnd, the error flag is set and the command is ignored.

void glEnable(GLenum cap);

void glDisable(GLenum cap);

启用或关闭一个功能。

GLboolean glIsEnabled (GLenum cap);

查询一个功能是否启用。

void glGet{Boolean Integer Float Double Pointer}v(GLenum, type*params);

查询OpenGL的状态。

void glPointSize (GLfloat size);

点的宽度,以像素为单位,默认为1.0。

void glLineStipple (GLint factor, GLushort pattern);

void glLineWidth (GLfloat width);

直线的点画模式和宽度。

void glPolygonMode (GLenum face, GLenum mode);

void glPolygonOffset (GLfloat factor, GLfloat units);

void glPolygonStipple (const GLubyte *mask);

多边形两面的绘图模式,缩放值和偏移量,点画模式。

void glFrontFace (GLenum mode);

GL_CCW,顶点顺序逆时针时为正面,默认值;GL_CW,顺时针为正面。

void glEdgeFlag[v](boolean [*]flag);

表示一个顶点是否应该被认为是多边形的边界的起点。可以为GL_TRUE或GL_FALSE。void glNormal3{b s i f d}[v]( parameters)

设置当前法向量。

void glShadeModel(GLenum mode);

GL_SMOOTH(默认),平滑着色,GL_FLAT,单调着色。

2 视图

void glMatrixMode(GLenum mode);

GL_MODELVIEW 模型视图矩阵;GL_PROJECTION 投影矩阵;GL_TEXTURE 纹理矩阵。void glLoadIdentity(void);

把单位矩阵加载到当前矩阵。

void glPushMatrix(void);

void glPopMatrix(void);

复制当前矩阵栈顶并压栈,或弹出栈顶。

void glLoadMatrix{f d}(const TYPE*m);

void glMultMatrix{f d}(const TYPE*m);

void glLoadTransposeMatrix{f d}(const TYPE*m);

void glMultTransposeMatrix{f d}(const TYPE*m);

加载或右乘m(列优先)或mT(m转置,行优先)到当前矩阵。

void glGet{Float Double}v(GLenum, type*params);

GL_VIEWPORT,GL_MODELVIEW_MATRIX,GL_PROJECTION_MATRIX,获取当前变换参数。void glTranslate{f d}( TYPE x, TYPE y, TYPE z);

移动矩阵。

void glRotate{f d}( TYPE angle, TYPE x, TYPE z);

(x, y, z)为旋转轴旋转angle度(角度)。

void glScale{f d}( TYPE x, TYPE y, TYPE z);

缩放矩阵,参数为各个轴的缩放量。

void glFrustum (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top,

GLdouble zNear, GLdouble zFar);

透视视图平截头体的近平面的左右底顶坐标,和近平面原平面坐标。

void glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top,

GLdouble zNear, GLdouble zFar);

正交平行视图平截头体的近平面的左右底顶坐标,和近平面原平面坐标。

void glViewport (GLint x, GLint y, GLsizei width, GLsizei height);

(x, y)指定视口左下角,width和height指定宽和高。

void glDepthRange(GLclampd zNear, GLclampd zFar);

经过调整后可以存储在深度缓冲区中的最小值和最大值,默认是0.0和1.0。参数要位于0-1范围,就像颜色值一样。

void glClipPlane (GLenum plane, const GLdouble *equation);

plane是GL_CLIP_PLANEi(i=0-5),equation的四个值定义一个Ax+By+Cz+D=0的平面。这个平面是在在视觉坐标下定义的,不受模型视图矩阵的影响。

3 光照

void glLight{i f}[v](GLenum light, GLenum pname, TYPE param);

创建光源,light可以为GL_LIGHT0- GL_LIGHT7。

pname:

GL_AMBIENT:光的环境强度;GL_DIFFUSE:光的散射强度;GL_SPECULAR:光的镜面强度

GL_POSITION:光源的位置(x, y, z, w),w=0.0是为方向性光源,否则是位置式光源。

GL_SPOT_DIRECTION:聚光灯方向(x, y, z);GL_SPOT_EXPONENT:聚光灯的聚光指数

GL_SPOT_CUTOFF:聚光灯锥形顶角一半0-90度,为180.0时该光源不是聚光灯

GL_CONSTANT_ATTENUATION、GL_LINEAR_ATTENUATION、GL_QUADRATIC_ATTENUATION:衰减因子,该衰减对环境、散射、镜面成分均由影响。

void glLightModel{i f}[v](GLenum pname, TYPE param);

GL_LIGHT_MODEL_AMBIENT:全局环境光强度,默认(0.2, 0.2, 0.2, 1.0)。

GL_LIGHT_MODEL_LOCAL_VIEWER:无限远观察点(GL_FALSE,此时所有顶点到观察点方向固定),反之相反,影响镜面反射的计算。

GL_LIGHT_MODEL_TWO_SIDE:单面(GL_FALSE)还是双面(GL_TRUE)光照。

GL_LIGHT_MODEL_COLOR_CONTROL:镜面辅助颜色。

void glMaterial{i f}[v](GLenum face, GLenum pname, TPYE param);

材料属性,face可为GL_FRONT、GL_BACK。

pname:

GL_AMBIENT、GL_DIFFUSE、GL_SPECULAR、GL_AMBIENT_AND_DIFFUSE:材料的环境颜色、散射颜

色、镜面颜色(和光相对应)、环境散射颜色。

GL_SHININESS:镜面指数。

GL_EMISSION:发光颜色。

GL_COLOR_INDEXES:环境、散射、镜面颜色索引。

void glColorMaterial(GLenum face, GLenum mode);

指定当前材料的face面的mode(默认为GL_LIGHT_MODEL_LOCAL_VIEWER)属性定义为当前颜色。

4 混合、雾

void glBlendFunc(GLenum sfactor, GLenum dfactor);

指定源和目标混合因子。

void glFog{i f}[v](GLenum pname, TPYE param);

指定雾方程的形式和各个参数,以及雾颜色。

void glPolygonOffset(GLfloat factor, GLfloat units);

指定多边形偏移量方程中的参数。

GLU(OpenGL Utility Library)

void gluLookAt (GLdouble eyex, GLdouble eyey, GLdouble eyez,

GLdouble centerx, GLdouble centery, GLdouble centerz,

GLdouble upx, GLdouble upy, GLdouble upz);

(eyex, eyey, eyez)指定观察点,(centerx, centery, centerz)指定视线上任一点,(upx, upy, upz)指定向上方向。

void gluPerspective (GLdouble fovy, GLdouble aspect, Ldouble zNear, GLdouble zFar);

定义透视视图平截头体,fovy为yz平面上视野的角度(0-180度),aspect为纵横比(宽除以高),zNear和zFar为近远平面距离。

void gluOrtho2D (GLdouble left, Ldouble right, GLdouble bottom, GLdouble top);

正交平行视图平截头体的近平面的左右底顶坐标。

int gluProject(GLdouble objx, GLdouble objy, GLdouble objz, const GLdouble modelMatrix[16], const GLdouble projMatrix[16], const GLint viewport[4], GLdouble *winx, GLdouble *winy, GLdouble *winz); 模拟变换,把一个物体坐标变换到窗口坐标。返回GL_TRUE和GL_FALSE。

int gluUnProject(GLdouble winx, GLdouble winy, GLdouble winz, const GLdouble modelMatrix[16], const GLdouble projMatrix[16], const GLint viewport[4], GLdouble *objx, GLdouble *objy, GLdouble *objz);

逆变换,窗口坐标变换到物体坐标。

GLUT(OpenGL Utility Toolkit)

void glutInit( int* pargc, char** argv );

GULT初始化,处理命令行参数,应在调用其他GULT函数之前调用它。

void glutInitWindowPosition( int x, int y );

指定窗口位置(左上角在屏幕的坐标)。

void glutInitWindowSize( int width, int height );

指定窗口大小(以像素为单位)。

void glutInitDisplayMode( unsigned int displayMode );

指定显示模式,注意:可以用位或形式同时指定多重模式。

void glutInitDisplayString( const char* displayMode );

通过一个字符串(这个字符串类似于命令行参数)初始化。

void glutMainLoop( void );

进入GLUT事件处理循环,让所有的与“事件”有关的函数调用无限循环。

int glutCreateWindow( const char* title );

创建以参数字符串为标题的窗口,返回窗口标识。

int glutCreateSubWindow( int window, int x, int y, int width, int height ); 在父窗口(由window指定)中创建子窗口。

void glutDestroyWindow( int window );

销毁窗口。

void glutSetWindow( int window );

int glutGetWindow( void );

设定或获取“当前窗口”的标识。

void glutSetWindowTitle( const char* title );

void glutSetIconTitle( const char* title );

设定窗口或图标的标题。

void glutReshapeWindow( int width, int height );

void glutPositionWindow( int x, int y );

设置窗口大小或在屏幕上位置。

void glutShowWindow( void );

void glutHideWindow( void );

void glutIconifyWindow( void );

显示或隐藏或图标化(iconify)窗口。

void glutPushWindow( void );

void glutPopWindow( void );

void glutFullScreen( void );

全屏。

void glutPostRedisplay( void );

发送重绘窗口消息。

void glutSwapBuffers( void );

交换缓冲区。

void glutSetCursor( int cursor );

设置光标图形。

void glutTimerFunc(unsigned int msecs, void (*func)(int value), value); 注册时间中断函数。

void glutIdleFunc( void (* callback)( void ) );

注册空闲处理函数。

void glutKeyboardFunc( void (* callback)( unsigned char, int, int ) );

void glutSpecialFunc( void (* callback)( int, int, int ) );

注册键盘(或特殊按键)事件响应函数。

void glutReshapeFunc( void (* callback)( int, int ) );

注册窗口大小改变响应函数。

void glutVisibilityFunc( void (* callback)( int ) );

注册窗口可见性变化响应函数。

void glutDisplayFunc( void (* callback)( void ) );

注册重绘函数。

void glutMouseFunc( void (* callback)( int, int, int, int ) );

注册鼠标响应函数。

void glutMotionFunc( void (* callback)( int, int ) );

注册鼠标按下移动响应函数。

void glutPassiveMotionFunc( void (* callback)( int, int ) );

void glutEntryFunc( void (* callback)( int ) );

void glutKeyboardUpFunc( void (* callback)( unsigned char, int, int ) );

void glutSpecialUpFunc( void (* callback)( int, int, int ) );

void glutJoystickFunc( void (* callback)( unsigned int, int, int, int ), int pollInterval ); void glutMenuStateFunc( void (* callback)( int ) );

void glutMenuStatusFunc( void (* callback)( int, int, int ) );

void glutOverlayDisplayFunc( void (* callback)( void ) );

void glutWindowStatusFunc( void (* callback)( int ) );

void glutSpaceballMotionFunc( void (* callback)( int, int, int ) );

void glutSpaceballRotateFunc( void (* callback)( int, int, int ) );

void glutSpaceballButtonFunc( void (* callback)( int, int ) );

void glutButtonBoxFunc( void (* callback)( int, int ) );

void glutDialsFunc( void (* callback)( int, int ) );

void glutTabletMotionFunc( void (* callback)( int, int ) );

void glutTabletButtonFunc( void (* callback)( int, int, int, int ) );

注册其他事件响应函数。

int glutGet(GLenum state);

获取GLUT各种参数。

void glutWireCube( GLdouble size );

void glutSolidCube( GLdouble size );

void glutWireSphere( GLdouble radius, GLint slices, GLint stacks );

void glutSolidSphere( GLdouble radius, GLint slices, GLint stacks );

void glutWireCone( GLdouble base, GLdouble height, GLint slices, GLint stacks );

void glutSolidCone( GLdouble base, GLdouble height, GLint slices, GLint stacks );

void glutWireTorus( GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings ); void glutSolidTorus( GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings ); void glutWireDodecahedron( void );

void glutSolidDodecahedron( void );

void glutWireOctahedron( void );

void glutSolidOctahedron( void );

void glutWireTetrahedron( void );

void glutSolidTetrahedron( void );

void glutWireIcosahedron( void );

void glutSolidIcosahedron( void );

绘制典型图形。

void glutWireTeapot( GLdouble size );

void glutSolidTeapot( GLdouble size );

绘制茶壶。

void glutSetColor( int color, GLfloat red, GLfloat green, GLfloat blue );

GLfloat glutGetColor( int color, int component );

设置或获取颜色值。

相关文档