■ Transform3DGroup 엘리먼트 : 태양계 자전/공전하기

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


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="Transform3DGroup 엘리먼트 : 태양계 자전/공전하기"

    FontFamily="나눔고딕코딩"

    FontSize="16">

    <Window.Resources>

        <MeshGeometry3D x:Key="CubeMeshGeometry3DKey"

            Positions="-0.5  0.5  0.5,  0.5  0.5  0.5,

                       -0.5 -0.5  0.5,  0.5 -0.5  0.5,

                        0.5  0.5 -0.5, -0.5  0.5 -0.5,

                        0.5 -0.5 -0.5, -0.5 -0.5 -0.5,

                       -0.5  0.5 -0.5, -0.5  0.5  0.5,

                       -0.5 -0.5 -0.5, -0.5 -0.5  0.5,

                        0.5  0.5  0.5,  0.5  0.5 -0.5,

                        0.5 -0.5  0.5,  0.5 -0.5 -0.5,

                       -0.5  0.5 -0.5,  0.5  0.5 -0.5,

                       -0.5  0.5  0.5,  0.5  0.5  0.5,

                        0.5 -0.5 -0.5, -0.5 -0.5 -0.5,

                        0.5 -0.5  0.5, -0.5 -0.5  0.5"

            TriangleIndices=" 0  2  1,  1  2  3

                              4  6  5,  5  6  7,

                              8 10  9,  9 10 11,

                             12 14 13, 13 14 15

                             16 18 17, 17 18 19

                             20 22 21, 21 22 23" />

    </Window.Resources>

    <Viewport3D>

        <!-- 태양 -->

        <ModelVisual3D>

            <ModelVisual3D.Content>

                <GeometryModel3D Geometry="{StaticResource CubeMeshGeometry3DKey}">

                    <GeometryModel3D.Material>

                        <DiffuseMaterial Brush="Yellow" />

                    </GeometryModel3D.Material>

                    <GeometryModel3D.Transform>

                        <Transform3DGroup>

                            <ScaleTransform3D

                                ScaleX="3"

                                ScaleY="3"

                                ScaleZ="3" />

                            <RotateTransform3D>

                                <RotateTransform3D.Rotation>

                                    <AxisAngleRotation3D x:Name="rotateSun" />

                                </RotateTransform3D.Rotation>

                            </RotateTransform3D>

                        </Transform3DGroup>

                    </GeometryModel3D.Transform>

                </GeometryModel3D>

            </ModelVisual3D.Content>

        </ModelVisual3D>

        <!-- 지구/달 조합 -->

        <ModelVisual3D>

            <ModelVisual3D.Content>

                <Model3DGroup>

                    <!-- 지구 -->

                    <GeometryModel3D Geometry="{StaticResource CubeMeshGeometry3DKey}">

                        <GeometryModel3D.Material>

                            <DiffuseMaterial Brush="RoyalBlue" />

                        </GeometryModel3D.Material>

                        <GeometryModel3D.Transform>

                            <RotateTransform3D>

                                <RotateTransform3D.Rotation>

                                    <AxisAngleRotation3D x:Name="rotateEarth" />

                                </RotateTransform3D.Rotation>

                            </RotateTransform3D>

                        </GeometryModel3D.Transform>

                    </GeometryModel3D>

                    <!-- 달 -->

                    <GeometryModel3D Geometry="{StaticResource CubeMeshGeometry3DKey}">

                        <GeometryModel3D.Material>

                            <DiffuseMaterial Brush="LightGray" />

                        </GeometryModel3D.Material>

                        <GeometryModel3D.Transform>

                            <Transform3DGroup>

                                <ScaleTransform3D

                                    ScaleX="0.3"

                                    ScaleY="0.3"

                                    ScaleZ="0.3" />

                                <TranslateTransform3D OffsetX="2" />

                                <RotateTransform3D>

                                    <RotateTransform3D.Rotation>

                                        <AxisAngleRotation3D x:Name="revolveMoon" />

                                    </RotateTransform3D.Rotation>

                                </RotateTransform3D>

                            </Transform3DGroup>

                        </GeometryModel3D.Transform>

                    </GeometryModel3D>

                </Model3DGroup>

            </ModelVisual3D.Content>

            <ModelVisual3D.Transform>

                <Transform3DGroup>

                    <TranslateTransform3D OffsetX="10" />

                    <RotateTransform3D>

                        <RotateTransform3D.Rotation>

                            <AxisAngleRotation3D x:Name="revolveEarth" />

                        </RotateTransform3D.Rotation>

                    </RotateTransform3D>

                </Transform3DGroup>

            </ModelVisual3D.Transform>

        </ModelVisual3D>

        <ModelVisual3D>

            <ModelVisual3D.Content>

                <Model3DGroup>

                    <AmbientLight Color="#404040" />

                    <DirectionalLight

                        Color="#c0c0c0"

                        Direction="2 -3 -1" />

                </Model3DGroup>

            </ModelVisual3D.Content>

        </ModelVisual3D>

        <Viewport3D.Camera>

            <PerspectiveCamera

                Position="-5 15 25"

                LookDirection="5 -15 -25"

                UpDirection="0 1 0"

                FieldOfView="45" />

        </Viewport3D.Camera>

    </Viewport3D>

    <Window.Triggers>

        <EventTrigger RoutedEvent="Window.Loaded">

            <BeginStoryboard>

                <Storyboard TargetProperty="Angle">

                    <DoubleAnimation Storyboard.TargetName="rotateSun"

                        From="0"

                        To="360"

                        Duration="0:0:25"

                        RepeatBehavior="Forever" />

                    <DoubleAnimation Storyboard.TargetName="rotateEarth"

                        From="0"

                        To="360"

                        Duration="0:0:1"

                        RepeatBehavior="Forever" />

                    <DoubleAnimation Storyboard.TargetName="revolveMoon"

                        From="0"

                        To="360"

                        Duration="0:0:27"

                        RepeatBehavior="Forever" />

                    <DoubleAnimation Storyboard.TargetName="revolveEarth"

                        From="0"

                        To="360"

                        Duration="0:6:5"

                        RepeatBehavior="Forever" />

                </Storyboard>

            </BeginStoryboard>

        </EventTrigger>

    </Window.Triggers>

</Window>

 

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

Posted by 사용자 icodebroker