Bonjour, j'essaye de me lancer dans la 3D.
Il y a quelques temps, j'avais fait un petit "moteur" graphique en fesant le rendu en utilisant un Scene Graph.
Ici, j'essaye de faire +- la même chose en 3D et j'aimerai avoir un système me permettant d'appliquer les
transformations des Node parent aux enfants. En gros pouvoir faire un truc de style en SFML :
states.transform *= getTransform();
Je me suis aidé du code source de sf::Transform et sf::Transformable. En ce qui concerne les transformations en elle-même je crois avoir réussi et bien intégré les calculs de matrice.
Par contre pour la méthode const Transform& sf::Transformable::getTransform()const :
const Transform& Transformable::getTransform() const
{
// Recompute the combined transform if needed
if (m_transformNeedUpdate)
{
float angle = -m_rotation * 3.141592654f / 180.f;
float cosine = static_cast<float>(std::cos(angle));
float sine = static_cast<float>(std::sin(angle));
float sxc = m_scale.x * cosine;
float syc = m_scale.y * cosine;
float sxs = m_scale.x * sine;
float sys = m_scale.y * sine;
float tx = -m_origin.x * sxc - m_origin.y * sys + m_position.x;
float ty = m_origin.x * sxs - m_origin.y * syc + m_position.y;
m_transform = Transform( sxc, sys, tx,
-sxs, syc, ty,
0.f, 0.f, 1.f);
m_transformNeedUpdate = false;
}
return m_transform;
}
Je dois dire que je m'y perd. J'aimerai avoir quelques explications et si possible également un lien où cette méthode (si elle a un nom et qu'elle ne soit pas une simple méthode pondue de ton esprit) est expliquée mathématiquement.