【问题标题】:OpenGL screen-space translation of perspective camera view透视相机视图的OpenGL屏幕空间转换
【发布时间】:2016-04-06 21:13:29
【问题描述】:

我正在使用 OpenGL 中的透视投影相机,并沿gluLookAt() 的行采用眼睛向上方法

我想将整个 3d 视图移动到 2d 窗口中的不同位置,如下图所示:

我知道这可以通过 glViewport() 完成,但我最终希望能够旋转 3d 视图以及翻译它,我知道这不适用于 glViewport 方法。

我也明白,采用非 glViewport 方法将需要额外的模板步骤。我将把这一步留到以后。

现在,我希望简单地转换如上图所示的 3d 视图(忽略模板问题)。

似乎平移投影矩阵是正确的方法,但是平移范围不是我所期望的。也许我需要缩放我正在使用的参数?无论如何,我希望有人可以解释如何(或多或少)模拟可平移/可旋转的 glViewport 以获得 3d 透视图。

谢谢!

【问题讨论】:

  • 听起来glViewport() 是你想要的。我不知道轮换是如何与glViewport() 相关联的,我不明白你为什么认为它不起作用。
  • 渲染到图像,然后将 那个 渲染到屏幕上,应用适当的变换矩阵。见stackoverflow.com/questions/577639/rotating-a-glviewport
  • 我正在尝试在 2D GUI 小部件内绘制 3D 透视图。在图中,我展示了正在翻译的 2D 小部件(在屏幕空间中)。 3D 视图应与 2D 小部件一起平移。如果 2D 小部件在 z 轴上旋转了 90def,则 3D 视图也应该旋转。你会如何使用 glViewport() 来做到这一点
  • 我希望避免渲染到图像。如果 2D 小部件改变大小,我将不得不多次重新生成 FBO。
  • 您认为调整窗口大小时会发生什么?默认帧缓冲区已调整大小,其先前的内容无效。与直接绘制到窗口相比,您更有可能从绘制到 FBO、blitting 或拉伸纹理四边形中受益。

标签: opengl graphics 3d linear-algebra


【解决方案1】:

您使用glViewport()。对于每个视口,您可以设置视口、设置模型视图矩阵并绘制场景。

对于第一个视口

glViewport (0, 0, window_width/2, window_height/2);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();

//do something with projection matrix

drawScene();

第二个视口

glViewport (window_width/2, 0, window_width/2, window_height/2);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();

//do something different with projection matrix

drawScene();

【讨论】:

  • 这种方法是否允许旋转视口,如问题 cmets 中所述?
  • 视口不会旋转。渲染到此视口的内容(场景)将被旋转。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-27
相关资源
最近更新 更多