OpenGL+Qt界面(三) Qt中实现OPENGL的基本交互+代码

本文介绍了在Qt环境下利用OpenGL创建3D界面,并实现基本交互功能,如物体移动和坐标轴展示。通过修改shader文件、设置uniform变量以及新增shaderProgram,实现了界面的交互性。详细步骤包括鼠标交互函数的添加、shader文件的更新以及uniform变量的设置。文章提供相关代码示例和工程文件下载链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发环境

vs2015+Qt5

实现结果

依赖于Qt的的一个界面,能够进行一定的交互和显示坐标轴
这里写图片描述

实现步骤

实现物体的移动
- 重新定义鼠标交互函数
- 修改shader文件,增加uniform变量
- 设置uniform变量
* 增加坐标轴*
- 新增shader
- 新增shaderProgram
- 设置unifom

具体实现与代码

1 增加交互函数

scenewindow.hpp

//新增函数
protected:
    void mouseMoveEvent(QMouseEvent *event);
    void wheelEvent(QWheelEvent *event);
    void mousePressEvent(QMouseEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);
//新增交互变量
private:
    QCursor cursor; // 管理光标形状
    QVector3D cameraPos = QVector3D(0.0f, 0.0f, 3.0f);    //相机位置
    QVector3D worldCentrol = QVector3D(0.0f, 0.0f, 0.0f); //世界坐标原点,相机朝向
    QVector3D cameraUp = QVector3D(0.0f, 1.0f, 0.0f);     //相机的顶部朝向y轴
    QVector3D transVec = QVector3D(0.0f, 0.0f, 0.0f);     //局部坐标在世界坐标中的平移量(构建ModelMatrix,进行“局部空间”到“世界空间”的转换)

    GLfloat yaw = 0.0f;       //偏航角  
    GLfloat pitch = 0.0f;     //俯仰角  
    GLfloat lastX = 0;        //光标上次x值  
    GLfloat lastY = 0;        //光标上次y值  

scenewindow.cpp
在构造函数中新增

cursor.setShape(Qt::ArrowCursor);
setCursor(cursor);

增加交互函数

void SceneWindow::mouseMoveEvent(QMouseEvent *event)
{
    //鼠标左键用来实现对物体的旋转功能  
    if (event->buttons() == Qt::LeftButton)
    {
        //设置光标形状  
        cursor.setShape(Qt::ClosedHandCursor);
        setCursor(cursor);
        
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值