显示模式。其中第一个参数是单缓冲窗口,第二个参数是颜色模式。
2.GLUT:OpenGL工具箱。OpenGL utility toolkit
3.glutCreateWindow("Simple") 创建OpenGL窗口,引号内内容为窗口标题栏标题
4.glutDisplayFunc(RenderScene) 显示回调,也是我们放置OpenGL渲染函数调用的
地方。
5.glutMainLoop() 启动了GLUT框架的运行
6.glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
这个函数设置了一种颜色,用于清除窗口。
7.glClear(GL_COLOR_BUFFER_BIT)用当前消除颜色消除窗口。
8.glFlush()刷新绘图命令,导致所有未执行的OpenGL命令被执行
9.glutReshapeFunc(),此函数注册一个回调函数,当窗口的大小发生变化时,GLUT函数
库就会调用这个函数。
10.Void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
x,y指定了窗口内部视口的左下角,width和height参数指定了视口的面积(以像
素为单位),视口以实际屏幕坐标定义了窗口中的区域,OpenGL可以在这个区域
中进行绘图。
11.void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble
top,GLdouble near,GLdouble far)
此函数用于创建正投影模式命令。
12.glMatrixMode(GL_PROJECTION)
glLoadIdentity()
重新设置坐标系统。
13.Void glutTimerFunc(unsighed int msecs,void (*func)(int value), int value)
这个函数使GLUT等待msecs毫秒,然后调用func函数,可在value参数中传递一个用
户定义的值。
14.glutSwapBuffers()刷新绘图命令,并进行交换。
15.Void glEndble (GLenum capability)
Void glDisable(GLenum capability)
打开或关闭某类型的状态变量。
glEnable(GL_LIGHTING)
glDisable(GL_LIGHTING)
打开/关闭光照效果。
16.GLboolean glIsEnabled(GLenum capability)
判断某状态变量是否已被打开。
17.Void glFinish(void)
强制完成以前所有的OpenGL命令,和glFlush不同,这个函数在所有的渲染操作之前
不会返回。
18.设置3D画布,建立可视区域的代码(x,y,z均为-100至+100)
//修改可视区域和视口,当窗口改变大小时被调用
Void ChangeSize (GLsizei w,GLsizei h)
{
GLfloat nRange=100.0f
//防止被0所除
if(h==0)
h=1;
//根据窗口大小设置视口
glViewport(0,0,w,h)
//重置投影矩阵堆栈
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
//建立裁剪区域(左、右、底、顶、近、远)
if(w<=h)
glOrtho(-nRange,nRange,-nRange*h/w,nRange*h/w,-nRange,nRange)
else
glOrtho(-nRange*h/w,nRange*h/w,-nRange,nRange, -nRange,nRange)
//重置模型视图矩阵堆栈
glMatrixMode(GL_MODEVIEW);
glLoadIdentity();
19.绘制点 glVertex
如:glVertex3f(50.0f,50.0f,0.0f)
修改点的大小 Void glPointSize(GLfloat size)
参数指定了被绘点的近似直径(以像素计)
glPointSize函数必须在glBegin/glEnd语句之外进行调用
在这两个函数调用之间,并不是所有的OpenGL函数都是有效的
20.绘制图元,使用glBegin,glEnd
如:glBegin(GL_POINT) //选择点作为图元
glVertex3f(0.0f,0.0f,0.0f)
glEnd
又如画线,在点(0,0,0)和(50,50,50)之间画一条线
glBegin(GL_LINES)
glVertex3f(0.0f,0.0f,0.0f)
glVertex3f(50.0f,50.0f,50.0f)
glEnd()
注意:两个顶点画一直线,若点的个数为奇数,则最后一个点被忽略
21.线带GL_LINE_STRIP绘制一条经过所有点的连续的线
如:glBegin(GL_LINE_STRIP)
glVertex3f(0.0f,0.0f,0.0f)
glVertex3f(50.0f,50.0f,50.0f)
glVertex3f(50.0f,100.0f,0.0f)
glEnd();
22.线环(首尾两点也闭合) GL_LINE_LOOP
23.设置直线宽度:void glLineWidth(GLfloat width)
24.直线点画
先启用:glEnable(GL_LINE_STIPPLE)
再调用:void glLineStipple(GLint factor,GLushot pattern)
25.绘制三角形
glBegin(GL_TRIANGLES)
glVertex2f(0.0f,0.0f)
glVertex2f(25.0f,25.0f)
glVertex2f(50.0f,0.0f)
glEnd()
26.OpenGL认为多边形具有正面逆时针方向的环绕
27.设置多边形颜色
1)glShadeModel(GL_FLAT)
让OpenGL用当前颜色(也就是这个多边形最后一个顶点的颜色)填充这个多边形
2)glShadeModel(GL_SMOOTH)
让OpenGL根据每个顶点对三角形进行渐变着色,对相邻顶点的颜色进行匀和。
28.最后画的物体会出现在以前绘制的所有物体的前面。
解决办法:深度测试。每个像素赋予一个Z值,Z值越大,此像素越靠前。
启用深度测试:glEnable(GL_DEPTH_TEST)
29.每当场景被渲染时,深度缓冲区必须被清除,深度缓冲区类似于颜色缓冲区,它包
含了有关像素与观察者之间距离的信息。
//清除窗口和深度缓冲区
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
30.剔除、隐藏背面:glEnable(GL_CULL_FACE)
31.顺时针环绕为正面:glFrontFace(GL_CW)
逆时针环绕为正面(缺省):glFrontFace(GL_CCW)
32.多边形模式
外框: glPolygonMode(GL_BACK,GL_LINE)
实心:glPolygonMode(GL_BACK,GL_FILL)
33.顶点在屏幕上显示之前,一共会发生3种类型的转换:视图、模型和投影。
转换 用途
视图Viewing 指定观察者或照相机的位置
模型Modeling 在场景中移动物体
模型视图ModelView 描述视图和模型转换的二元性
投影Projection 对观察区域进行裁剪和缩放
视口Viewport 一种伪转换,对窗口上的最终输出进行缩放
34.glutWireCube(10.0f)绘制立方体
35.void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
3个参数表示沿x,y,z方向移动的数量。
36.glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
绕着由x,y,z参数所指定的那个向量执行旋转操作,angle以角度为单位,逆时针方
向。
37.缩放:glScalef(GLfloat x,GLfloat y,GLfloat z)
38.把模型视图矩阵重置回原点;载入单位矩阵
glMatrixMode(GL_MODELVIEW) 把当前矩阵设置为模型视图矩阵
glLoadIdentity() 重置
39.设置绘图颜色
glColor3f(x,y,z) 参数取值为0.0-1.0
glColor3ub(0,255,128)=RGB(0,255,128)
40.着色:一种颜色到下一种颜色的平滑过渡(渐变)
启用渐变着色:glShadeModel(GL_SMOOTH)
41.一个物体如果自身不会发光,它一般受到3种不同类型的光的照射:
环境光(ambient),散射光(diffuse),镜面光(specular)
启用光照 glEnable(GL_LIGHTING)
设置光照模型
GLfloat ambientLight[]={1.0f,1.0f,1.0f,1.0f}
glLightModelfv(GL_LIGHT_MODEL_AMBIENT,ambientLight)
42.设置材料属性
第一种方法:
GLfloat gray[]={0.75f,0.75f,0.75f,1.0f}
glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,gray)
第一个参数指定材料属性是作用于正面、背面还是双面。
(GL_FRONT、GL_BACK、GL_FRONT_AND_BACK)
第二个方法:颜色追踪(推荐)
glEnable(GL_COLOR_MATERIAL) //启用颜色追踪
glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE)
43.根据一个多边形上的3个点计算法线向量
void gltGetNormalVector(GLTVector vp1,GLTVector vp2,GLTVector
vp3,GLTVector vNormal)