2009-11-09 5 views
1

Je cherche à afficher une image du soleil dans mon 3d monde (directx 9).3D alternative pour D3DXSPRITE pour billboard

Création d'un D3DXSPRITE est grande dans certains cas, mais il est seulement un objet 2d et ne peut pas exister dans mon « monde » comme 3d objet. Qu'est-ce qu'une méthode alternative pour le billboarding, similaire à ? Comment puis-je l'implémenter?

La seule alternative Je trouve actuellement est ce lien: http://www.two-kings.de/tutorials/dxgraphics/dxgraphics17.html qui ne semble pas fonctionner

Répondre

2

Prendre le centre de votre vCenter objet. L'objet a une largeur et une hauteur de (w, h).

D'abord, vous avez besoin de votre caméra pour le vecteur d'affichage. Ceci est calculé comme vCamToCen = normalize (vCamera - vCenter).

Vous avez alors besoin d'un vecteur d'approximation approprié. Cela peut être extrait à partir de la matrice de vue (facilement décrite here, c'est-à-dire la deuxième colonne). Vous pouvez ensuite calculer le vecteur latéral en faisant vSide = vCamToCen x vUp. Calculez ensuite le vecteur REAL en faisant vUp = vCamToCen x vSide. Où «x» est un produit croisé.

Vous avez maintenant toutes les informations dont vous avez besoin pour faire votre billboard.

Vous pouvez ensuite former vos 4 verts comme suit.

const float halfW = w/2.0f; 
const float halfH = h/2.0f; 

const D3DXVECTOR3 vHalfSide = vSide * halfW; 
const D3DXVECTOR3 vHalfUp = vUp * halfH; 

vertex[0].pos = vCenter; 
vertex[1].pos = vCenter; 
vertex[2].pos = vCenter; 
vertex[3].pos = vCenter; 

vertex[0].pos -= vHalfSide; 
vertex[0].pos -= vHalfUp; 

vertex[1].pos += vHalfSide; 
vertex[1].pos -= vHalfUp; 

vertex[2].pos += vHalfSide; 
vertex[2].pos += vHalfUp; 

vertex[3].pos -= vHalfSide; 
vertex[3].pos += vHalfUp; 

Construisez vos 2 triangles sur les passer et verts à travers votre pipeline normal (avec vue normale et les matrices de projection).