J'essaie actuellement de comprendre WPF, et je suis en train de convertir des espaces de coordonnées avec des structures Matrix3D.La fonction WPF Matrix3D.Rotate() est-elle inactive?
Après avoir réalisé WPF a des différences entre Point3D et Vector3D (c'est deux heures que je ne reviendrai jamais ...) Je peux obtenir une matrice de traduction mis en place. J'essaie maintenant d'introduire une matrice de rotation, mais cela semble donner des résultats inexacts. Voici mon code pour mon monde transformation de coordonnées ...
private Point3D toWorldCoords(int x, int y)
{
Point3D inM = new Point3D(x, y, 0);
//setup matrix for screen to world
Screen2World = Matrix3D.Identity;
Screen2World.Translate(new Vector3D(-200, -200, 0));
Screen2World.Rotate(new Quaternion(new Vector3D(0, 0, 1), 90));
//do the multiplication
Point3D outM = Point3D.Multiply(inM, Screen2World);
//return the transformed point
return new Point3D(outM.X, outM.Y, m_ZVal);
}
La traduction semble fonctionner très bien, la rotation de 90 degrés semble toutefois revenir inaacuracies à virgule flottante. La ligne Offset de la matrice semble être légèrement décalée (0,000001 dans les deux cas) ce qui produit un aliasing sur les rendus. Y a-t-il quelque chose qui me manque ici, ou dois-je juste arrondir manuellement la matrice?
Vive