我正在尝试在 OpenGL 中设置透视投影,使其精确映射到屏幕像素,就像我们在正交投影中所做的那样。我可以针对特定的屏幕尺寸(例如 640x960)执行此操作,但不能针对任何屏幕尺寸执行此操作。下面是我用来将其设置为 640x960 大小的代码
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
Matrix4f perspective( Matrix4f::perspective( 60.0f, ( size.width / size.height ), 0.5f, 1500.f ) );
Matrix4f lookAt( Matrix4f::lookAt( size.width / 2.0f, size.height / 2.0f, size.height / 1.1566f, size.width / 2.0f, size.height / 2.0f, 0.0f, 0.0f, 1.0f, 0.0f ) );
Matrix4f m( ( perspective * lookAt ).translate( -( size.width / 2.0f ), -( size.height / 2.0f ), -( size.height/ 1.1566f ) ) );
glLoadMatrixf( m.get() );
这适用于 640x960 分辨率,但不适用于 1024x768 等任何其他分辨率。在其他分辨率下,它并不完全映射到屏幕像素。
我想设置透视投影,因为我也想提供沿 x 和 y 轴旋转精灵的能力。