【OpenGL编程指南】之绘制几何物体

  在OpenGL中所有的几何图元最终都是由顶点描述的。顶点用于定义点、线段终点和多边形角点的坐标。

  点可以用一组浮点数来表示,所有内部计算都是建立在把顶点看成是三维基础之上的。OpenGL采用齐次坐标,所有顶点用4个浮点坐标值(x,y,z,w)表示的,一般w不用指定,默认为1。

  函数glVertex*()用于描述物体的顶点,不同版本的函数可以提供多达4个的坐标(x,y,z,w),也可以只提供2个坐标(x,y)。

  函数glPointSize用于控制被渲染点的大小,其形式如下:void glPointSize(GLfloat size);  size必须大于0,默认情况下为1.0。

直线

  在OpenGL中直线术语表示一段线段。

  为了创建点划线,可以使用glLineStipple()函数定义点画模式,然后调用glEnable()函数启用点画功能。其形式如下:void glLineStipple(GLint factor, GLushort pattern); 比如:

    glLineStipple(1, 0x3f07)
    glEnable(GL_LINE_STIPPLE);

  如果没有启用点划线功能,OpenGL会自动把pattern当成是0xFFFF,把factor当成1。

  函数glLineWidth用于设置线段的渲染宽度,其形式如下:void glLineWidth(GLfloat width);  width必须大于0,默认情况下为1.0。

多边形

  多边形是由单闭合线段循环包围的区域,线段是由它们的终点位置的顶点指定的。OpenGL在多边形构成方面做了很多限制,必须是简单的凸多边形。

  多边形边不相交则称为简单多边形;一个多边形内部任意取两个点,如果连接两个点的线段都在多边形内部,则称为凸多边形。为了避免多边形顶点不在一个平面上,尽量使用三角形来模拟表面。

  多边形具有两个面:正面和背面,取决于哪一面面对观察者,默认情况下两个面按照相同的方式绘制的。函数glPolygonMode控制一个多边形的正面和背面的绘图模式,其形式如下:void glPolygonMode(GLenum face, GLenum mode);mode参数可以为GL_FONT、GL_LINE或GL_FILL,表示被画成点、轮廓还是填充形式,默认情况下这个函数将多边形的正面和背面都画成填充形式。

  按照约定,逆时针顺序出现在屏幕上的多边形为“正面”。函数glFrontFace可以控制OpenGL的正面和背面的约定,其形式为void glFrontFace(GLenum mode),GL_CCW标记逆时针为正面,GL_CW顺时针为正面。函数glCullFace表示多边形应该在转换到屏幕坐标之前被丢弃,但必须用GL_CULL_FACE为参数调用glEnable。

  函数glEdgeFlag可以控制边界标志,其形式为vode glEdgeFlag(GLboolean flag),表示一个顶点是否应该认为是多边形的一条边界边的起点。

  

矩形

  由于矩形极为常见,OpenGL提供了填充矩形图元的函数glRect*(),其形式如下:void glRect{sifd}(type x1, type y1, type x2, type y2);可以绘制由角顶点(x1,y1)和(x2,y2)所定义的矩形。

曲线和曲面

  所有光滑曲线和表面都可以进行模拟,方法就是组合大量的短直线和小多边形。

OpenGL几何绘制图元

  函数glBegin标志着一个顶点数据列表的开始,其形式如下:void glBegin(GLenum mode);

  函数glEnd标志着一个顶点数据列表的结束。

glBegin(GL_POLYGON)
    glVertex2f(0.0, 0.0);
    glVertex2f(0.0, 3.0);
    glVertex2f(4.0, 3.0);
    glVertex2f(6.0, 1.5);
    glVertex2f(4.0, 0.0);
glEnd();

  

原文地址:https://www.cnblogs.com/liustdelphi/p/2921523.html