<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                上一節中,我們認識了3D世界中最基礎的一個概念——坐標系,并且了解了XNA中使用Vector3類型來表示。但是,由于引入了深度信息,所以在空間中的物體要想正確的投影出來,還缺少一個重要的道具——攝像機。 先來回想一下用攝像機或照相機的經歷吧!對于同樣的目標物體,有以下因素影響成像的結果:攝像機位置、攝像機方向、鏡頭參數。當攝像機所處的位置不同時,對物體的觀察角度影響了成像的結果。當攝像機橫向或豎向的角度不同時,成像也呈橫向或豎向不同的角度。當使用不同焦距的鏡頭時,即使攝像機位置和方向都不變,成像的結果依然有差異。 由此可見,要想取得正確的成像結果,即正確的繪制渲染出3D空間中的物體,對攝像機的確定是非常重要的。換句話說,只有確定了攝像機和物體,才能得到確定的一個渲染結果。 那么對于如此復雜的攝像機信息,在XNA中要如何表示呢?這個還是得分兩個部分來表述,一個部分用于表示攝像機的位置、朝向的目標位置、向上的方向這三個視點屬性,相當于把攝像機固定下來;另一部分用于表示攝像機的視角、成像的長寬比、投影參數這三個屬性,相當于把鏡頭和像紙信息固定下來。下面我們分別來看一下這兩部分在XNA中的表示方法。 在計算機圖形學中,我們知道3D世界實際上就是矩陣,以后在3D世界中的大量操作的實質全是矩陣運算,所以我們要先介紹一下矩陣。當然不是介紹數學概念,而是XNA中的Matrix類。 XNA提供了Matrix類用于表示矩陣,它是一個4X4矩陣,可以進行數學運算,還提供了一些方法用于創建矩陣。常用的構造方法有兩種,一是構造單位矩陣: Matrix matrix=Matrix. Identity; 另一種是創建特殊矩陣,Matrix類提供了一組以Create開頭的靜態方法用于創建需要的矩陣。 回到攝像機的表示當中來,對于攝像機的位置信息,實際上就利用了Matrix類的CreateLookAt()方法來創建一個視點的矩陣,方法原型是: public static Matrix CreateLookAt(Vector3cameraPosition, Vector3 cameraTarget, Vector3 cameraUpVector); 三個參數分別對應前述的攝像機位置、朝向、向上的方向。 對于鏡頭信息,還要稍微復雜一點,我們需要先了解一下投影。看下面的投影示意圖(注:圖片來源于網絡)。實際上我們要定義的不是真正鏡頭上的焦距、光圈,而是這個這平截頭體的信息。這個平截頭體就是投影矩陣,位于該體以外的物體將無法成像。對于這個平截頭體,我們需要確定的參數包括:視角即可視范圍,通常是45度角;長寬比;近平面;遠平面。有了這4個參數,也就把鏡頭的信息定義完了。 ![](https://box.kancloud.cn/2016-04-08_570727f9ea69d.gif) 同樣的,Matrix類提供了CreatePerspectiveFieldOfView()方法來創建投影矩陣,該方法原型是: public static MatrixCreatePerspectiveFieldOfView(float fieldOfView, float aspectRatio, floatnearPlaneDistance, float farPlaneDistance); 4個參數對應的就是平截頭體的4個值。 至此,我們使用了兩個矩陣才把攝像機信息確定下來,這兩個矩陣也可以稱為視圖矩陣和投影矩陣。由于攝像機在3D開發中用得比較多,所以我們定義一個Camera類來簡化攝像機的構造,在以后的代碼中可以方便的使用。該類的代碼如下: ~~~ public class Camera : Microsoft.Xna.Framework.GameComponent { public Matrix view{get;protected set;} public Matrix projection { get; protected set; } public Camera(Game game, Vector3 pos, Vector3 target, Vector3 up, float fieldOfView, float aspectRatio, float nearPlaneDistance,float farPlaneDistance) : base(game) { view = Matrix.CreateLookAt(pos, target, up); projection = Matrix.CreatePerspectiveFieldOfView(fieldOfView,aspectRatio,nearPlaneDistance,farPlaneDistance); } /// <summary> /// Allows the game component to perform any initialization it needs to before starting /// to run. This is where it can query for any required services and load content. /// </summary> public override void Initialize() { base.Initialize(); } /// <summary> /// Allows the game component to update itself. /// </summary> /// <param name="gameTime">Provides a snapshot of timing values.</param> public override void Update(GameTime gameTime) { base.Update(gameTime); } } ~~~ 好了,本節的內容就到這里吧,有了攝像機,后邊就可以開始開發工作了。 ——歡迎轉載,請注明出處 [http://blog.csdn.net/caowenbin](http://blog.csdn.net/caowenbin) ——
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看