J'essaie de trouver un algorithme approprié pour créer une matrice qui permet au quad de faire face au camer mais je rencontre des difficultés.Création d'une matrice pour un quad billboarded?
Le quad je dessine est vers le bas, voici le code que j'ai jusqu'à présent:
D3DXVECTOR3 pos;
pos = D3DXVECTOR3(-2.0f, 6.0f, 0.1f);
D3DXMATRIX transform;
D3DXMatrixTranslation(&transform, pos.x, pos.y, pos.z);
D3DXVECTOR3 axis = D3DXVECTOR3(0, -1, 0);
D3DXVECTOR3 quadtocam = pos - EmCameraManager::Get().GetPosition();
D3DXVec3Normalize(&quadtocam,&quadtocam);
D3DXVECTOR3 ortho;
D3DXVec3Cross(&ortho, &axis, &quadtocam);
float rotAngle = acos(D3DXVec3Dot(&axis,&quadtocam));
D3DXMATRIX rot;
D3DXMatrixRotationAxis(&rot,&ortho,rotAngle);
transform = rot*transform;
Cela fonctionne quand il vient à faire du quad face à la caméra mais il ne reste pas raison quand face à tous les angles.
Sur cette capture d'écran: http://imgur.com/hFmzc.png Sur la gauche, le quad est vu tout droit (le vecteur est 0,0,1), dans l'autre il est vu d'un angle arbitraire.
Les deux fois, il fait face à la caméra, mais quand d'un angle arbitraire, il est incliné le long de son axe z local. Je ne suis pas sûr de savoir comment y remédier et je me demandais quelle serait la prochaine étape?
Hmm, je ne peux pas mettre le code que vous avez fourni sous la ligne normalize parce que 'rotAngle' n'a pas encore été déclaré. – tweetypi
Mon erreur, RotAngle devait être firstRotAngle. C'est corrigé maintenant. –
La solution a-t-elle fonctionné? –