目录
函数解析
相机视角变换需要与鼠标键盘进行交互,需要重写鼠标和键盘响应函数。

初始化

timerEvent(QTimerEvent *event)函数:设置移动速度和对应按键移动方向,以及摄像机的摆放位置

glm::LookAt函数需要一个位置、目标和上向量。知道相机上方向和前方向,可以通过矩阵叉乘得到右方向,从而建立相机坐标系(右手坐标系)。位置是相机坐标系在整个世界坐标系下的位置。
enterEvent(QEvent *event)函数:

鼠标只要经过窗口就会被置于中心,不隐藏指针就是下面的效果。
mouseMoveEvent(QMouseEvent *event)函数:

wheelEvent(QWheelEvent *event)函数:实现缩放效果。当视野变小时,场景投影出来的空间就会减小,产生放大了的感觉。
keyPressEvent(QKeyEvent *event)、keyReleaseEvent(QKeyEvent *event)函数:键盘响应

initializeGL()函数:与上一篇没有区别,因为这里只需要改变摄像机的视角,而不需改变物体。

resizeGL(int w, int h)函数:
paintGL()函数:

具体代码
#ifndef OPENGLWIDGET_H
#define OPENGLWIDGET_H
#include <QOpenGLWidget>
#include <QOpenGLShaderProgram>
#include <QOpenGLBuffer>
#include <QOpenGLVertexArrayObject>
#include <QOpenGLTexture>
#include <QElapsedTimer>
QT_B

本文是OpenGL入门系列的第四步,主要讲解如何实现摄像机视角的变换和交互功能。通过重写鼠标和键盘响应函数,实现相机的移动、旋转和缩放。初始化设置中,利用glm::LookAt函数建立相机坐标系。mouseMoveEvent函数处理鼠标移动,wheelEvent处理滚轮缩放,keyPressEvent和keyReleaseEvent处理键盘输入,改变相机移动方向。整个过程结合QT框架,提供了一种在OpenGL中控制视角的有效方式。
最低0.47元/天 解锁文章
1080

被折叠的 条评论
为什么被折叠?



