zoukankan      html  css  js  c++  java
  • OpenGL几何图元绘制

    在glBegin和glEnd之间执行有效的函数

    glVertex*()    //设置顶点坐标
    glColor*()      //设置当前颜色
    glIndex*()     //设置当前颜色索引
    glNormal*()   //设置法线向量坐标
    glTexCoord*()    //设置纹理坐标
    glMultiTexCoord*ARB()  //为多重纹理映射设置纹理坐标
    glEdgeFlag*()    //控制边的绘制
    glMaterial*()      //设置材质属性
    glArrayElement()  //抽取顶点数组数据
    glEvalCoord*()、glEvalPoint*()  //生成坐标
    glCallList()、glCallLists()        //执行显示列表


      缺省逆时针(GL_CCW)为正方向,可通过glFrontFace来指定面元的正面。

    示例代码:

    void DrawMyObjects(void)
    {
      /* draw some points */
      glBegin(GL_POINTS);
        glColor3f(1.0,0.0,0.0);
        glVertex2f(-10.0,11.0);
        glColor3f(1.0,1.0,0.0);
        glVertex2f(-9.0,10.0);
        glColor3f(0.0,1.0,1.0);
        glVertex2f(-8.0,12.0);
      glEnd();
    
      /* draw some line_segments */
      glBegin(GL_LINES);
        glColor3f(1.0,1.0,0.0);
        glVertex2f(-11.0,8.0);
        glVertex2f(-7.0,7.0);
        glColor3f(1.0,0.0,1.0);
        glVertex2f(-11.0,9.0);
        glVertex2f(-8.0,6.0);
      glEnd();
    
      /* draw one opened_line */
      glBegin(GL_LINE_STRIP);
        glColor3f(0.0,1.0,0.0);
        glVertex2f(-3.0,9.0);
        glVertex2f(2.0,6.0);
        glVertex2f(3.0,8.0);
        glVertex2f(-2.5,6.5);
      glEnd();
    
      /* draw one closed_line */
      glBegin(GL_LINE_LOOP);
        glColor3f(0.0,1.0,1.0);
        glVertex2f(7.0,7.0);
        glVertex2f(8.0,8.0);
        glVertex2f(9.0,6.5);
        glVertex2f(10.3,7.5);
        glVertex2f(11.5,6.0);
        glVertex2f(7.5,6.0);
      glEnd();
    
      /* draw one filled_polygon */
      glBegin(GL_POLYGON);
        glColor3f(0.5,0.3,0.7);
        glVertex2f(-7.0,2.0);
        glVertex2f(-8.0,3.0);
        glVertex2f(-10.3,0.5);
        glVertex2f(-7.5,-2.0);
        glVertex2f(-6.0,-1.0);
      glEnd();
    
      /* draw some filled_quandrangles */
      glBegin(GL_QUADS);
        glColor3f(0.7,0.5,0.2);
        glVertex2f(0.0,2.0);
        glVertex2f(-1.0,3.0);
        glVertex2f(-3.3,0.5);
        glVertex2f(-0.5,-1.0);
        glColor3f(0.5,0.7,0.2);
        glVertex2f(3.0,2.0);
        glVertex2f(2.0,3.0);
        glVertex2f(0.0,0.5);
        glVertex2f(2.5,-1.0);
      glEnd();
    
      /* draw some filled_strip_quandrangles */
      glBegin(GL_QUAD_STRIP);
        glVertex2f(6.0,-2.0);
        glVertex2f(5.5,1.0);
        glVertex2f(8.0,-1.0);
        glColor3f(0.8,0.0,0.0);
        glVertex2f(9.0,2.0);
        glVertex2f(11.0,-2.0);
        glColor3f(0.0,0.0,0.8);
        glVertex2f(11.0,2.0);
        glVertex2f(13.0,-1.0);
        glColor3f(0.0,0.8,0.0);
        glVertex2f(14.0,1.0);
      glEnd();
    
      /* draw some filled_triangles */
      glBegin(GL_TRIANGLES);
        glColor3f(0.2,0.5,0.7);
        glVertex2f(-10.0,-5.0);
        glVertex2f(-12.3,-7.5);
        glVertex2f(-8.5,-6.0);
        glColor3f(0.2,0.7,0.5);
        glVertex2f(-8.0,-7.0);
        glVertex2f(-7.0,-4.5);
        glVertex2f(-5.5,-9.0);
      glEnd();
    
      /* draw some filled_strip_triangles */
      glBegin(GL_TRIANGLE_STRIP);
        glVertex2f(-1.0,-8.0);
        glVertex2f(-2.5,-5.0);
        glColor3f(0.8,0.8,0.0);
        glVertex2f(1.0,-7.0);
        glColor3f(0.0,0.8,0.8);
        glVertex2f(2.0,-4.0);
        glColor3f(0.8,0.0,0.8);
        glVertex2f(4.0,-6.0);
      glEnd();
    
      /* draw some filled_fan_triangles */
      glBegin(GL_TRIANGLE_FAN);
        glVertex2f(8.0,-6.0);
        glVertex2f(10.0,-3.0);
        glColor3f(0.8,0.2,0.5);
        glVertex2f(12.5,-4.5);
        glColor3f(0.2,0.5,0.8);
        glVertex2f(13.0,-7.5);
        glColor3f(0.8,0.5,0.2);
        glVertex2f(10.5,-9.0);
      glEnd();
    }
    

    点的大小[方形]  反走样后点为圆形

    void glPointSize(GLfloat size);
    

    线宽

    void glLineWidth(GLfloat width);
    

    点画线 glEnable(GL_LINE_STIPPLE)

    void glLineStipple(GLint factor, GLushort pattern);
    

    多边形模式

    线框模式:glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

    void glPolygonMode(GLenum face, GLenum mode);
    

    多边形剔除 glEnable(GL_CULL_FACE)

    剔除反面:glCullFace(GL_BACK);

    void glCullFace(GLenum mode);
    

    点画多边形 glEnable(GL_POLYGON_STIPPLE)

    void glPolygonStipple(const GLubyte *mask);
    

    法线向量

    归一化(开销较下要大)   glEnable(GL_NORMALIZE)

    均匀缩放归一化     glEnable(GL_RESCALE_NORMAL)

  • 相关阅读:
    多线程05.thread不知道的知识
    多线程04.策略模式
    多线程03.实现Runnable接口
    多线程02.继承Thread类
    多线程01.newThread的方式创建线程
    静态代理与动态代理
    从零开始学Kotlin第七课
    项目需求变更维护难.....
    加密算法入门
    将重复的数据合并成一行-反射
  • 原文地址:https://www.cnblogs.com/kekec/p/2332038.html
Copyright © 2011-2022 走看看