WPF 3D:使用變換中的TranslateTransform3D

來源:互聯網
上載者:User

程式效果:

 

WPF 3D中的TranslateTransform3D應該是所有3D變換中最簡單的變換,使用起來非常簡單,先定義好3D對象,接著在適當的位置加入變換就可以了。

 

當然WPF 3D中變換(Transform3D類型)可以應用在如下屬性中:

  • 照相機:Camera類型
  • 3D模型定義:Model3D類型
  • 容納3D模型的Visual3D:ModelVisual3D類型

 

對於2D的TranslateTransform,只有兩個屬性X和Y。3D的TranslateTransform則對應OffsetX, OffsetY和OffsetZ屬性來調整X,Y,Z三軸的座標。

 

下面是介面XAML:

<DockPanel>

    <DockPanel.Resources>

        <Style TargetType="Button">

            <Setter Property="HorizontalAlignment" Value="Center"/>

            <Setter Property="Padding" Value="3"/>

        </Style>

    </DockPanel.Resources>

    <StackPanel DockPanel.Dock="Top"

               Background="Gray">

        <Button Click="up_Click">↑</Button>

        <StackPanel HorizontalAlignment="Center"

                   Orientation="Horizontal">

            <Button Click="left_Click">←</Button>

            <Button Click="out_Click"></Button>

            <Button Click="in_Click"></Button>

            <Button Click="right_Click">→</Button>

        </StackPanel>

        <Button Click="down_Click">↓</Button>

    </StackPanel>

    <Viewport3D>

        <Viewport3D.Camera>

            <PerspectiveCamera Position="-2.5 2.5 5" LookDirection="0.5 -0.5 -1"/>

        </Viewport3D.Camera>

        <ModelVisual3D>

            <ModelVisual3D.Content>

                <Model3DGroup>

                    <DirectionalLight Direction="1 0 -7"

                            Color="White"/>

                    <GeometryModel3D>

                        <GeometryModel3D.Geometry>

                            <MeshGeometry3D Positions="-1 1 1, 1 1 1, -1 -1 1, 1 -1 1, -1 1 -1, 1 1 -1, -1 -1 -1, 1 -1 -1

                                                       1 1 1, 1 1 -1, 1 -1 1, 1 -1 -1, -1 1 1, -1 1 -1, -1 -1 1, -1 -1 -1

                                                       -1 1 1, -1 1 -1, 1 1 1, 1 1 -1, -1 -1 1, -1 -1 -1, 1 -1 1, 1 -1 -1"

                                           TriangleIndices="0 2 1, 1 2 3, 5 6 4, 5 7 6

                                                             8 10 9, 9 10 11, 13 14 12, 13 15 14

                                                             16 18 17, 17 18 19, 22 21 20, 22 23 21"/>

                        </GeometryModel3D.Geometry>

                        <GeometryModel3D.Material>

                            <DiffuseMaterial Brush="Green"/>

                        </GeometryModel3D.Material>

                        <GeometryModel3D.BackMaterial>

                            <DiffuseMaterial Brush="Red"/>

                        </GeometryModel3D.BackMaterial>

                    </GeometryModel3D>

                </Model3DGroup>

            </ModelVisual3D.Content>

            <ModelVisual3D.Transform>

                <TranslateTransform3D x:Name="transform" />

            </ModelVisual3D.Transform>

        </ModelVisual3D>

    </Viewport3D>

</DockPanel>

 

 

背後代碼則是根據功能,把相應Transform的屬性進行加減從而達到變換效果。

private void up_Click(object sender, RoutedEventArgs e)

{

    transform.OffsetY++;

}

 

private void left_Click(object sender, RoutedEventArgs e)

{

    transform.OffsetX--;

}

 

private void out_Click(object sender, RoutedEventArgs e)

{

    transform.OffsetZ--;

}

 

private void in_Click(object sender, RoutedEventArgs e)

{

    transform.OffsetZ++;

}

 

private void right_Click(object sender, RoutedEventArgs e)

{

    transform.OffsetX++;

}

 

private void down_Click(object sender, RoutedEventArgs e)

{

    transform.OffsetY—;

}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.