2010-06-07 8 views
1

Le modèle OpenGL de XCode semble tricher pour résoudre ce problème de fenêtre d'affichage "étiré" que j'ai essayé de comprendre depuis 3 heures. Dans le modèle iphone "OpenGL ES Application", le carré coloré qui rebondit sur l'écran n'est pas vraiment un carré!iPhone OpenGL Template triche?

ES1Renderer.m (le fichier ES2 ainsi)

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

Mais il vient à la recherche place sur l'appareil/simulateur en raison de l'effet d'étirement/écrasement d'une fenêtre non carrée. J'ai essayé de le résoudre en jouant avec glFrustumf() mais cela ne semble pas changer le rapport d'aspect.

J'ai réussi à obtenir des choses bien (non étirées) quand j'ai alimenté glViewport() avec un widht: height de 1: 1. Mais cela ne semble pas être la réponse car cela compense le placement de la fenêtre.

Quelle est la bonne façon de corriger cet étirement et pourquoi XCode ne le fait pas de cette façon?

Répondre

3

Je pense que la réponse est:

XCode triche comme ceci pour éviter de nous confondre avec le code supplémentaire nécessaire pour installer un tronc de cône.

Voici le code que je utilise pour créer un, et il a fixé le squashing/stretching je recevais:

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

espoir qui aide quelqu'un.