Как повернуть 3D-модель с 3 осями X Y Z с помощью HelixToolkit?

Я хочу отобразить 3D-модель в приложении wpf. Данные поступают из последовательного соединения arduino.

я могу отобразить модель, но я не знаю, как вращать оси X, Y, Z.

https://msdn.microsoft.com/en-us/library/system.windows.media.rotatetransform(v=vs.110).aspx

есть информация о функциях. Я запускаю следующую функцию для поворота объекта (не камеры), но он не движется. Как я могу переместить модель только с 3 переменными (x, y, z)

Models.Transform.Transform(новый Point3D(x, y, z));


person Cozdemir    schedule 07.08.2017    source источник


Ответы (1)


Объект, который вы хотите повернуть, должен быть ModelVisual3D, добавленным в окно просмотра спирали.

Получите объект Matrix3D из ModelVisual3D.Transform3D, вот функция для вращения вокруг произвольной оси:

public static Matrix3D Rotate(this Matrix3D m, Vector3D vr, double angleDeg, bool multiply = true)
    {
        var rm = new Matrix3D();
        //vr /= vr.Length;
        vr.Normalize();
        var t = angleDeg.ToRad();
        var c = Math.Cos(t);
        var s = Math.Sin(t);
        var c1 = 1 - c;
        var x = vr.X; var y = vr.Y; var z = vr.Z;
        var x2 = x * x; var y2 = y * y; var z2 = z * z;
        var xy = x * y;
        var xz = x * z;
        var yz = y * z;

        //col 1
        rm.M11 = c1 * x2 + c;
        rm.M21 = c1 * xy - s * z;
        rm.M31 = c1 * xz + s * y;
        //col 2
        rm.M12 = c1 * xy + s * z;
        rm.M22 = c1 * y2 + c;
        rm.M32 = c1 * yz - s * x;
        //col 3
        rm.M13 = c1 * xz - s * y;
        rm.M23 = c1 * yz + s * x;
        rm.M33 = c1 * z2 + c;

        if (multiply) return rm * m;
        return rm;
    }

Затем установите Transform3D = new MatrixTransform3D(matrix3D).

Надеюсь, это поможет кому-то...

person greg93    schedule 01.12.2017