PyopenGL - 如何移动相机平截头体以改变标准化设备坐标中的透视图?
PyopenGL - how to move camera frustrum to change perspective in normalized device coordinates?
我想用 Pyopengl 从鸟的角度渲染一些东西。
"bird" 相机应该能够在 X、Y 方向移动并绕 Z 向量旋转。
可以,但我想将 "bird" 放在屏幕底部,因为屏幕顶部应该在移动方向。
不过,这个选项并不令人愉快。我真正想要的是仍然向下看(Z 方向),但有某种偏移。
换句话说,它应该看起来像我裁剪屏幕的下半部分并只使用上半部分。
问题如下图所示:
(原图取自http://www.songho.ca/opengl/gl_projectionmatrix.html)
我怎样才能做到这一点?
终于找到解决办法了。魔术是以下命令:
glViewport (offset_X, offset_Y, screen_X, screen_Y)
其中:
offset_X
- 相机在 X 轴上的偏移量
offset_Y
- 相机在 Y 轴上的偏移
screen_X
- X 轴使用的屏幕分辨率
screen_Y
- Y 轴使用的屏幕分辨率
对于所描述的案例(如果摄像头应放置在距离屏幕底部屏幕高度的 25% 处):
gluPerspective(45, (screen_X / screen_Y), 0.1, 2000.0)
glViewport (0, -int(screen_Y*0.75), screen_X, int(screen_Y*1.75) )
我想用 Pyopengl 从鸟的角度渲染一些东西。
"bird" 相机应该能够在 X、Y 方向移动并绕 Z 向量旋转。
可以,但我想将 "bird" 放在屏幕底部,因为屏幕顶部应该在移动方向。
不过,这个选项并不令人愉快。我真正想要的是仍然向下看(Z 方向),但有某种偏移。
换句话说,它应该看起来像我裁剪屏幕的下半部分并只使用上半部分。
问题如下图所示:
(原图取自http://www.songho.ca/opengl/gl_projectionmatrix.html)
我怎样才能做到这一点?
终于找到解决办法了。魔术是以下命令:
glViewport (offset_X, offset_Y, screen_X, screen_Y)
其中:
offset_X
- 相机在 X 轴上的偏移量offset_Y
- 相机在 Y 轴上的偏移screen_X
- X 轴使用的屏幕分辨率screen_Y
- Y 轴使用的屏幕分辨率
对于所描述的案例(如果摄像头应放置在距离屏幕底部屏幕高度的 25% 处):
gluPerspective(45, (screen_X / screen_Y), 0.1, 2000.0)
glViewport (0, -int(screen_Y*0.75), screen_X, int(screen_Y*1.75) )