复现moho-打卡第1天 - 20240402
1.1--QOpenGLWidget中显示长方形
实现方法:顶点着色器中给定长方形的四个顶点数据,代码如下:
// 顶点位置
GLfloat vertics[1][4][3] = {
{{mousePressPosX,mousePressPosY,0.0},{mousePressPosX,mouseMovePosY,0.0},{mouseMovePosX,mouseMovePosY,0.0},{mouseMovePosX,mousePressPosY,0.0}},
};
1.2--实时绘制长方形
实现方法:通过QMouseEvent事件中的mouseMoveEvent实时更新长方形的四个顶点数据,代码如下:
void YOpenGLWidget::mouseMoveEvent(QMouseEvent *event)
{
update();
mouseMovePosX = event->x();mouseMovePosY = event->y();
QOpenGLWidget::mouseMoveEvent(event);
}
1.3--长方形贴图
实现方法:通过QOpenGLTexture设置图片,并绑定至长方形上,代码如下:
// 绘制形状
for(int i = 0; i<2; i++)
{
texture[i]->bind();
glDrawArrays(GL_TRIANGLE_FAN,i*4,4);
}
综上,绘制效果如下:
Q1--QOpenGLWidget的QMouseEvent的event->pos()为平面坐标,不是openGL中的空间坐标,导致绘制的长方形与鼠标实际勾画的长方形不一致,如何解决?
① 是否与平面坐标和空间坐标的映射有关?
② 是否与相机空间、透视关系有关?
今日分析得到该问题解决要点:
① 从绘制定义上,顶点逆时针绘制为正面;
② 相机原始方向为朝向z轴负方向;
③ OpenGL采用右手坐标系;
④ QWidget中x轴正向朝右,y轴正向朝下;
⑤ 空间点转换至相机空间需要进行2步变换:1)平移负的相机位移;2)旋转负的相机欧拉角;
待解决:
① 平面坐标转换至空间坐标。