QT中的OpenGL之多变形
- QT中的OpenGL
- OpenGL点线绘制
- OpenGL多边形绘制
#include
#include
在QT中使用OpenGL绘制点线也非常简单。在开始绘制点线之前有几个函数是必须实现。
void initializeGL() override;
void resizeGL(int w, int h) override;
void paintGL() override;
上面三个函数都是OpenGL中所需要实现的函数,initialzeGL()函数是初始话OpenGL,什么启动纹理啊、启动深度测试啊、启动影阴啊,都在这里面干的,resizeGL()函数就是设置窗体的,比如窗体大小、比例、投影方式(正投影还是透视投影)。paintGL()函数所有的图形绘制都在这里进行。
好了现在就开始绘制点线了,首先是initializeGL()。
void Borad::initializeGL()
{
glClearColor(0.0, 0.0, 0.0, 0.0);
}
然后是resizeGL()函数。
void Borad::resizeGL(int w, int h)
{
glViewport(0, 0, (GLint)w, (GLint)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-1.5, 1.5, -1.5, 1.5);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
开始绘制函数了paintGL()了。
void Borad::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glColor3f(1.0, 0.0, 0.0);
glBegin(GL_POINTS);
glVertex2f(0.0, 0.0);
glVertex2f(0.1, 0.1);
glVertex2f(0.1, 0.2);
glVertex2f(0.1, 0.3);
glVertex2f(0.1, 0.4);
glColor3f(0.0, 1.0, 0.0);
glBegin(GL_LINES);
glVertex2f(0.0, 0.0);
glVertex2f(0.0, -0.1);
glVertex2f(-0.1, 0.0);
glVertex2f(-0.1, -0.1);
glEnd();
glColor3f(0.0, 0.0, 1.0);
glBegin(GL_LINE_STRIP);
glVertex2f(-0.2, 0.0);
glVertex2f(-0.2, -0.1);
glVertex2f(-0.3, 0.0);
glVertex2f(-0.3, -0.1);
glEnd();
glColor3f(1.0, 0.5, 0.5);
glBegin(GL_LINE_LOOP);
glVertex2f(-0.4, 0.0);
glVertex2f(-0.4, -0.1);
glVertex2f(-0.5, 0.0);
glVertex2f(-0.5, -0.1);
glEnd();
}
在上面的函数中绘制图形都必须在glBegin()中进行绘制完成需要来个glEnd()结束。
在glBegin()函数的中的参数是你想要绘制什么,比如线、点、面。
参数列表如下:
- GL_POINTS 画离散的点
- GL_LINES 画线(每两个点连成一条线)
- GL_LINE_STRIP 画线(所有点相互相连,首尾不相连)
- GL_LINE_LOOP 画线(所有点相互相连,首尾相连)
- GL_POLYGON 填充面(将所有点围成的面进行填充)
- GL_QUADS 填充面(将每四个点围成的面进行填充,相邻点之间不填充)
- GL_QUAD_STRIP 填充面(每两个点构成一条线,每两个线构成一个四边形)
- GL_TRIANGLES 填充三角形(将每三个点围成的三角形进行填充,相邻的点之间不填充)
- GL_TRIANGLE_STRIP 填充三角形(将每三个点围成的三角形进行填充,相邻的点之间填充)
- GL_TRIANGLE_FAN 填充三角形(以第一个点为顶点,之后每两个点合起来围成的三角形进行填充,相邻的点之间填充)
多边形的绘制就是在glBegin()函数中添加参数GL_LINE_LOOP,把你想要绘制的多边形的点全部连接一起,绘制成多边形,当然也可以使用其他的参数来设计你的图形。