OpenGL透视投影来映射屏幕像素

时间:2013-07-23 09:01:52

标签: c++ opengl projection perspective

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

2 个答案:

答案 0 :(得分:2)

  

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

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

  

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

没有什么可以阻止你用正射投影做到这一点。

答案 1 :(得分:0)

似乎问题在于乘法顺序。以上代码现在适用于任何分辨率。