zoukankan      html  css  js  c++  java
  • 【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();

      

  • 相关阅读:
    【模版 Luogu P3808/P3796/P5357】AC自动机(简论)
    2019暑假 诸暨海亮集训游记
    【数据结构模版】可持久化线段树 && 主席树
    2019浙江集训——待整理的知识点、博客和题解
    浅谈树链剖分 F&Q
    Luogu P1967 NOIP2013 货车运输
    最小树形图(朱刘算法)--学习笔记
    Luogu P43916 图的遍历
    pytest扫盲12--assert断言
    pytest扫盲11--xfail参数详解
  • 原文地址:https://www.cnblogs.com/liustdelphi/p/2921523.html
Copyright © 2011-2022 走看看