【问题标题】:Rotating a glViewport?旋转 glViewport?
【发布时间】:2009-02-27 15:20:43
【问题描述】:

在“多点触控”环境中,显示在表面上的任何应用程序都可以根据用户的方向旋转/缩放。实际的解决方案是在 FBO 上绘制应用程序,并在其上绘制一个带有纹理的旋转/缩放矩形。我觉得对性能不好,而且所有显卡都不提供FBO。

这个想法是在用户的方向上剪辑渲染视口。 由于 glViewport 不能用于此,是否存在另一种实现方式?

(glViewport 使用(x, y, width, height),我想要(x, y, width, height, 从中心旋转?))

PS:旋转模型视图或投影矩阵无济于事,我想“旋转由 glViewport 生成的裁剪计划”。 (只是所有场景的一部分)。

【问题讨论】:

  • 如果你旋转 45 度,你会在你的矩形视口中得到一个菱形的场景?
  • 是的,我不想要这个 :) 我想旋转矩形视口(用于剪辑)

标签: python math opengl


【解决方案1】:

在 OpenGL 中没有办法让视口旋转,您必须手动处理它。我看到以下可能的解决方案:

  • 继续使用纹理,也许使用 glCopyTexSubImage 而不是 FBO,因为这是基本的 OpenGL 功能。如果您的目标平台是硬件加速的,那么性能应该没问题,具体取决于您桌面上需要的视口数量,因为这是当今非常常见的用例。

  • 如果没有纹理,您可以将 glViewport 设置为旋转视口 (rB) 的屏幕对齐边界矩形 (rA)(同时设置适当的剪刀测试区域)。然后绘制一个遮蔽区域,可能仅在深度或模板缓冲区中填充(rA - rB)区域,这将阻止进一步绘制这些像素。然后正常绘制您的应用程序,使用 glRotate 调整您的投影矩阵,以便根据 rB 正确定位渲染。

【讨论】:

  • 使用模板缓冲区是个好主意。裁剪平面可以做同样的事情吗?
  • 你当然可以使用 4 个裁剪平面来做这件事,我没有提到它们,因为在某些 OpenGL 平台上似乎对用户裁剪平面的支持不是很好。在较旧的硬件上,它们有限制,我不知道您是否可以使用 4 个夹层,也许......
【解决方案2】:

如果您已经设置了渲染场景的代码,请尝试在视图模型矩阵设置中添加glRotate() 调用,以在渲染场景之前“旋转相机”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-13
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多