Шаблон iPhone OpenGL - это мошенничество?
-
24-10-2019 - |
Вопрос
Шаблон OpenGL от Xcode, кажется, обманывает эту «растянутую» проблему просмотра, которую я пытался понять в течение последних 3 часов.
В шаблоне iPhone "OpenGL ES Application" красочный квадрат, который подрывается вверх и вниз на экране, совсем не является квадратом!
Es1renderer.m (файл ES2 также)
static const GLfloat squareVertices[] = {
-0.5f, -0.33f,
0.5f, -0.33f,
-0.5f, 0.33f,
0.5f, 0.33f,
};
Но он выходит квадрат на устройстве/симуляторе из-за эффекта растяжения/разжигания не-квадратного просмотра. Я попытался исправить это, погрузившись в glfrustumf (), но это, похоже, не меняет соотношение сторон.
Я смог сделать вещи хорошо выглядеть (не растянутые), когда я накормил Glviewport () с высотой 1: 1. Но это не похоже на ответ, потому что он компенсирует размещение видового порта.
Как правильно исправить это растяжение и почему XCode не делает это таким образом?
Решение
Я думаю, что ответ:
Xcode так обманывает, чтобы избежать смущения нас с дополнительным кодом, необходимым для настройки Frustum.
Вот код, который я использую, чтобы настроить его, и он исправил скрести/растяжение, которое я получал:
const GLfloat zNear = 0.0001, zFar = 1000.0, fieldOfView = 45.0;
GLfloat size;
size = zNear * tanf(DEGREES_TO_RADIANS(fieldOfView) / 2.0);
aspectRatio = (GLfloat) backingWidth / backingHeight;
glFrustumf(-size,//left
size,//right
(GLfloat)-size / aspectRatio,//bottom
(GLfloat)size / aspectRatio,//top
zNear,//zNear
zFar);//zFar
glViewport(0, 0, backingWidth, backingHeight);
Надеюсь, это кому -то поможет.