Вопрос

Шаблон 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); 

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top