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) )