OpenGL 解析glBegin()

函数原型:

void glBegin(GLenum mode)

glBegin()是和glEnd()结合起来使用。

参数解析:

mode:创建元素的类型,比如:点,线等。可以是以下数值:

GL_POINTS:把每个顶点作为一个点进行处理,顶点n定义了点n,绘制N个点。

GL_LINES:   把每个顶点作为一个独立的线段,顶点2n-1和2n之间定义了n条线段,绘制N/2条线段

GL_LINE_STRIP:绘制从第一个顶点到最后一个顶点依次相连的一组线段,第n和n+1个顶点定义了线段n,绘制n-1条线段。

GL_LINE_LOOP: 绘制从第一个顶点到最后一个顶点依次相连的一组线段,然后最后一个顶点和第一个顶点相连,第n和n+1个顶点定义了线段n,绘制n条线段。

GL_TRIANGLES: 把每个顶点作为一个独立的三角形,顶点3n-2,3n-1和3n定义了第n个三角形,绘制了N/3个三角形。

GL_TRIANGLE_STPIP:绘制一组相连的三角形,对于奇数n,顶点n,n+1,和n+2定义了第n个三角形;对于偶数n,顶点n+1,n和n+2定义了第n个三角形,绘制N-2个三角 形。

GL_QUADS: 绘制由四个顶点组成的一组单独的四边形。顶点4n-3,4n-2,4n-1和4n定义了第n个四边形。绘制了N/4个四边形。

GL_QUAD_STRIP:绘制一组相连的四边形。每个四边形是由一对顶点及其后给定的一对顶点共同确定的。顶点2n-1,2n,2n+2和2n+1定义了第n个四边形,绘制了N/2-1个   四边形。

GL_POLYGON:      绘制了一个凸多边形。顶点1到n定义了这个多边形。

注:

OpenGL空间使用的是右手系的定义,与屏幕水平方向一致,并方向向右的是x轴;与屏幕垂直方向一致,并方向向上的是y轴;与屏幕垂直方向,并方向向外的是z轴。而glTranslatef(),glScalef(),glRotatef()等此类几何变换接口的作用是对当前模型空间进行几何变换,在glBegin()和glEnd()之间是无效的。因此,对模型的位置进行转换,要在glBegin()和glEnd()接口之前进行处理。

例:

glBegin(GL_TRIANGLES)

glTranslatef(1,1,1);


glEnd();

上面的代码则不会把模型的位置进行转移。应该写成:

glTranslatef(1,1,1);

glBegin(GL_TRIANGLES);


glEnd();


下面是一个使用glBegin(GL_POLYGON)画正n边形的例子。n越大就越接近圆。n到一定值后,人眼则认为是真正的圆。


#include
#include
const int n = 50;//当n为3时为三角形;n为4时是四边形,n为5时为五边形。。。。。
const GLfloat R = 0.5f;//圆的半径
const GLfloat pi = 3.1415926f;
void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POLYGON);
for (int i = 0; i < n; i++)
{
glVertex2f(R*cos(2 * pi / n*i), R*sin(2 * pi / n*i));
}
glEnd();
glFlush();
}


int main(int argc, char ** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("123");
glutDisplayFunc(myDisplay);
glutMainLoop();
return 0;
}



OpenGL 解析glBegin()_第1张图片


你可能感兴趣的:(OpenGL)