名称解释:
渲染render:对一个三维物体进行几何描述并且把它转换成为屏幕上的一幅图像。
透视:指直线之间的角度。
纹理贴图texture mapping:通过一幅图像向一个多边形提供额外细节的技巧称为纹理贴图
纹理texture:我们所提供的图像。
纹理单元texel:纹理中每个单独的元素。
过滤filtering:在一个物体的表面上拉伸或压缩纹理单元的过程
混合blending:屏幕上颜色或物体的组合。
抗锯齿antialiasing:
保持模式retained mode:我们向API或者工具箱提供物体或场景的高层几何描述。
立即模式immediate mode:我们按照一次一片的方式创建几何物体。
视口viewport:窗口内部用于绘制裁剪区域的客户区域。
管线pipeline
第一个程序
#include
void RenderScene(void){
}
void SetupRC(void){
}
int main(int argc, char *argv[])
{
}
画点
glBegin(GL_POINTS);
glVertex3f(0.0f, 0.0f,0.0f);
glEnd();
设置点的大小:
在指定图元之前指定点的大小:
glpointSize(**);
画线:
glBegin(GL_POINTS);
glVertex3f(0.0f, 0.0f,0.0f);
glVertex3f(50.0f, 50.0f,50.0f);
glEnd();
画线带:
glBegin(GL_POINT_STRIP);
glVertex3f(0.0f, 0.0f,0.0f);
glVertex3f(50.0f, 50.0f,0.0f);
glVertex3f(50.0f, 100.0f,0.0f);
glEnd();
画线环:
glBegin(GL_POINT_LOOP);
glVertex3f(0.0f, 0.0f,0.0f);
glVertex3f(50.0f, 50.0f,0.0f);
glVertex3f(50.0f, 100.0f,0.0f);
glEnd();
设置线的宽度:
glLineWidth(**);
画直线点画:
首先要启用点画(stippling)
glEnable(GL_LINE_STIPPLE));
glLineStipple(factor,pattern);其中factor是点画乘法因子 pattern代表点画模式例如0x5555
画三角形:
glBegin(GL_TRIANGLES);
glVertex2f(0.0f, 0.0f);
glVertex2f(50.0f, 50.0f);
glVertex2f(50.0f,0.0f);
glVertex2f(-50.0f, 0.0f);
glVertex2f(-75.0f, 50.0f);
glVertex2f(-25.0f,0.0f);
glEnd();
画三角形扇:
glBegin(GL_TRIANGLE_FAN);
glVertex3f(0.0f, 0.0f,75.0f);
glColor3f(1.0f,1.0f,1.0f);
……..
glEnd();
创建菜单:
void ProcessMenu(int value)
{
}
然后再main函数里:
glutCreateMenu(ProcessMenu);
glutAddMenuEntry("Toggle depth test",1);
glutAddMenuEntry("Toggle cull backface",2);
glutAddMenuEntry("Toggle outline back",3);
glutAttachMenu(GLUT_RIGHT_BUTTON);
深度测试:一种有效的用于隐藏表面消除的技巧。
当一个像素被绘制时,它将被设置一个值(成为z值),以表示它和观察者之间的距离。以后当这个屏幕位置需要绘制另一个像素时,新像素的z值就会与原来已经存储的那个像素进行比较。如果新的z值更高,他就更靠近观察者。否则,它必须位于原来那个像素的后面。
启用深度测试:
glEnable(GL_DEPTH_TEST);
禁用: glDisable(GL_DEPTH_TEST);
剔除:消除已经知道肯定不会被显示的几何图形
背面剔除,用于消除一个表面的背面
启用:glEnable(GL_CULL_FACE);
禁用:glDisable(GL_CULL_FACE);
多边形模式:
指定只绘制多边形的外框,甚至只绘制点(只有顶点被绘制)。glPolygonMode函数允许多边形作为实心图形、外框或点进行渲染。另外,也可以对多边形的两面都应用这个渲染模式,也可以只对多边形的正面或背面应用这个模式。
线框:glPolygonMode(GL_BACK,GL_LINE); 这里只把背面绘制成一个多边形
实心:glPolygonMode(GL_BACK,GL_FILL);
键盘上下左右操作:
void SpecialKeys(int key, int x, int y)
{
}
在main函数中调用:
隐藏和显示边界:
GLboolean bEdgeFlag = TRUE;
void ProcessMenu(int value)
// Begin the triangles
设置定时器
void Timer(int value)
{
}
int main(int argc, char* argv[])
{
}
裁剪测试
glEnable(GL_SCISSOR_TEST);或者gldisable(GL_SCISSOR_TEST);
void glScissor(GLint
模板测试
glEnable(GL_STENCIL_TEST);或者gldisable(GL_STENCIL_TEST);
void glStencilFunc(GLenum