Qt OpenGL 你的第一个多边形

摘要:
读完这一次教程,你还会学到如何在空间放置模型以及了解OpenGL中坐标变化。程序运行时效果如下:下面进入教程:我们将使用GL_TRIANGLES来创建一个三角形,GL_QUADS来创建一个四边形。glBegin的意思是开始绘制三角形,glEnd()告诉OpenGL三角形已经创建好了。glBegin()之后的第一行设置了多边形的第一个顶点,glVertex的三个参数依次是x,y和z轴坐标。glEnd()告诉OpenGL没有其他点了,这样将显示一个填充的三角形。

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

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

程序运行时效果如下:

Qt OpenGL 你的第一个多边形第1张

下面进入教程:

我们将使用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没有其他点了,这样将显示一个填充的三角形。

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

免责声明:文章转载自《Qt OpenGL 你的第一个多边形》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇用sqlload导入外部数据安装postgreSQL出现configure:error:readline library not found解决方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Qt OpenGL 2D图像文字

这次教程中,我们将学会如何使用四边形纹理贴图把文字显示在屏幕上。我们将把256个不同的文字从一个256×256的纹理图像中一个个提取出来,接着创建一个输出函数来创建任意我们希望的文字。 还记得在第一篇字体教程中我提到使用纹理在屏幕上绘制文字吗?通常当你使用纹理绘制文字时你会调用你最喜欢的图像处理程序,选择一种字体,然后输入你想显示的文字或段落,然后保存下来...

OpenGL实践之--窗口创建

  作为一个图形接口的OpenGL在使用严重依赖窗口,必须在窗口中绘制图形,但是自身并没有包含窗口及其相关内容。因此,学习OpenGL就必须了解一种窗口系统,不同的操作系统提供的创建窗口的API都不相同,为了避免学习OpenGL时必须去学习一整套的窗口系统的不便,简单应用可以使用GLUT(OpenGL Utility Toolkit),是一套和窗口系统无关...

opengl es 学习

http://blog.csdn.net/lpt19832003/archive/2010/03/03/5342070.aspx 1、学习网站 官方网站 http://www.khronos.org/opengles/ 最经典的Nehe 学习网站 http://nehe.gamedev.net/ 中文的Nehe 学习网站 http://www.owlei...

简单基于OPENGL的三维CAD框架(1)工具类

在vc++中有CDC类,同样也可以开发基于OPENGL的OPenGLDC类,这样可以像调用CDC类一样调用OPenGLDC类 首先给出两个工具类,点类和向量类 typedef struct tagVector3D {double dx;double dy;double dz;} VECTOR3D; class CVector3D : public VECT...

Android平台下OpenGL初步使用

本文只关注于如何一步步实现在Android平台下运用OpenGl。 1、GLSurfaceView GLSurfaceView是Android应用程序中实现OpenGl画图的重要组成部分。GLSurfaceView中封装了一个Surface。而android平台下关于图像的现实,差不多都是由Surface来实现的。 2、Renderer 有了GLSurfa...

[OpenGL]VS2010配置OpenGL开发环境

opengl概述 OpenGL(OpenGraphicsLibrary)是一个跨编程语言、跨平台的专业图形程序接口。OpenGL是SGI公司开发的一套计算机图形处理系统,是图形硬件的软件接口,任何一个OpenGL应用程序无须考虑其运行环境所在平台与操作系统,在任何一个遵循OpenGL标准的环境下都会产生相同的可视效果。OpenGL不是一种编程语言,而是一种...