首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

OpenGL-点、直线、多角形与几个函数小记

2013-02-19 
OpenGL---点、直线、多边形与几个函数小记一、点、直线和多边形 一般情况下,OpenGL中的点将被画成单个的像素,

OpenGL---点、直线、多边形与几个函数小记
一、点、直线和多边形 一般情况下,OpenGL中的点将被画成单个的像素,虽然它可能足够小,但并不会是无穷小。数学上的直线没有宽度,但OpenGL的直线则是有宽度的。可以认为,OpenGL的“直线”概念与数学上的“线段”接近,它可以由两个端点来确定。OpenGL规定,一个多边形必须是一个“凸多边形”(注意:如果使用的多边形不是凸多边形,则最后输出的效果是未定义的——OpenGL为了效率,放宽了检查,这可能导致显示错误。要避免这个错误,尽量使用三角形,因为三角形都是凸多边形) 二、在OpenGL中指定顶点 点”是一切的基础。 OpenGL提供了一系列函数指定一个点。它们都以glVertex开头,后面跟一个数字和1~2个字母。例如: glVertex2d glVertex2f glVertex3f glVertex3fv 等等。 数字表示参数的个数:2表示有两个参数,3表示三个,4表示四个。字母表示参数的类型:                  s表示16位整数(OpenGL中将这个类型定义为GLshort),                  i表示32位整数(OpenGL中将这个类型定义为GLint和GLsizei),                  f 表示32位浮点数(OpenGL中将这个类型定义为GLfloat和GLclampf),                  d表示64位浮点数(OpenGL中将这个类型定义为GLdouble和GLclampd)。                  v表示传递的几个参数将使用指针的方式,见下面的例子。这些函数除了参数的类型和个数不同以外,功能是相同的。例如,以下五个代码段的功能是等效的: (一)glVertex2i(1, 3); (二)glVertex2f(1.0f, 3.0f); (三)glVertex3f(1.0f, 3.0f, 0.0f); (四)glVertex4f(1.0f, 3.0f, 0.0f, 1.0f); (五)GLfloat VertexArr3[] = {1.0f, 3.0f, 0.0f};      glVertex3fv(VertexArr3); OpenGL的很多函数都是采用这样的形式。 三、关于点、直线、多边形1、关于点 点的大小默认为1个像素,但也可以改变。改变的命令为glPointSize,其函数原型如下:void glPointSize(GLfloat size);size必须大于0.0f,默认值为1.0f,单位为“像素”。注意:对于具体的OpenGL实现,点的大小都有个限度的,如果设置的size超过最大值,则设置可能会有问题。 示例代码:

void myFun(void){    glClear(GL_COLOR_BUFFER_BIT);    glPolygonM ode(GL_FRONT, GL_FILL); // 设置正面为填充模式    glPolygonM ode(GL_BACK, GL_LINE);  // 设置反面为线形模式    glFrontFace(GL_CCW);              // 设置逆时针方向为正面    glBegin(GL_POLYGON);              // 按逆时针绘制一个正方形,在左下方        glVertex2f(-0.5f, -0.5f);        glVertex2f(0.0f, -0.5f);        glVertex2f(0.0f, 0.0f);        glVertex2f(-0.5f, 0.0f);    glEnd();    glBegin(GL_POLYGON);              // 按顺时针绘制一个正方形,在右上方        glVertex2f(0.0f, 0.0f);        glVertex2f(0.0f, 0.5f);        glVertex2f(0.5f, 0.5f);        glVertex2f(0.5f, 0.0f);    glEnd();    glFlush();}

(3)剔除多边形表面 在三维空间中,一个多边形虽然有两个面,但我们无法看见背面的那些多边形,而一些多边形虽然是正面的,但被其他多边形所遮挡。在这种时候,可以将不必要的面剔除,以提交处理图形的效率。1、使用glEnable(GL_CULL_FACE)来启动剔除功能(使用glDisable(GL_CULL_FACE)可以关闭之)2、使用glCullFace来进行剔除。 glCullFace的参数可以是GL_FRONT,GL_BACK或者GL_FRONT_AND_BACK,分别表示剔除正面、剔除反面、剔除正反两面的多边形。 注意:剔除功能只影响多边形,而对点和直线无影响。例如,使用glCullFace(GL_FRONT_AND_BACK)后,所有的多边形都将被剔除,所以看见的就只有点和直线。 (4)镂空多边形 直线可以被画成虚线,而多边形则可以进行镂空。 1、使用glEnable(GL_POLYGON_STIPPLE)来启动镂空模式(使用glDisable(GL_POLYGON_STIPPLE)可以关闭之)。 2、使用glPolygonStipple来设置镂空的样式。 void glPolygonStipple(const GLubyte *mask);  整理编辑,转载请注明出处: http://blog.csdn.net/xn4545945参考《OpenGL入门教程(精)》、《OpenGL超级宝典》


热点排行