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

Шаблон 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 этого не делает?


person user360092    schedule 07.06.2010    source источник


Ответы (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); 

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

person user360092    schedule 08.06.2010