2010-12-11 33 views
2

Imaginez votre à 0,1,0 ou même un cube est. Vous faites ensuite pivoter 45% (glRotatef), puis vous déplacez cet objet vers l'avant (glTranslate 0,0,10) de sorte que vous déplacez cet objet 10 vers l'avant.OpenGl: Trouver votre position actuelle

Comment obtenez-vous alors cette position d'objets?

Répondre

3

Vous pouvez combiner les transformations en une seule matrice, puis l'appliquer à n'importe quel point pour vous donner sa position dans le monde. Vous pouvez le faire en interrogeant la matrice actuelle (après avoir appliqué toutes vos rotations, traductions et mises à l'échelle) et en utilisant ceci pour appliquer des transformations à des points arbitraires.

Notez qu'en utilisant glRotatef et glTranslatef`, vous utilisez le mode immédiat et les anciennes API. L'utilisation moderne d'OpenGL vous permet de créer des matrices et de les envoyer aux shaders pour appliquer les transformations de l'objet aux coordonnées du monde. De cette façon, vous auriez déjà la matrice pour les transformations d'objet-à-monde.

+0

Ne supposez pas que vous connaissez les commandes, j'utilise openGL ES 1.1 – Burf2000

+1

Vous pouvez utiliser: 'float modelViewMatrix [16]; glGetFloatv (GL_MODELVIEW_MATRIX, modelViewMatrix); 'interroger la transformation en cours. Vous pouvez ensuite appliquer cette matrice à n'importe quel point de l'espace objet pour obtenir les coordonnées du monde. – gavinb

+0

Si vous pouviez m'aider avec l'étape suivante. comment puis-je l'appliquer? – Burf2000

3

Il semblerait que vous souhaitiez utiliser la fonction gluProject de la bibliothèque GLu (fournie avec OpenGL).

+0

Mon projet l'a mais je ne sais pas pourquoi j'en ai besoin – Burf2000

+1

Il pourrait faire un peu de travail pour vous. En fait, vous n'avez pas vraiment * besoin * de l'utiliser - il serait certainement suffisant dans votre cas spécifique d'appeler 'glGetDoublev' avec' GL_MODELVIEW_MATRIX' comme argument et de multiplier votre position par cette matrice. – Kos

+0

Comment est-ce que je fais réellement que j'ai eu la matrice et l'ai regardée mais comment puis-je la multiplier par ma position? – Burf2000