我使用XAML代码在WPF中创建了一个3D立方体,如下所示:
<Viewport3D Name="viewport3D1">
<Viewport3D.Camera>
<PerspectiveCamera x:Name="camMain" Position="6 5 4" LookDirection="-6 -5 -4">
</PerspectiveCamera>
</Viewport3D.Camera>
<ModelVisual3D>
<ModelVisual3D.Content>
<DirectionalLight x:Name="dirLightMain" Direction="-1,-1,-1">
</DirectionalLight>
</ModelVisual3D.Content>
</ModelVisual3D>
<ModelVisual3D>
<ModelVisual3D.Content>
<GeometryModel3D>
<GeometryModel3D.Geometry>
<MeshGeometry3D x:Name="meshMain"
Positions="0 0 0 1 0 0 0 1 0 1 1 0 0 0 1 1 0 1 0 1 1 1 1 1"
TriangleIndices="2 3 1 2 1 0 7 1 3 7 5 1 6 5 7 6 4 5 6 2 0 2 0 4 2 7 3 2 6 7 0 1 5 0 5 4">
</MeshGeometry3D>
</GeometryModel3D.Geometry>
<GeometryModel3D.Material>
<DiffuseMaterial x:Name="matDiffuseMain">
<DiffuseMaterial.Brush>
<SolidColorBrush Color="Red"/>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</GeometryModel3D.Material>
</GeometryModel3D>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D>
然后是我的窗口的构造函数,我想应用围绕轴OX,OY,OZ的旋转,我认为应该这样做:
RotateTransform3D myRotateTransform = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 2, 0), 1));
meshMain.Transform=myRotateTransform;
// etc...
看起来我没有将转换应用到XAML的适当节点,在我的情况下,什么是实现转换的正确方法?
1条答案
按热度按时间y3bcpkx11#
您需要给予您的ModelVisual3D命名,MeshGeometry3D没有Transform属性,其中模型有Transform属性。您还需要访问您的
AxisAngleRotation3D
对象以设置Angle
属性。编辑为CodeBehind方法添加了更多代码
尽管在这种情况下,我认为最好在Xaml中实现转换。
同样在本示例中,您可以通过设置其Angle属性来更改CodeBehind中的AxisAngleRotation3D: