使用WPF實現3D情境[二]

來源:互聯網
上載者:User

在上一篇的文章裡我們知道如何構造一個簡單的三維情境,這次的課程我將和大家一起來研究如何用代碼,完成對建立好了的三維情境的觀察。

首先看一下DEMO的介面:

 

 

可以看到8個方向的按鈕,它們將提供觀察角度的變化和三維情境的旋轉這樣的功能。

觀察位置變化:

實現原理:改變情境內照相機的絕對位置等屬性

實現代碼:

定義照相機

<Viewport3D Name="myViewport" Margin="0,0,0,0">
        <Viewport3D.Camera>
          <PerspectiveCamera x:Name="myViewportCamera" FarPlaneDistance="5000" NearPlaneDistance="0.25" FieldOfView="90" Position="1800,0,0" LookDirection="-1,0,0" UpDirection="0,1,0"></PerspectiveCamera>
        </Viewport3D.Camera>

定義照相機(觀察角度)的變化事件:

        void rightButton_Click(object sender, RoutedEventArgs e)
        ...{
            this.myViewportCamera.Position = new System.Windows.Media.Media3D.Point3D(this.myViewportCamera.Position.X, this.myViewportCamera.Position.Y , this.myViewportCamera.Position.Z +100);
        }

        void leftButton_Click(object sender, RoutedEventArgs e)
        ...{
            this.myViewportCamera.Position = new System.Windows.Media.Media3D.Point3D(this.myViewportCamera.Position.X , this.myViewportCamera.Position.Y, this.myViewportCamera.Position.Z- 100);
        }

        void backButton_Click(object sender, RoutedEventArgs e)
        ...{
            this.myViewportCamera.Position = new System.Windows.Media.Media3D.Point3D(this.myViewportCamera.Position.X + 100, this.myViewportCamera.Position.Y, this.myViewportCamera.Position.Z );
        }

        void frontButton_Click(object sender, RoutedEventArgs e)
        ...{
            this.myViewportCamera.Position = new System.Windows.Media.Media3D.Point3D(this.myViewportCamera.Position.X - 100, this.myViewportCamera.Position.Y , this.myViewportCamera.Position.Z );
        }

 

三維情境角度變化:

實現原理:改變三維情境內定義的軸的角度

實現代碼:

定義操作軸:

          <ModelVisual3D.Transform>
            <Transform3DGroup>
              <MatrixTransform3D/>
              <RotateTransform3D >
                <RotateTransform3D.Rotation >
                  <AxisAngleRotation3D Angle="0" Axis="0,10,0" x:Name="myAngleRotationChair"/>
                </RotateTransform3D.Rotation>
              </RotateTransform3D>
              <RotateTransform3D >
                <RotateTransform3D.Rotation >
                  <AxisAngleRotation3D Angle="0" Axis="0,0,10" x:Name="myAngleRotationChair_1"/>
                </RotateTransform3D.Rotation>
              </RotateTransform3D>
            </Transform3DGroup>
          </ModelVisual3D.Transform>
        </ModelVisual3D>

定義軸旋轉代碼:

 void down_Click(object sender, RoutedEventArgs e)
        ...{
            this.myAngleRotationChair_1.Angle -= 10;
        }

        void up_Click(object sender, RoutedEventArgs e)
        ...{
            this.myAngleRotationChair_1.Angle += 10;
        }

        void left_Click(object sender, RoutedEventArgs e)
        ...{
            this.myAngleRotationChair.Angle -= 10;
        }

        void right_Click(object sender, RoutedEventArgs e)
        ...{
            this.myAngleRotationChair.Angle += 10;
        }

 

好的~如果您對更多的三維情境變成想有所瞭解,請關注第三講。

如果您想下載原始碼或收聽語音教程,請訪問:微軟webcast

 

再次感謝您的關注,謝謝!

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.