QT6.5+OpenGL绘制坐标轴,网格,纹理绘制2d文字,3d文字

通过这篇介绍,希望可以帮到大家更好的绘制3d图形 

QT6与OpenGL的结合

1. Qt 6提供了许多增强型模块,如Qt Quick 3D和Qt 3D,这些模块可以直接与OpenGL进行交互,使得在Qt 6中使用OpenGL进行图形渲染变得更加高效和便捷。

2. 要在Qt 6中使用OpenGL,首先需要在项目中包含相应的OpenGL库。 

pro文件加入:QT += charts opengl
win32: LIBS += -lOpenGL32
win32: LIBS += -lGLU32
unix: LIBS += -lglut -lGLU

 3. 在Qt 6中,可以通过多种方式对OpenGL渲染性能进行优化

4. 利用OpenGL的纹理管理,减少CPU到GPU的数据传输

5. 在Qt 6中,可以通过多种方式对OpenGL渲染性能进行优化

6. 操作简单

在QOpenGLWidget组件上渲染opengl:继承QOpenGLWidget和QOpenGLFunctions_4_5_Core
实现三个虚函数:initializeGL、resizeGL、paintGL

函数介绍 

glViewport: 重置当前的视口
glMatrixMode  选择投影矩阵
gluPerspective 建立透视投影矩阵,基于窗口宽度和高度
glTranslatef  平移
glRotatef 旋转
glPushMatrix 设置新的状态
gluProject 坐标转换;比如将三维坐标投影到屏幕,或者鼠标坐标转换为世界坐标等

 参考:https://learn.microsoft.com/zh-cn/windows/win32/opengl/glrecti

绘图介绍

  1. 绘制坐标系和网格
glPushMatrix();
    {
        glLineWidth(1.5);
        //沿x,y,z轴方向的平移, 平移到原点
        glTranslatef(m_translate.x, m_translate.y, m_translate.z);
        glBegin(GL_LINES); //绘制坐标轴
        {
            glEnable(GL_LINE_SMOOTH);
            //从原点绘制三条线
            glColor3f(1, 0, 0); glVertex3f(0, 0, 0); glVertex3f(m_Size.x, 0, 0); //X
            glColor3f(0, 1, 0); glVertex3f(0, 0, 0); glVertex3f(0, m_Size.y, 0); //Y
            glColor3f(0, 0, 1); glVertex3f(0, 0, 0); glVertex3f(0, 0, m_Size.z); //Z
        }
        glEnd();
        //绘制网格
        glColor3f(1, 1, 1);
        glLineWidth(1.0f);
        //绘制xy平面的网格, m_xyGridNum网格的横竖的数量
        paintXYGrid(m_xyGridNum[0], m_xyGridNum[1]);
        //绘制yz平面的网格, m_yzGridNum网格的横竖的数量
        paintYZGrid(m_yzGridNum[0], m_yzGridNum[1]);
    }
    glPopMatrix();


paintXYGrid:函数
    //计算分割成vNum数量,每一个网格的距离
    float xSpacing = m_Size.x / vNum;
    float ySpacing = m_Size.y / hNum;
    glBegin(GL_LINES);
    glEnable(GL_LINE_SMOOTH);
    for(int i = 1; i <= hNum; ++i)
    {
        float y = ySpacing * i;
        //绘制线
        glVertex3f(0, y, 0);
        glVertex3f(m_Size.x, y, 0);
    }
    for(int i = 1; i <= vNum; ++i)
    {
        float x = xSpacing * i;
        glVertex3f(x, 0, 0);
        glVertex3f(x, m_Size.y, 0);
    }
    glEnd();
paintYZGrid:函数
    float zSpacing = m_Size.z / vNum;
    float ySpacing = m_Size.y / hNum;
    glBegin(GL_LINES);
    glEnable(GL_LINE_SMOOTH);
    for(int i = 1; i <= hNum; ++i)
    {
        float y = ySpacing * i;

        glVertex3f(0, y, 0);
        glVertex3f(0, y, m_Size.z);
    }
    for(int i &#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值