2010-09-25 4 views
2

J'essaie d'apprendre des trucs opengl sur Android. Dans l'appel gl.gltranslatef (x, y, z), je déplace ma texture de quelques unités dans la direction + ve x. Mais je suis incapable de trouver le nombre de pixels auquel une unité de x appartient?Dans opengl, Comment puis-je obtenir une relation entre les pixels et gl.gltranslatef (floatx, y, z)?

Voici ce que je fais: J'appelle gl.glviewport (0,0, largeur, hauteur); // Ceci placera mon rectangle avec 0,0 comme angle inférieur gauche, puis l'étendra pour accommoder la largeur et la hauteur.

Alors j'appelle à gl.glfrustrum (-5,5, -7,7,3,7); // Je ne comprends pas très bien comment cet appel utilise les dimensions que j'ai définies dans gl.glviewport.

Comment -5 à 5 unités de gauche à droite dans l'appel ci-dessus, traduire en pixels sur l'écran d'Android?

Je veux dire si width = 320 height = 533 et pixels, alors ce sera le nombre de pixels occupés à l'écran en raison de l'appel gl.glfrustrum? J'expérimente l'appel gl.gltranslatef en spécifiant xshift comme 5.0, mais il ne traduit pas le bitmap dans le coin droit ou gauche de l'écran, quand je l'augmente à 6, une partie est toujours visible l'écran.

Merci Siddhesh

En bref, je cherche le nombre maximum d'unités (en termes de X) qui représentera les coins extrêmes de l'écran de mon téléphone Android.

Répondre

2

glViewpoint indique quel rectangle (en pixels) votre sortie OpenGL doit être affiché dans.

glFrustum dit quoi les coordonnées dans vos unités de « monde » devraient être mis en correspondance avec cette fenêtre.

Un point important: votre appel glFrustum comprend non seulement une hauteur et une largeur, mais également une profondeur. Puisque vous spécifiez un Frustum, pas un cube, cela signifie que tout ce qui a une coordonnée Z n'importe où mais que le front de votre tronc est réduit de façon appropriée pour sa distance par rapport au spectateur. En tant que tel, lorsque vous à glTranslatef, la distance par laquelle un objet particulier se déplacera (en termes de pixels) dépendra de sa distance de l'observateur. Plus le téléspectateur est éloigné, moins il y aura de pixels vers un côté ou vers le haut ou vers le bas. En fonction de ce que vous faites, un moyen facile d'y remédier serait d'utiliser glOrtho au lieu de glFrustum. glOrtho donne le mode orthographique, ce qui signifie qu'aucune mise à l'échelle de la perspective n'est effectuée, donc une distance donnée de X ou Y se traduira par le même nombre de pixels, quelle que soit la distance par rapport au spectateur.

+0

Merci beaucoup Jerry ... Je – Siddhesh

+0

utilisé glortho appel et tout a fonctionné comme prévu i.e. l'échelle de x transition vers les unités spécifiées dans l'appel gl.glortho. – Siddhesh