-1

以下のような立方体を作成し、スクロールを使用して回転させます。タイマーを使用してボタンをクリックすると、プログラムで回転させる必要があります。どうすればよいですか?

<DockPanel Margin="0" >


        <ScrollBar Name="hscroll" 
          DockPanel.Dock="Bottom"
          Orientation="Horizontal" 
          Minimum="-180" Maximum="180" 
          LargeChange="10" SmallChange="1" Value="0" />
        <ScrollBar Name="vscroll" 
          DockPanel.Dock="Right"
          Orientation="Vertical"
          Minimum="-180" Maximum="180" 
          LargeChange="10" SmallChange="1" Value="0" />

        <!--
           - The dockOuter control prevents the rendering
           - from including an implicit margin around dockCube
          -->
        <DockPanel Margin="0" Name="dockOuter" Background="White">
            <DockPanel Margin="0" Name="dockCube" Background="White">
                <Viewport3D Margin="0" Name="viewCube">
                    <ModelVisual3D>
                        <ModelVisual3D.Content>
                            <Model3DGroup>
                                <!-- Lights -->
                                <AmbientLight Color="Gray" />
                                <DirectionalLight Color="Gray" Direction="1,-2,-3" />
                                <DirectionalLight Color="Gray" Direction="-1,2,3" />

                                <!-- Top -->
                                <GeometryModel3D>
                                    <GeometryModel3D.Geometry>
                                        <MeshGeometry3D
                                            Positions = "-1,1,1 1,1,1 1,1,-1 -1,1,-1"
                                            TriangleIndices = "0 1 2     2,3,0"
                                            TextureCoordinates="0,1 1,1 1,0 0,0"
                                        />
                                    </GeometryModel3D.Geometry>
                                    <GeometryModel3D.Material>
                                        <DiffuseMaterial>
                                            <DiffuseMaterial.Brush>
                                                <ImageBrush ImageSource="Top.png"/>
                                            </DiffuseMaterial.Brush>
                                        </DiffuseMaterial>
                                    </GeometryModel3D.Material>
                                </GeometryModel3D>

                                <!-- Front -->
                                <GeometryModel3D>
                                    <GeometryModel3D.Geometry>
                                        <MeshGeometry3D
                                            Positions = "-1,-1,1 1,-1,1 1,1,1 -1,1,1"
                                            TriangleIndices = "0 1 2     2,3,0"
                                            TextureCoordinates="0,1 1,1 1,0 0,0"
                                        />
                                    </GeometryModel3D.Geometry>
                                    <GeometryModel3D.Material>
                                        <DiffuseMaterial>
                                            <DiffuseMaterial.Brush>
                                                <ImageBrush ImageSource="Front.png"/>
                                            </DiffuseMaterial.Brush>
                                        </DiffuseMaterial>
                                    </GeometryModel3D.Material>
                                </GeometryModel3D>

                                <!-- Right -->
                                <GeometryModel3D>
                                    <GeometryModel3D.Geometry>
                                        <MeshGeometry3D
                                            Positions = "1,-1,1 1,-1,-1 1,1,-1 1,1,1"
                                            TriangleIndices = "0 1 2     2,3,0"
                                            TextureCoordinates="0,1 1,1 1,0 0,0"
                                        />
                                    </GeometryModel3D.Geometry>
                                    <GeometryModel3D.Material>
                                        <DiffuseMaterial>
                                            <DiffuseMaterial.Brush>
                                                <ImageBrush ImageSource="Right.png"/>
                                            </DiffuseMaterial.Brush>
                                        </DiffuseMaterial>
                                    </GeometryModel3D.Material>
                                </GeometryModel3D>

                                <!-- Left -->
                                <GeometryModel3D>
                                    <GeometryModel3D.Geometry>
                                        <MeshGeometry3D
                                            Positions = "-1,-1,-1 -1,-1,1 -1,1,1 -1,1,-1"
                                            TriangleIndices = "0 1 2     2,3,0"
                                            TextureCoordinates="0,1 1,1 1,0 0,0"
                                        />
                                    </GeometryModel3D.Geometry>
                                    <GeometryModel3D.Material>
                                        <DiffuseMaterial>
                                            <DiffuseMaterial.Brush>
                                                <ImageBrush ImageSource="Left.png"/>
                                            </DiffuseMaterial.Brush>
                                        </DiffuseMaterial>
                                    </GeometryModel3D.Material>
                                </GeometryModel3D>

                                <!-- Back -->
                                <GeometryModel3D>
                                    <GeometryModel3D.Geometry>
                                        <MeshGeometry3D
                                            Positions = "1,-1,-1 -1,-1,-1 -1,1,-1 1,1,-1"
                                            TriangleIndices = "0 1 2     2,3,0"
                                            TextureCoordinates="0,1 1,1 1,0 0,0"
                                        />
                                    </GeometryModel3D.Geometry>
                                    <GeometryModel3D.Material>
                                        <DiffuseMaterial>
                                            <DiffuseMaterial.Brush>
                                                <ImageBrush ImageSource="Back.png"/>
                                            </DiffuseMaterial.Brush>
                                        </DiffuseMaterial>
                                    </GeometryModel3D.Material>
                                </GeometryModel3D>

                                <!-- Bottom -->
                                <GeometryModel3D>
                                    <GeometryModel3D.Geometry>
                                        <MeshGeometry3D
                                            Positions = "-1,-1,-1 1,-1,-1 1,-1,1 -1,-1,1"
                                            TriangleIndices = "0 1 2     2,3,0"
                                            TextureCoordinates="0,1 1,1 1,0 0,0"
                                        />
                                    </GeometryModel3D.Geometry>
                                    <GeometryModel3D.Material>
                                        <DiffuseMaterial>
                                            <DiffuseMaterial.Brush>
                                                <ImageBrush ImageSource="Bottom.png"/>
                                            </DiffuseMaterial.Brush>
                                        </DiffuseMaterial>
                                    </GeometryModel3D.Material>
                                </GeometryModel3D>

                            </Model3DGroup>
                        </ModelVisual3D.Content>
                    </ModelVisual3D>

                    <Viewport3D.Camera>
                        <PerspectiveCamera
                          Position = "3, 3, 3"
                          LookDirection = "-1, -1, -1"
                          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>
            </DockPanel>
        </DockPanel>
    </DockPanel>
4

1 に答える 1

1

重要な方法で WPF を使用しているため、MVVMパターンに精通している (そして使用している) と仮定します。そうでない場合は、調べてみてください。これは、WPF アプリケーションを管理するための最良の方法です。

現在、カメラの回転はスクロールバーの値にバインドされています。細かいことですが、キューブは同じままですが、カメラがその周りを回転しているため、キューブが回転しているかのように見えます。コードからこれに影響を与えるには、最初にビューモデルに 2 つのプロパティを作成し、スクロールバーの値をそれらのプロパティにバインドします。次に、スクロールバーに直接ではなく、これらの値に回転をバインドします。これまでのところ何も変わっていません。テストすると、アプリケーションは以前と同じように動作するはずです。しかし、プログラムには、コードで設定できる 2 つの変数があります。たとえば、ビューモデルのTimerインスタンスの Tick イベントでそれらをインクリメントします。

WPF は通常、C# コードなしで XAML で使用できるアニメーションにStoryBoardを使用することに注意してください。

于 2013-02-24T10:22:19.687 に答える