OpenGL parallel projection graphics do not scale with the window
QtOpenGL
平行投影窗口缩放导致图形变形...
OpenGL parallel projection graphics do not scale with the window
实现步骤
- 重写窗口的
resize
事件- 计算投影的范围
- 更新投影矩阵
drawcull
resizeGL
- 我们最初计算一个比例:
- 关于窗口的
size
和投影的范围的- 使用
left, right
计算一个spanx(right - left)
,top, bottom
计算spany(top - bottom)
, 分别与窗口的宽高比较1
2
3
4auto ratioW = w / spanx;
auto ratioH = h / spany;
// 取最小的一个
auto ratio = std::min(ratioW,ratioH);
- 使用
- 每次窗口缩放,我们就使用上述的范围计算新的
left,right,bottom,top
- 只要投影的范围没有发生改变我们便不计算新的
ratio
- 只要投影的范围没有发生改变我们便不计算新的
- 关于窗口的
- 计算新的
left,right,bottom,top
1
2
3
4
5
6
7
8
9void OpenGLWidget::resizeGL(int w, int h)
{
glViewport(0,0,w,h);
left = - w / ratio;
right = abs(left);
bottom = -h / ratio;
top = abs(bottom);
}
更新投影矩阵
- update
- 关于
zNear & zFar
投影当二维平面时候,并未使用这两个参数1
projMat.ortho(left,right,bottom,top,0.1f,100.0f);
- 关于
更新绘制的场景
1 |
|