Bonjours à tous
Je travail actuellement sur un projet dans lequel j'ai besoin d'afficher sur une fenêtre (en 2D donc) l'emplacement de certains objets se trouvant dans un espace 3D. J'ai donc fait des recherches là dessus et je me suis aperçu que pas mal de fonction existaient déjà pour convertir de la 3D en 2D. Cependant voilà, je n'arrive pas à utiliser ces fonctions :S Après une petite semaine d'essaie avec ce procédé j'ai essayé de me faire ma propre fonction mais au regret de constater qu'elle ne fonctionne pas... (j'obtiens un léger décalage avec la position réel de l'objet dans l'espace 3D :/).
Je viens donc vous voir à ce sujet: Quelqu'un pourraient il m'expliquer comment utiliser cette fonction WorldToScreen?
La fonction qui reviens le plus souvent est la suivante. Maintenant si vous en utilisez une autre et êtes près à me l'expliquer, je prend tous ^^
Après un moi je ne vois plus d'autres solutions que de demander de l'aide ^^'
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 bool cD3D::WorldToScreen(Vector from, Vector2D &to) { float w = 0.0f; to.x = m_vMatrix[0][0] * from[0] + m_vMatrix[0][1] * from[1] + m_vMatrix[0][2] * from[2] + m_vMatrix[0][3]; to.y = m_vMatrix[1][0] * from[0] + m_vMatrix[1][1] * from[1] + m_vMatrix[1][2] * from[2] + m_vMatrix[1][3]; w = m_vMatrix[3][0] * from[0] + m_vMatrix[3][1] * from[1] + m_vMatrix[3][2] * from[2] + m_vMatrix[3][3]; if(w < 0.01f) return false; float invw = 1.0f / w; to.x *= invw; to.y *= invw; int width = (int)(m_Rect.right - m_Rect.left); int height = (int)(m_Rect.bottom - m_Rect.top); float x = width / 2; float y = height / 2; x += 0.5 * to.x * width + 0.5; y -= 0.5 * to.y * height + 0.5; to.x = x + m_Rect.left; to.y = y + m_Rect.top; return true; }
En vous remerciant d'avance![]()
Partager