В настоящее время я пытаюсь окунуться в WPF, и я нахожусь на этапе преобразования между координатными пространствами со структурами Matrix3D.
Поняв, что в WPF есть различия между Point3D и Vector3D (это два часа, которые я никогда не верну...), я могу настроить матрицу перевода. Сейчас я пытаюсь ввести матрицу вращения, но, похоже, это дает неточные результаты. Вот мой код для моего преобразования мировых координат...
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);
}
Перевод, кажется, работает нормально, однако поворот на 90 градусов, похоже, возвращает неточности с плавающей запятой. Строка смещения матрицы, кажется, немного отличается (0,000001 в любом случае), что приводит к алиасингу на рендерах. Я что-то здесь упустил, или мне просто нужно вручную округлить матрицу?
Ваше здоровье