在WPF中沿x轴旋转画布

时间:2016-07-15 12:46:34

标签: wpf xaml

我有一个2D画布,我想沿x轴旋转。我后来想要沿z轴动画对象的移动。

使用CSS,沿x轴旋转非常简单: transform: rotateX(30deg);,以及z轴上的平移。

Here演示了我如何旋转XAML画布。

如何在XAML / WPF中实现相同的效果?我尝试使用Viewport3DViewport2DVisual3D为起点来应用3D转换。但是,画布一旦放置就不会渲染。我不知道是否需要调整材料照明或几何形状。我应该采取什么样的最佳方法?我可以使用一种工具来简化这项工作吗?

我尝试使用How to rotate 2D UIElement around a 3D axis (Y)?How to rotate 2D UIElement around a 3D axis (Y)?中的代码。我似乎无法使用画布来使用我的代码。

编辑:

我尝试使用http://www.codeproject.com/Articles/34391/Rotating-WPF-Content-in-D-Space处的代码(" ContentControl3D Internals")作为起点的基础:

<Viewport2DVisual3D>
  <Viewport2DVisual3D.Geometry>
    <MeshGeometry3D TriangleIndices="0,1,2 2,3,0" TextureCoordinates="0,1 1,1 1,0 0,0" Positions="-1,-1,0 1,-1,0 1,1,0 -1,1,0" />
  </Viewport2DVisual3D.Geometry>
  <Viewport2DVisual3D.Transform>
    <RotateTransform3D>
     <RotateTransform3D.Rotation>
        <AxisAngleRotation3D Angle="180" />
     </RotateTransform3D.Rotation>
    </RotateTransform3D>
  </Viewport2DVisual3D.Transform>
  <Viewport2DVisual3D.Material>
    <DiffuseMaterial Viewport2DVisual3D.IsVisualHostMaterial="True" Brush="White" />
  </Viewport2DVisual3D.Material>
  <Viewport2DVisual3D.Visual>
    <Border BorderBrush="Transparent" BorderThickness="1">
      <Canvas>
        <!-- ... -->
      </Canvas>
    </Border>
   </Viewport2DVisual3D.Visual>
</Viewport2DVisual3D>

画布无法渲染。我确实尝试过使用其他包装器以及我提供的其他链接,并且没有运气获取视觉效果。

1 个答案:

答案 0 :(得分:1)

From this example page,添加相机和一些灯光(照明可选):

<Viewport3D>
    <Viewport3D.Camera>
        <PerspectiveCamera Position="0, 0, 4"/>
    </Viewport3D.Camera>

    <ModelVisual3D>
        <ModelVisual3D.Content>
            <DirectionalLight Color="#FFFFFFFF" Direction="0,0,-1"></DirectionalLight>
        </ModelVisual3D.Content>
    </ModelVisual3D>

    <Viewport2DVisual3D>
    ...
    </Viewport2DVisual3D>

旋转角度180非常大,我认为这是向后翻转你的边界。