iPhone OpenGL Шаблон обманывает?

OpenGL шаблон XCode, кажется, обманывает, чтобы решить эту "растянутую" проблему области просмотра, которую я пытался понять в течение последних 3 часов.

В шаблоне iphone "Приложение OpenGL ES" цветной квадрат, который прыгает вверх и вниз по экрану, на самом деле вовсе не квадрат!

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 widht:height. Но это не похоже на ответ, потому что это смещает расположение области просмотра.

Какой правильный способ исправить это растяжение и почему XCode не делает это таким образом?

1 ответ

Решение

Я думаю, что ответ:

XCode обманывает так, чтобы не путать нас с дополнительным кодом, необходимым для настройки усеченного конуса.

Вот код, который я использую для его установки, и он исправил полученное мной сжатие / растяжение:

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); 

Надеюсь, что это помогает кому-то.

Другие вопросы по тегам