OpenGL学习笔记四(多边形)

QT中的OpenGL之多变形

  • QT中的OpenGL
  • OpenGL点线绘制
  • OpenGL多边形绘制
在QT中的OpenGL模块中,使用OpenGL是比较简单的,只需要在你创建的项目中添加 QOpenGLWidget 和QOpenGLFunctions就可以使用OpenGL基本上所有的功能。
#include <QOpenGLWidget>
#include <QOpenGLFunctions>

在QT中使用OpenGL绘制点线也非常简单。在开始绘制点线之前有几个函数是必须实现。

    void initializeGL() override; //此处开始对OpenGL进行所有设置
    void resizeGL(int w, int h) override; //重置OpenGL窗口的大小
    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,把你想要绘制的多边形的点全部连接一起,绘制成多边形,当然也可以使用其他的参数来设计你的图形。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值