开发环境
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);