Pregunta

La plantilla OpenGL de Xcode parece estar haciendo trampa para resolver este problema de ventana contra la ventana "estirada" que he estado tratando de entender durante las últimas 3 horas.

En la plantilla de "aplicación OpenGL ES" de iPhone, ¡el colorido cuadrado que rebota arriba y abajo en la pantalla no es realmente un cuadrado!

Es1renderer.m (el archivo ES2 también)

static const GLfloat squareVertices[] = {
    -0.5f,  -0.33f,
     0.5f,  -0.33f,
    -0.5f,   0.33f,
     0.5f,   0.33f,
};

Pero sale cuadrado en el dispositivo/simulador debido al efecto de estiramiento/aplastamiento de una ventana gráfica no cuadrada. Traté de arreglarlo jugando con glfrustumf () pero eso no parece cambiar la relación de aspecto.

Pude hacer que las cosas se vean bien (no estiradas) cuando alimenté a GlviewPort () con un 1: 1 Widht: altura ... pero esto no parece la respuesta porque compensa la ubicación de la vista.

¿Cuál es la forma correcta de corregir este estiramiento y por qué Xcode no lo hace de esa manera?

¿Fue útil?

Solución

Creo que la respuesta es:

Xcode está haciendo trampa de esta manera para evitar confundirnos con el código adicional requerido para configurar un frustum.

Aquí está el código que estoy usando para establecer uno, y solucionó el aplastamiento/estiramiento que estaba recibiendo:

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

Espero que eso ayude a alguien.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top