0

我正在尝试在 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 轴旋转精灵的能力。

4

2 回答 2

2

我正在尝试在 OpenGL 中设置透视投影,使其精确映射到屏幕像素

就其本质而言,这种映射只适用于一个特定的深度。对于所有其他人,它根本无法将视图 X,Y 映射到视口 X,Y

我想设置透视投影,因为我也想提供沿 x 和 y 轴旋转精灵的能力。

没有什么能阻止您使用正射投影来做到这一点。

于 2013-07-23T09:12:27.420 回答
1

似乎问题出在乘法顺序上。上面的代码现在可以在任何分辨率下正常工作。

于 2013-07-24T05:09:58.970 回答