OpenGL指定顶点

还是需要以实例的形式来指定OpenGL指定顶点的函数  glVertex*()函数。

glVertex2s(2,3);  表示具有三维坐标(2,3,0)的顶点(记住,如果未指定z坐标,它便默认为0)。

glVertex3d(0.0,0.0,3.14159265); 类型为双精度的浮点值。

glVertex4f(2.3,1.0.-2.2,2.0); 齐次坐标表示一个具有三维坐标(1.15,0.5,-1.1)的顶点(记住,x,y和z坐标最终将除以w)。

GLdouble dvect[3] = {5.0,9.0,1992.0}; 

glVertex3dv(dvect); dvect是一个指向数组的指针,这个数组包含了3个双精度浮点值。

 

OpenGL几何图元

指定顶点,还需要知道如何告诉OpenGL根据这些顶点创建一组点、一条直线或一个多边形。为了实现这个目的,需要把一组顶点放在一对glBegin()和glEnd()之间。传递给glBegin()的参数决定了这些顶点所构建的几何图元的类型,例如:

glBegin(GL_POLYGON);

glVectex2f(0.0,0.0);

glVectex2f(0.0,3.0);

glVectex2f(4.0,3.0);

glVectex2f(6.0,1.5);

glVectex2f(4.0,0.0);

glEnd();

 

如果用GL_POINTS代替GL_POLYGON,这个图元就是5个点。

 

 使用glBegin()和glEnd()的限制


顶点最重要的信息是它们的坐标,它们是由glVertex*()函数指定的。另外,还可以使用特殊的函数,为每个顶点指定额外的特殊数据,例如颜色,法线向量,纹理坐标,或上述的任意组合,另外,还有一些函数可以在glBegin()和glEnd()之间使用

 

 除了这些函数之外,glBegin()和glEnd()之间不能使用其他OpenGL函数。如果采用了这样的做法,绝大多数情况下将会出现错误。有些顶点数组函数,例如glEnableClientState()和glVertexPointer(),如果在glBegin()和glEnd()之间调用,将产生未定义的行为,但是不一定会产生错误。同样,与OpenGL相关的函数,例如glX*()函数,如果在glBegin()和glEnd()之间调用,也具有未定义的行为,这种情况应该尽量避免,因为它们很难调试出来。

glBegin()和glEnd()之间当然可以包含其他编程语言结构。

#define PI 3.1415926535898

GLint circle_points = 100;

glBegin(GL_LINE_LOOP);

for(i = 0; i < circle_points; i++)

{

      angle = 2*PI*i/circle_points;

      glVertex2f(cos(angle),sin(angle));

}

glEnd();

 

posted @ 2021-07-15 17:53  joorey  阅读(218)  评论(0编辑  收藏  举报