첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

■ 3차원 큐브 회전하기 (애니메이션)

------------------------------------------------------------------------------------------------------------------------


TestProject.zip


MainWindow.xaml

 

 

<Window x:Class="TestProject.MainWindow"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    Width="800"

    Height="600"

    Title="3차원 큐브 회전하기">

    <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>

        <Viewport3D Grid.Row="0" Grid.Column="0"

            Margin="4 4 4 4">

            <ModelVisual3D>

                <ModelVisual3D.Content>

                    <Model3DGroup x:Name="cubeModel">

                        <Model3DGroup.Transform>

                            <Transform3DGroup>

                                <RotateTransform3D />

                            </Transform3DGroup>

                        </Model3DGroup.Transform>

                        <AmbientLight Color="Gray" />

                        <DirectionalLight Color="Gray" Direction="1 -2 -3" />

                        <DirectionalLight Color="Gray" Direction="-1 2 3" />

                        <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  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="Blue" />

                            </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" />

                                </RotateTransform3D.Rotation>

                            </RotateTransform3D>

                            <RotateTransform3D>

                                <RotateTransform3D.Rotation>

                                    <AxisAngleRotation3D

                                      Axis="1 0 0" />

                                </RotateTransform3D.Rotation>

                            </RotateTransform3D>

                        </Transform3DGroup>

                    </PerspectiveCamera.Transform>

                </PerspectiveCamera>

            </Viewport3D.Camera>

        </Viewport3D>

    </Grid>

</Window>

 

 

MainWindow.xaml.cs

 

 

using System.Windows;

 

namespace TestProject

{

    /// <summary>

    /// 메인 윈도우

    /// </summary>

    public partial class MainWindow : Window

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 생성자 - MainWindow()

 

        /// <summary>

        /// 생성자

        /// </summary>

        public MainWindow()

        {

            InitializeComponent();

        }

 

        #endregion

    }

}

 

------------------------------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker

댓글을 달아 주세요