Несколько дней на 3D-модели, и я не могу понять, как переместить ось, чтобы я мог начать свои вращения.например .... Я хочу наклонить X на 30 градусов, и тогда я буду выстроен в линию, чтобы сделать каждую ось вращения.Если я поверну X на 30 градусов, это повлечет за собой вращения Y и Z.Любые примеры, как это сделать в коде позади?Самый близкий пример, который я нашел, был в демонстрации Манипулятора, но он не показывает код того, как работает манипулятор.
private Transform3DGroup GetTransforms(Model3D model)
{
var transforms = new Transform3DGroup();
// Rotation around X
transforms.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(1, 0, 0), 0)));
// Rotation around Y
transforms.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), 0)));
// Rotation around Z
transforms.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 0, 1), 0)));
// Translate transform (if required)
transforms.Children.Add(new TranslateTransform3D());
model.Transform = transforms;
return transforms;
}
private void SetRotation(double amountX, double amountY, double amountZ, Model3D model, Point3D center)
{
// Suppose we have a function that gives us all the transforms
// applied to this object
var transforms = GetTransforms(model);
var translation = transforms.Children[3];
// Suppose GetCenter() obtains the center point of an object
// in Point3D format
var translatedCenter = translation.Transform(center);
if (!(transforms.Children[0] is RotateTransform3D rotX)) throw new ArgumentNullException(nameof(rotX));
if (!(transforms.Children[1] is RotateTransform3D rotY)) throw new ArgumentNullException(nameof(rotY));
if (!(transforms.Children[2] is RotateTransform3D rotZ)) throw new ArgumentNullException(nameof(rotZ));
// Set the center point of transformation to the translated center of the object
rotX.CenterX = rotY.CenterX = rotZ.CenterX = translatedCenter.X;
rotX.CenterY = rotY.CenterY = rotZ.CenterY = translatedCenter.Y;
rotX.CenterZ = rotY.CenterZ = rotZ.CenterZ = translatedCenter.Z;
// Apply the angle amounts
((AxisAngleRotation3D) rotX.Rotation).Angle = amountX;
((AxisAngleRotation3D) rotY.Rotation).Angle = amountY;
((AxisAngleRotation3D) rotZ.Rotation).Angle = amountZ;
}