• Qt OpenGL 你的第一个多边形


    这次教程中,我们将添加一个三角形和一个四边形。或许你认为这很简单,但要知道任何复杂的绘图都是从简单开始的,或者说任何复杂的模型都是可以分解成简单的图形的。所以,我们还是从简单的图形开始吧。

    读完这一次教程,你还会学到如何在空间放置模型以及了解OpenGL中坐标变化。

    程序运行时效果如下:

    下面进入教程:

    我们将使用GL_TRIANGLES来创建一个三角形,GL_QUADS来创建一个四边形。在第01课代码的基础上,我们只需在paintGL()函数中增加代码。

    下面我将重写整个paintGL()函数,具体代码如下:

     1 void MyGLWidget::paintGL()                              //从这里开始进行所以的绘制
     2 {
     3     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //清除屏幕和深度缓存
     4     glLoadIdentity();                                   //重置当前的模型观察矩阵
     5  
     6     glTranslatef(-1.5f, 0.0f, -6.0f);                   //左移1.5单位,并移入屏幕6.0单位
     7     glBegin(GL_TRIANGLES);                              //开始绘制三角形
     8         glVertex3f(0.0f, 1.0f, 0.0f);                   //上顶点
     9         glVertex3f(-1.0f, -1.0f, 0.0f);                 //左下
    10         glVertex3f(1.0f, -1.0f, 0.0f);                  //右下
    11     glEnd();                                            //三角形绘制结束
    12  
    13     glTranslatef(3.0f, 0.0f, 0.0f);                     //右移3.0单位
    14     glBegin(GL_QUADS);                                  //开始绘制四边形
    15         glVertex3f(-1.0f, 1.0f, 0.0f);                  //左上
    16         glVertex3f(1.0f, 1.0f, 0.0f);                   //右上
    17         glVertex3f(1.0f, -1.0f, 0.0f);                  //左下
    18         glVertex3f(-1.0f, -1.0f, 0.0f);                 //右下
    19     glEnd();                                            //四边形绘制结束
    20 }

    当调用了glLoadIdentity()之后,我们实际上将当前点移到了屏幕中心,x轴从左到右,y轴从下到上,z轴从里到外。其中,中心右面,上面,外面的坐标值为正值。glTranslatef(x, y, z)沿着x,y和z轴移动,要注意,在glTranslatef(x, y, z)移动的时候,并不是相对屏幕中心移动,而是相对于当前所在的屏幕位置。
    glBegin(GL_TRIANGLES)的意思是开始绘制三角形,glEnd()告诉OpenGL三角形已经创建好了。通常我们会需要画3个顶点,可以使用GL_TRIANGLES;而要画4个顶点时,使用GL_QUADS会更方便。最后,如果想要画更多的顶点时,可以使用GL_POLYGON。

    本节的简单示例中,我们只画了一个三角形。如果要画第二个三角形的话,可以在这三点之后,再加三行代码(3点)。所以6点代码都应该包含在glBegin(GL_TRIANGLES)和glEnd()之间,这样不会出现多余的线,这是由于glBegin(GL_TRIANGLES)和glEnd()之间的点都是以3点为一个集合的。这同样适用于四边形。另一方面,多边形可以由任意个顶点组成,绘制多边形时不在乎glBegin(GL_POLYGON)和glEnd()之间或多少行代码。

    glBegin()之后的第一行设置了多边形的第一个顶点,glVertex的三个参数依次是x,y和z轴坐标。glEnd()告诉OpenGL没有其他点了,这样将显示一个填充的三角形。

    然后类比画出一个四边形后,就可以运行程序看效果了!

  • 相关阅读:
    面试题:你了解对象分配规则吗
    面试题:Java 对象的创建过程
    面试题:Minor GC、Major GC、Full GC的触发时机
    常见的垃圾回收算法
    Java GUI快速入门
    Java Swing 介绍
    Java 开发环境配置
    Java (windows)安装教程
    Gamma、Linear、sRGB 和Unity Color Space,你真懂了吗?
    Qt OpenGL 蒙板
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/14047828.html
Copyright © 2020-2023  润新知