一杯清酒邀明月
天下本无事,庸人扰之而烦耳。

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

读完这一次教程,你还会学到如何在空间放置模型以及了解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没有其他点了,这样将显示一个填充的三角形。

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

posted on 2020-11-27 14:35  一杯清酒邀明月  阅读(538)  评论(1编辑  收藏  举报