2011-04-10 15 views
1

Im utilisant OpenGL avec C++ pour créer une partie. et maintenant, je me demande comment je pourrais transformer des coordonnées 3D en positions 2D par exemple: dessiner une barre de santé 2D sur la tête d'un modèle 3D, ou quelque chose du genre. donc de toute façon, je me demande comment je serais en mesure de mettre en place là où il peut être utilisé dans SFML. en ce moment je cherche quelques informations, mais je ne comprends pas complètement les méthodes ...Conversion de coordonnées 3D en coordonnées 2D

Fondamentalement, im demander comment pourrais-je faire les coordonnées 3D opengl convertir en coordonnées 2D sur l'écran à l'aide SFML

im aussi se demander comment je convertirait les coordonnées 2D en 3D, juste pour que je le sache aussi.

également quelques exemples de code serait bien, juste pour que j'obtenir une meilleure image

merci pour la lecture

-Molma

+0

merci pour les réponses rapides les gars: D ima les regarde et étudie ces derniers. merci encore – Molmasepic

Répondre

2

Puisque vous utilisez OpenGL, je vous suggère gluProject pour la cartographie de la 3D à la 2D et gluUnProject pour le mappage de la 2D à la 3D (remarquez le commentaire de ChrisF sur le non-projet).
Bien que je dois avouer, je n'ai pas vraiment d'expérience avec OpenGL, je connais juste la terminologie de ce que vous vouliez et vous l'avez googlé. :)

+1

Rappelez-vous cependant que "décomposer" un point 2D en espace 3D vous donnera une ligne. Ce sera à partir de l'œil, à travers le point et sur le plan de détourage arrière. – ChrisF

+0

@ChrisF: Vous avez raison, je vais faire allusion à votre commentaire. – Xeo

1

This short text explique les bases de la projection 2D des coordonnées 3D. L'inverse est un peu plus difficile car vous n'avez que deux valeurs connues (les coordonnées 2D) et cela ne suffit pas à extraire les trois coordonnées. Le mieux que vous pouvez obtenir est une ligne (commençant par le spectateur, passant par le point sur l'écran et s'étendant à l'infini.) Le point 3D peut être n'importe où derrière le point sur l'écran. la caméra ou une partie de la position de la chose dont vous connaissez les coordonnées 2D, vous pouvez déterminer les coordonnées 3.

1

L'approche habituelle pour dessiner des barres de santé et similaires transforme un certain volume de délimitation (bounding box, bounding . sphère, etc.) ou un point d'ancrage dans l'espace de l'écran Ceci est assez facile, car il suffit de suivre le pipeline de transformation OpenGL:

clip_position = Projection_Matrix * Modelview_Matrix * vertex_position 
viewport_position.{x,y} = viewport.{x,y} + viewport.{width,height} * (0.5 + clip_position.{x,y}/2) 

2D à la 3D est impossible sans fournir informations supplémentaires.

1

Vous devez simplement faire la même transformation que celle faite par openGL aux coordonnées. Ceci implique typiquement les étapes suivantes:

  1. multipliez-le par la matrice de traduction (c'est-à-dire la matrice de caméra). Cela place votre coordonnée 3d dans un système de coordonnées orienté écran

  2. multipliez-la par la matrice de projection. Ce projettera les coordonnées sur l'écran

On peut supposer que vous avez ces matrices, puisque vous devez les charger dans openGL, mais vous pouvez aussi les demander.

Questions connexes