旋转glViewport?

时间:2009-02-23 13:33:48

标签: python math opengl

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

我们的想法是将渲染视口剪切到用户的方向。 由于glViewport不能用于此,是否有另一种方法可以实现呢?

(glViewport使用(x,y,宽度,高度),我想(x,y,宽度,高度,从中心旋转?))

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

在OpenGL中无法使用旋转视口,您必须手动处理它。我看到了以下可能的解决方案:

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

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