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

OpenGL perspective projection to map the screen pixels

本文关键字:屏幕 像素 映射 透视投影 OpenGL      更新时间:2023-10-16

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

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

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

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

没有什么能阻止你用正交投影来做这件事。

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