gpt4 book ai didi

c# - RotateTransform3D 有问题

转载 作者:太空宇宙 更新时间:2023-11-03 15:49:28 32 4
gpt4 key购买 nike

我正在制作一个程序,其中我试图在 ModelVisual3D 上实现多个转换。我对 TranslateTransform3D 没有问题,但是当我尝试旋转一个对象 (ModelVisual3D) 时,它的 CenterX、CenterY 和 CenterZ 坐标将变为 0,0,0。我不知道如何记住对象的最后位置以及当我旋转它时,对象停留在我翻译它的地方。我实现了一个对象的旋转,当双击 LeftMouseButton 时,但旋转只执行一次。这是代码的和平,对应于 RotateTransform:

MyViewport.MouseMove += (sender, e) =>
{
if (modelHit != null && e.LeftButton == MouseButtonState.Pressed)
{

Point endPosition = e.GetPosition(gridDesigner);
Vector3D vector3D = GetTranslationVector3D(modelHit, startPosition, endPosition);

Matrix3D matrix3D = modelHit.Transform.Value;
vector3D += new Vector3D(matrix3D.OffsetX, matrix3D.OffsetY, matrix3D.OffsetZ);

matrix3D.OffsetX = vector3D.X;
matrix3D.OffsetY = 0.2f;
matrix3D.OffsetZ = vector3D.Z;
modelHit.Transform = new MatrixTransform3D(matrix3D);
startPosition = endPosition;

MyViewport.MouseLeftButtonDown += (Sender, m) =>
{
if (modelHit != null && m.LeftButton == MouseButtonState.Pressed)
{
RotateTransform3D rotateTransform = new RotateTransform3D();
AxisAngleRotation3D axisAngleRotation=new AxisAngleRotation3D();

Matrix3D modelHitCoordinates = modelHit.Transform.Value;
rotateTransform.CenterX = modelHitCoordinates.OffsetX;
rotateTransform.CenterY = 0.1;
rotateTransform.CenterZ = modelHitCoordinates.OffsetZ;

axisAngleRotation.Axis = new Vector3D(0, 1, 0);
axisAngleRotation.Angle = 0;
rotateTransform.Rotation = axisAngleRotation;

if (m.ClickCount == 2)
{
axisAngleRotation.Angle += 45;
modelHit.Transform = rotateTransform;

}

}
};
}
};

最佳答案

查看您正在转换的类型。如果您的类型是“Vector3D”,则 Transform 方法将忽略旋转中心。我认为这没有正确记录。

您正在旋转的类型和中心都必须是“Point3D”类型。

该方法作者的意图是合法的。空间方向(“Vector3D”)不应该依赖于旋转中心,因此不需要额外的旋转中心平移。但是,如果您在 3D 空间中旋转一个位置(“Point3D”),那么旋转中心就很重要。

关于c# - RotateTransform3D 有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26588953/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com