C# windows环境下wpfc中的三维图形

C# windows环境下wpfc中的三维图形,c#,wpf,C#,Wpf,我是新的三维图形和wpf,也需要结合这两个在我目前的项目。我将点和法线添加到MeshGeometry3D,并将MeshGeometry3D添加到GeometryModel3D。然后将GeometryModel3D添加到ModelVisual3D,最后将ModelVisual3D添加到ViewPort3D。现在,如果需要旋转,我将在GeometryModel3D或ModelVisual3D上执行所需的变换,并最终将其添加到ViewPort3D。我遇到了一个问题: objViewPort3D.Rem

我是新的三维图形和wpf,也需要结合这两个在我目前的项目。我将点和法线添加到MeshGeometry3D,并将MeshGeometry3D添加到GeometryModel3D。然后将GeometryModel3D添加到ModelVisual3D,最后将ModelVisual3D添加到ViewPort3D。现在,如果需要旋转,我将在GeometryModel3D或ModelVisual3D上执行所需的变换,并最终将其添加到ViewPort3D。我遇到了一个问题:

objViewPort3D.Remove(objModelVisual3D);
objGeometryModel3D.Transform = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), angle += 15));
objModelVisual3D.Content = objGeometryModel3D;
objViewPort3D.Children.Add(objModelVisual3D);

每次旋转15度,为什么我必须做角度+=15,而不仅仅是15度?似乎存储的模型不会通过变换操作进行变换,但变换仅在通过ViewPort3D显示时应用。我希望转换实际更改存储的MeshGeometry3D对象中的坐标,以便下次执行转换时,它将对先前转换的模型而不是原始模型执行转换。如何获得这种行为?

我想你可以使用动画

一些伪代码:

角度=0 函数onClick: 新角度=角度+30 动画角度,新角度
角度=新角度

正确,变换操作不会变换网格的位置。相反,“变换”特性定义渲染期间网格的世界变换

在三维图形中,世界变换在对象渲染期间将网格点从对象空间变换到世界空间

来自


设置“世界变换”(world transform)并让渲染器在单个变换中绘制网格要比变换网格的每个顶点(如您所愿)快得多。

您必须执行角度+=15,因为每次都要应用新的RotateTransform3D

这可能有助于:

public RotateTransform3D MyRotationTransform { get; set; }
...
//constructor
public MyClass()
{
     MyRotationTransform = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), 0));

}

//in your method
MyRotationTransform.Rotation += 15;
objGeometryModel3D.Transform = MyRotationTransform;

谢谢但是,我的要求是,渲染后,用户可以在网格模型中选择一个或多个顶点并拖动鼠标。在这种情况下,我需要相应地变形渲染模型并再次渲染。你有什么建议?你可以反过来做。取用户单击的点,进行逆变换以映射回对象空间。