zoukankan      html  css  js  c++  java
  • 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没有其他点了,这样将显示一个填充的三角形。

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

  • 相关阅读:
    OSI安全体系结构
    PHP 二维数组根据相同的值进行合并
    Java实现 LeetCode 17 电话号码的字母组合
    Java实现 LeetCode 16 最接近的三数之和
    Java实现 LeetCode 16 最接近的三数之和
    Java实现 LeetCode 16 最接近的三数之和
    Java实现 LeetCode 15 三数之和
    Java实现 LeetCode 15 三数之和
    Java实现 LeetCode 15 三数之和
    Java实现 LeetCode 14 最长公共前缀
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/14047828.html
Copyright © 2011-2022 走看看