建立乙個追蹤攝像機 1

2021-09-25 13:25:07 字數 1817 閱讀 6233

在電腦遊戲中一種非常常用型別的相機是追蹤攝像機,乙個相機在乙個關鍵物件後跟隨(通常是玩家)來提供乙個第一人稱或第三人稱視角,讓物件能夠在遊戲世界中看到。

我們已經有很多塊來實現這類在我們自己遊戲中的相機,但一點點增加遊戲框架的相機類,我們可以在遊戲中實施這個絕對簡單的實現。

這部分工作通過這類改變並構建乙個場景(有乙個紙飛機穿越我們在最後工程中所建立的場景)。一旦我們有這個飛機移動(它本身將有乙個有趣的任務),你將看到如何去附加相機以便它自動追逐飛機並配置一些不同的追蹤相機。

新增紙飛機

紙飛機是乙個非常簡單的在sketchup 中建立的3d模型。它僅包含4個三角形安排給紙飛機的基礎形狀。模型可以在sketchup中,如圖所示

它能定位以便它的中心點近似於原始點(0,0,0)。這定位將確保,當我們旋轉它,它會圍繞它的中心點旋轉。

這物件僅包含平坦的三角形,所以在這個情況下我們必須確保它可以匯出以便每乙個三角形背部面是包括在內的。沒有這一點,飛機將明顯從每乙個三角形頂端,當底部觀察時,將完全消失。.x檔案匯出有乙個選項來匯出背部面,所以這個選項用來使用來建立模型檔案。

這個飛機然後新增到遊戲工程中所謂乙個標準的matrixmodelobject派生類,命名為*****planeobject。我們對於飛機的目標是讓它在房屋中平穩的飛行,然而,我們必須新增一些額外的功能讓類去實現它。

賦予飛機生命力

一些我們前乙個建立物件的示例,以多種方式圍繞螢幕平滑移動。然而,他們都根據應用到物件位置的速度。在這個情況下,我們將得到更好的在平面上的飛行路徑,允許它跟隨一系列分布在3d場景中的移動點。

這是乙個非常適用的例子,但可能不是你將在遊戲中使用的控制機構的種類,它將更有可能依靠使用者輸入來控制玩家的移動。跟隨移動路徑不過是有用的技巧來知道,並在遊戲中有多種應用,從鐵軌上的射手(玩家控制準心,****,但沒有直接控制它的移動)到在遊戲中控制的計算機特徵。

首先要做的是,我們將要做的是定義一系列點沿著飛機要跟隨的移動路徑。在*****planeobject類的開始,他們作為乙個靜態的vector3結構體陣列來宣告。我們也儲存在陣列大小來避免稍後去重新查詢。下面**中將描述。

// points  on the  spline  movement  path 

static vector3 _movementpath =

;static

int _movementpathlength = _movementpath.length;

提示

:通過乙個簡單的反覆試驗的過程,這些點將會被決定。在遊戲中很多這些點必須去定義乙個合理的精準度,它將值得去建立簡單的設計的實用程式來允許他們被定位在螢幕上,而不是通過手工輸入。

現在我們要在這些點中去移動飛機,但它們之間的路徑是不確定的。飛機不能簡單的從乙個位置跳到另乙個位置,即使我們計算乙個在點和移動的飛機之間的直線,它的移動將看起來有稜角和不自然。

xna提供另乙個非常有用的工具,我們可以使用來解決這個問題:乙個函式來計算曲線。樣條線是一條曲線,通過一系列的點,比如那些我們所定義的點。同樣直接要求在移動路徑上的點的位置,我們能同樣要求在這些中的點,曲線將計算乙個從乙個點到下乙個點的平滑彎曲過渡。計算的路徑是理想的,是我們飛機的移動路徑。

移動路徑從為移動路徑設定的點的曲線生成,如圖所示,用相機直接在場景中向下看。飛機的顯示在定義移動路徑點的位置,這些線顯示相近的曲線路徑。

有不同的曲線計算函式,但其中之一我們將在xna中呼叫,被稱為catmull-rom曲線(在它建立後命名edwin catmull和raphael rom)。這是非常有用,簡單使用,並確保曲線路徑準確通過所有定義的位置(不是所有曲線都能做)。

乙個攝像機控制類的總結

通過滑鼠的操縱,控制攝像機環繞模型物件旋轉,從而進行對模型物件的觀察。首先根據攝像機的當前方位,計算它應該到達的目標方位 然後通過插值運算,將攝像機逐幀移動到該目標方位。1 計算攝像機的目標方位。先計算攝像機本地座標系軸向與世界座標系軸向的夾角,作為方位的初始值。注意,這裡只取攝像機需要旋轉變化的座...

攝像機標定(一)

廣義來說,相機標定不單包括成像過程的幾何關係標定,還包括輻射關係的標定,本文只 幾何關係。相機標定是3d計算機視覺 computer vision 裡從2d影象中提取量測資訊的必要步驟。最初發展於攝影測量學 photogrammetry 後逐漸被大量應用於計算機視覺中。相機標定一般來說需要參照物或標...

NGUI利用兩個攝像機裁剪特效

最近策劃們要求在物品欄的邊框上面新增粒子效果,以區分物品的品質,本以為這件事情非常容易,哪知 ngui 自帶的 softclip 無法裁剪 3d 模型以及粒子,這兒有篇外國朋友寫的文章 但是因為 ngui 版本的不同,我沒有仔細去研究,有興趣的可以看一下。本篇文章並不是真正意義上的裁剪,而是通過新增...