Я пытаюсь настроить перспективную проекцию в OpenGL так, чтобы она отображалась точно на пиксели экрана, как мы можем это сделать в ортографических проекциях. Я могу сделать это для конкретных размеров экрана, например 640×960, но не могу сделать это для любого размера экрана. Ниже приведен код, который я использовал для настройки размера 640×960.
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() );
Это работает для разрешения 640×960, но не работает для любых других, таких как 1024×768. В других разрешениях он не точно отображает пиксели экрана.
Я хочу настроить перспективную проекцию, потому что я хочу предоставить возможность вращать спрайты также по осям X и Y.
Я пытаюсь настроить перспективную проекцию в OpenGL так, чтобы она отображалась точно на пиксели экрана
По своей природе этот вид картографирования будет сохраняться только для одной определенной глубины. Для всех остальных это просто не может отобразить вид X, Y на окно просмотра X, Y
Я хочу настроить перспективную проекцию, потому что Я хочу предоставить возможность вращать спрайты по осям X и Y.
Ничто не мешает вам делать это с помощью ортопедической проекции.
Похоже, проблема была с порядком умножения. Приведенный выше код теперь отлично работает с любым разрешением.