[C#, wpf] Rotácia 3D kocky

Programovacie jazyky, rady, poradňa...
lik0
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 48
Registrovaný: 05 okt 2006, 20:29

[C#, wpf] Rotácia 3D kocky

Príspevok od používateľa lik0 »

Zdravím, hľadám niekoho kto sa vyzná v xaml. Potrebujem aby mi kocka rotovala po svojej osi a súčasne vykonávala rotačný pohyb. Som vo WPF začiatočník rotácia okolo svojej osi mi funguje ale neviem tam pridať tú rotáciu po špirále:

Kód: Vybrať všetko

<Window
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="howto_xaml_spinning_cube" Height="600" Width="600">

    <Window.Resources>
        <Storyboard x:Key="RotateStoryboard">
            <Rotation3DAnimationUsingKeyFrames BeginTime="00:00:00" RepeatBehavior="Forever"
             Storyboard.TargetName="CubeModel"
             Storyboard.TargetProperty="(Model3D.Transform).(Transform3DGroup.Children)[0].(RotateTransform3D.Rotation)">
                <SplineRotation3DKeyFrame KeyTime="00:00:02">
                    <SplineRotation3DKeyFrame.Value>
                        <AxisAngleRotation3D Angle="180" Axis="0,1,0"/>
                    </SplineRotation3DKeyFrame.Value>
                </SplineRotation3DKeyFrame>
                <SplineRotation3DKeyFrame KeyTime="00:00:04">
                    <SplineRotation3DKeyFrame.Value>
                        <AxisAngleRotation3D Angle="359" Axis="0,1,0"/>
                    </SplineRotation3DKeyFrame.Value>
                </SplineRotation3DKeyFrame>
            </Rotation3DAnimationUsingKeyFrames>
        </Storyboard>
    </Window.Resources>

    <Window.Triggers>
        <EventTrigger RoutedEvent="FrameworkElement.Loaded">
            <BeginStoryboard Storyboard="{StaticResource RotateStoryboard}"/>
        </EventTrigger>
    </Window.Triggers>

    <Grid Background="Azure">
        <Viewport3D Margin="43,193,290,151" Grid.Row="0" Grid.Column="0" RenderTransformOrigin="0.47,0.596">
            <ModelVisual3D>
                <ModelVisual3D.Content>
                    <Model3DGroup x:Name="CubeModel">
                        <Model3DGroup.Transform>
                            <Transform3DGroup>
                                <RotateTransform3D />
                            </Transform3DGroup>
                        </Model3DGroup.Transform>

                        <!-- Lights -->
                        <AmbientLight Color="Gray" />
                        <DirectionalLight Color="Gray" Direction="1,-2,-3" />
                        <DirectionalLight Color="Gray" Direction="-1,2,3" />

                        <GeometryModel3D>
                            <GeometryModel3D.Geometry>
                                <!-- Cube -->
                                <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  1  2     2  3  0
                                       4  5  6     6  7  4
                                       8  9 10    10 11  8
                                      12 13 14    14 15 12
                                      16 17 18    18 19 16
                                      20 21 22    22 23 20
                                      " />
                            </GeometryModel3D.Geometry>

                            <GeometryModel3D.Material>
                                <DiffuseMaterial Brush="Beige" />
                            </GeometryModel3D.Material>
                        </GeometryModel3D>
                    </Model3DGroup>
                </ModelVisual3D.Content>
            </ModelVisual3D>

            <Viewport3D.Camera>
                <PerspectiveCamera 
                  Position = "1.5, 2, 3"
                  LookDirection = "-1.5, -2, -3"
                  UpDirection = "0, 1,0 "
                  FieldOfView = "60">
                    <PerspectiveCamera.Transform>
                        <Transform3DGroup>
                            <RotateTransform3D>
                                <RotateTransform3D.Rotation>
                                    <AxisAngleRotation3D
                                      Axis="0 1 0" 
                                      Angle="{Binding ElementName=hscroll, Path=Value}" />
                                </RotateTransform3D.Rotation>
                            </RotateTransform3D>
                            <RotateTransform3D>
                                <RotateTransform3D.Rotation>
                                    <AxisAngleRotation3D
                                      Axis="1 0 0" 
                                      Angle="{Binding ElementName=vscroll, Path=Value}" />
                                </RotateTransform3D.Rotation>
                            </RotateTransform3D>
                        </Transform3DGroup>
                    </PerspectiveCamera.Transform>
                </PerspectiveCamera>
            </Viewport3D.Camera>
        </Viewport3D>
   
    </Grid>
</Window>
ďakujem za každu radu
Napísať odpoveď