C++Directx11開發筆記五:3D空間座標系認識

來源:互聯網
上載者:User

在前一篇文章中我們知道了頂點著色器和像素著色器的用途,在例子中也知道了如何在3D的座標系中畫一個2D的映像,即畫一個三角形,這次我們需要知道如何在3D座標系中呈現一個3D的映像,並且瞭解一下在3D空間中幾個座標系的認識。這些在遊戲編程中都會使用到,因為每個3D物件都有自己的座標系,至於如何轉換這些座標系我想可能我們需要在下一節中進行另一番討論。學習是無止境的,貴在堅持,希望我也能夠堅持我童年時的夢想,在不久的將來實現我的遊戲夢。

 

3D空間認識:

在前面章節中,在螢幕上繪製的2D映像三角形是以螢幕對齊的,就像一個三角形直接貼在螢幕上面,但是那不是每一個都適用的。這樣我們就需要一個3D空間座標系來進行描述和進行顯示,在真實的世界裡,每一個物品都存在於3D空間中。這也就意味著,要想放置一個物品在一個特殊的位置,我們必須要使用一個座標系並且定義3個描述特定位置的座標。在電腦繪圖中,三維座標系一般使用的是笛卡兒座標系,這個在數學中有見過吧。同時還分為左手座標系或右手座標系,左手座標系就是Y軸指向上方,X軸指向右方,而Z軸指向前方;和左右座標系相同的是右手座標系Y和X軸指向相同,Z軸的方向正好相反,如所示。

下面我們來討論一下在3D座標系中,一個點在不同維數空間中不同的座標。比如在一維中,如所示,P點在尺子5厘米的地方,當我們移動尺子時,P點的位置也就發生了變化,說不定在4厘米或3厘米的地方。雖然P點其實都沒有移動過,但是它卻有了新的座標,也就是參照物不同罷了。

下面我們來看一下在三維下的情況,一個空間就需要定義一個原點和三條從原點出發的軸線:X,Y,Z。在電腦繪圖中,他們包含了好幾個空間下的定義:基元座標系(Object Space)【模型幾何座標系】,全局座標系(World Space),觀察座標系(View Space),投影座標系(Projection Space),以及螢幕座標系(Screen Space)。

 

基元座標系:

這個座標系也叫做幾何模型座標系,主要用於在使用3D建模時,所使用的座標系。通常在建立模型時,建模人員都會將模型圍繞原點進行建模,那樣將有助於座標變換,比如讓模型旋轉起來,在我們將座標變換時將會進行描述。如,一個正方形正是定義在這樣一個座標系中,它的八個頂點將有如下座標:(-1, 1, -1),(1,1,-1),(-1,-1,-1),(1,-1,-1),(-1,1,1),(1,1,1),(-1,-1,1),(1,-1,1)

因此模型幾何座標系是建模人員在設計和建立模型時定義的座標系,在保持在磁碟裡的模型當然也是存在於一個模型幾何坐座標系中。應用程式可以通過這樣一個模型來建立一個頂點緩衝對象,並且通過模型資料進行初始化這個緩衝對象。因此一個頂點緩衝對象通常都會在模型中建立,這也就說明頂點著色器將從幾何座標系中獲得頂點資料資訊。

 

全局座標系:

全局座標系是將每一個模型(基元物品)共用在一個情境中的座標系,它通常用來描述我們期望呈現的各個模型之間的聯絡關係。為了虛擬一個世界空間座標系,我們可以想象我們是站在西南的角落,並且面對著北方的一個房間裡。我們把我們腳站在這個角落的地方定義為原點(0,0,0),X軸指向我們的右邊,Y軸指向上方,Z軸指向前方【左手座標系,這個也是Direct3D中使用的座標系,聽說OpenGL使用右手座標系,不過我不懂的OpenGL】,面對的方向不變。這樣確定下來後,房間裡的所有東西物品都可以通過不同的座標XYZ進行唯一定性。由此可見,之所以要使用全局座標系,就是為了能夠描述不同物品直接的聯絡。

 

觀察座標系:

觀察座標系,有時候我們也叫做攝影座標系,這個有點像全局座標系那樣,只不過全局座標系是用來描述整個情境,而觀察座標系的原點是在觀察者的眼睛或攝像機。觀察座標系的Z軸就是眼睛看到的前方,Y軸就是相對於眼睛的上方,X軸位於右方,在就可以看到全局座標系和觀察座標系。

在左邊的情境中,在全局座標系中有一個人,就像一個物件一樣,並且有一個攝像機在觀察他,紅色原點和軸線表示全局座標系。在右邊的圖片中,表示了觀察座標系和全局座標系的關係,藍色軸線表示觀察座標系。為了更清楚的理解他們,可以看出觀察座標系的方向和全局座標系的方向是不同的,在全局座標系中觀察的方向是紅色Z軸,而觀察座標系中方向是藍色Z軸。

 

投影座標系:

 投影座標系是通過觀察座標系轉換而來,其實可以想象一下,就和我們拿著攝像機去拍照一樣。在投影座標系中,可見物件的X和Y座標被描述在-1和1之間,而Z座標被描述在0和1之間,在座標轉換時會詳細講解這裡就不再多說了。

 

螢幕座標系:

螢幕座標系一般用來引用一個架構緩衝(Frame Buffer)定位座標列表,因為架構緩衝通常是一個2D的紋理,因此螢幕座標是一個2D座標系。其實就是我們的顯示器,左上方頂點定義為原點(0,0),X軸為橫向,Y軸為縱向。在緩衝中倍描述為w像素的寬度和h像素的高度,最小也就是最右下角的像素的座標為(w-1, h-1)。

 

 這樣我們也就認識了Direct3D中幾個重要的空間座標系,也許我的描述不是特別的符合通常說法,不過我也只是在學習階段,寫部落格也是為了能夠更好的理解和學習Direct3D,有很多都是直接從例子文檔中直接翻譯過來的。如果有錯誤歡迎指正,這一節理論性比較重,其實大家有個大概的瞭解就可以了我想。

相關文章

聯繫我們

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