您的位置:首页 > 编程语言 > Qt开发

【Qt OpenGL教程】02:你的第一个多边形

2015-08-01 19:44 387 查看
第02课:你的第一个多边形[b] (参照NeHe)[/b]
这次教程中,我们将添加一个三角形和一个四边形。或许你认为这很简单,但要知道任何复杂的绘图都是从简单开始的,或者说任何复杂的模型都是可以分解成简单的图形的。所以,我们还是从简单的图形开始吧。

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

程序运行时效果如下:






下面进入教程:

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

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

void MyGLWidget::paintGL()                              //从这里开始进行所以的绘制
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //清除屏幕和深度缓存
glLoadIdentity();                                   //重置当前的模型观察矩阵

glTranslatef(-1.5f, 0.0f, -6.0f);                   //左移1.5单位,并移入屏幕6.0单位
glBegin(GL_TRIANGLES);                              //开始绘制三角形
glVertex3f(0.0f, 1.0f, 0.0f);                   //上顶点
glVertex3f(-1.0f, -1.0f, 0.0f);                 //左下
glVertex3f(1.0f, -1.0f, 0.0f);                  //右下
glEnd();                                            //三角形绘制结束

glTranslatef(3.0f, 0.0f, 0.0f);                     //右移3.0单位
glBegin(GL_QUADS);                                  //开始绘制四边形
glVertex3f(-1.0f, 1.0f, 0.0f);                  //左上
glVertex3f(1.0f, 1.0f, 0.0f);                   //右上
glVertex3f(1.0f, -1.0f, 0.0f);                  //左下
glVertex3f(-1.0f, -1.0f, 0.0f);                 //右下
glEnd();                                            //四边形绘制结束
}
当调用了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没有其他点了,这样将显示一个填充的三角形。

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

全部教程中需要的资源文件点此下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: