Настройки разрешения OpenGL, необъяснимое поведение экрана - PullRequest
0 голосов
/ 21 марта 2012

Так что я пытался заставить настройку разрешения работать в моей игре некоторое время, но безрезультатно.У меня есть соотношение 16: 9, которое я пытаюсь сохранить постоянным.Я использую SDL с openGL.И вот мой изменяющийся класс разрешения:

#ifndef _RESOLUTION_CPP_
#define _RESOLUTION_CPP_

#include "Main.h"

class Resolution{

public:

static void ChangeResolution(SDL_Surface* Screen,int Width,int Height, bool FullScreen){
    int Full = 0;
    if(FullScreen){
       Full = SDL_FULLSCREEN;
    }
Screen = SDL_SetVideoMode(Width , Height, 32, SDL_HWSURFACE | SDL_GL_DOUBLEBUFFER | SDL_OPENGL| Full);

glClearColor(0, 0, 0, 0);
glClearDepth(1.0f);

glViewport(0, 0, Width, Height);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

//glOrtho(0, Width, Height, 0, 1, -1);
glOrtho(0, 960,540, 0, 1, -1);

glMatrixMode(GL_MODELVIEW);

glEnable(GL_TEXTURE_2D);

glLoadIdentity();
}

};

#endif

Сначала я настроил масштабирование glOrtho вместе с размером окна и портом просмотра, но это заставило меня видеть больше экрана по мере увеличения размера окна,что было не то, что я хотел.Таким образом, установив камеру (glOrtho похожа на камеру, верно?) При постоянной ширине и высоте я всегда мог видеть одну и ту же часть экрана.Пока все хорошо.

Теперь, пробуя игру в оконном режиме, все работает точно так, как должно.Графика игры масштабируется с сохранением соотношения сторон, и я всегда вижу одну и ту же часть экрана.

Теперь пробую полноэкранный режим на мониторе 5: 4, вот что я получаю:

enter image description here

Слева: 960x540 --- Посередине: 1024x576 --- Справа: 1200x675

Как видите, только тот, что посередине, работает как надо, он растянут дозаполнить экран, но не растягивать, чтобы разрушить соотношение сторон.Тот, что слева, сохраняет соотношение сторон, но недостаточно масштабируется.

Тот, что справа растягивается вертикально, а пропорции нарушаются.Это почему?Почему он так растягивается?

Кроме того, как бы я отцентрировал экран так, чтобы на среднем мониторе было черное пространство сверху и снизу, а не только одно большое сверху??

Дополнительная информация:

Когда я пробую это на ноутбуке 16:10, я получаю аналогичные результаты, когда экран недостаточно масштабирован или не центрирован, ноэто никогда не растягивалось.Даже установив его на огромное разрешение 1920,1080.Он точно масштабируется больше, чем экран, так что я вижу только небольшую часть, но я предполагаю, что вы не сможете реально сжать 1920x1080 при гораздо меньшем разрешении.

Итак, мой вопрос на самом деле: почему разрешение проблемы совершенно непредсказуемо?Иногда он растягивается, иногда недостаточно масштабируется и т. Д., И как мне это исправить?

1 Ответ

0 голосов
/ 07 января 2013
glOrtho(0, 960,540, 0, 1, -1);

Параметры могут иметь кратную (GLfloat) ширину / (GLfloat) высоту, так что соотношение будет согласовываться с окном просмотра

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...