Я считаю особенно полезным использовать матрицы для преобразования.
В моем случае я заметил, что обычно, если вы применяете преобразование, такое как RotateTransform3D, а затем применяете другое преобразование, используя свойство вашей модели .transform, оно переопределяет последнее преобразование.В большинстве случаев вы хотите, чтобы новое преобразование применялось к последнему.
Вот как я делаю свои вращения:
Vector3D axis = new Vector3D (1,0,0) //In case you want to rotate it about the x-axis
Matrix3D transformationMatrix = model.Content.Transform.Value; //Gets the matrix indicating the current transformation value
transformationMatrix.Rotate(new Quaternion(axis, angle)) //Makes a rotation transformation over this matrix
model.Content.Transform = new MatrixTransform3D(transformationMatrix); //Applies the transformation to your model
Не забудьте, если вы хотите модельчтобы вращаться в своем собственном центре, вместо «.Rotate» используйте «.RotateAt» следующим образом:
transformationMatrix.RotateAt(new Quaternion(axis, angle), modelCenter); //modelCenter is the Point3D variable indicating the center