Qt目前已经对opengl支持很好了,大致涉及这几个类。见解如下:
数据:
-
QOpenGLBuffer,支持顶点数据(顶点坐标,顶点法向量,纹理坐标,颜色),顶点索引。可StreamDraw,即数据写死,也可DynamicDraw,即通过void write(int offset, const void *data, int count)方法更新。
-
QOpenGLTexture,纹理,常见的Target2D,Target3D,TargetCubeMap等。图像数据传入,过滤,三轴环绕。
-
QOpenGLFramebufferObject,帧缓存对象,比较der
着色器
-
QOpenGLShader,Vertex shader ,Fragment shader,指定着色器类型。
-
QOpenGLShaderProgram,着色器程序,添加着色器,编译,链接,顶点数据传入。
Ui
-
QOpenGLWidget,渲染的目标
Core
-
QOpenGLFunctions,对opengl方法的封装,保护继承即可。
-
QOpenGLContext,opengl上下文,可以理解为任务上下文。
Help
-
QVector3D系列,顶点数据,向量点乘,叉乘,单位化。
-
QMatrix4x4系列,mvp矩阵,平移,缩放,旋转,单位化。
-
math系列,三角函数,弧度角度转换
// mode 矩阵 >> 本地矩阵
// 本地变换
QMatrix4x4 localT; localT.setToIdentity();// 平移
QMatrix4x4 localR; localR.setToIdentity();// 旋转
QMatrix4x4 localS; localS.setToIdentity();// 缩放
// 本地坐标
QMatrix4x4 localMat = localT * localR * localS;
// view 矩阵 >> 全局矩阵
QMatrix4x4 vMat;
vMat.setToIdentity();
vMat.lookAt(QVector3D(0,0,1.0f), QVector3D(0,0,0,), QVector3D(0,1,0));
// pro 投影矩阵
float w = 800.0f;
float h = 600.0f;
QMatrix4x4 pMat;
pMat.setToIdentity();
pMat.perspective(90.0f, w/h, 0.0f, 100.0f);
QMatrix4x4 mvpMat = pMat * vMat * localMat;
// 逆置矩阵
mvpMat.transposed();
// 逆矩阵
bool canInvert = false;
mvpMat.inverted(&canInvert);