3D基礎 3D座標變換在OpenGL 中的實踐

2021-04-19 09:30:56 字數 2185 閱讀 7109

在計算機圖形學中,變換矩陣是非常基礎也是非常重要的知識,在許多資料中,只是羅列出一堆矩陣公式,圖表等等,這很難給人感性的認識,特別是初學者,筆者結合

opengl

這樣乙個非常流行的圖形庫,以實踐的方式闡述在

3d變換矩陣中最簡單的三種:平移、縮放以及旋轉。

這裡有一些前提知識,就是需要了解線性代數一些最最基本的知識,否則難以理解一些東西,而這些知識載體也是很容易獲得的。

變換 我在製作

3d程式的時候,任何在

3d環境中的物體被圖形引擎繪製的時候都是乙個個

3d環境中的點,而正是由於這個原因,當我們想要變換乙個物體的位置,大小,方向,乃至形狀的時候,我們其實只要有序的改變物體網格上的點就可以了。

怎樣變換

在計算機圖形學中,我們通常用矩陣來對

3d圖形的每個點進行變換,比如我們變換乙個需要這樣的計算步驟:

將乙個點的向量與乙個變換矩陣相乘

這樣就得到了乙個變化後的向量

在實踐中,最常用到的就是平移,縮放和旋轉了。

下面給出這三種變換的矩陣 平移

縮放 旋轉

x y

z 學習理論的目的就是為了應用,然而在我們經常應用的

3d圖形庫,比如

d3d,

opengl

中矩陣變換已經被封裝成為呼叫非常簡便的函式了。對於產品開發,這無疑對縮短產品週期有很大的幫助,侯捷說過一句話:「學從難處學,用從易處用」,這句話很有道理,所以我們僅僅使用

opengl

的glvertex*

這樣的函式將以上這些晦澀的圖表應用到實踐當中。

demo

的介面如圖所示,你可以在「操作」選單中對介面中的正方體進行平移、縮放以及旋轉的操作。

因為用的是

nehe

的opengl

的**框架(

nehe.gamedev.net

),對於如何建立起乙個

opengl

程式,這裡就不做相應的闡述了,因為這並不是本文討論的範圍。

下面對重要的**段進行講述:

//這裡定義了正方體的各個頂點,因為不是使用

gltranslate

、glrotate

這些函式進行變換而是手工計算變換後的物體座標,所以我們用乙個頂點陣列來描述物體,這裡一共有

24個點,每個點都使用奇次座標來表示

(x,y,z,w)。

glfloat cube[24][4]=, ,

,, //

前表面 ,

, ,

, //

左側面 ,

, ,

, //

右側面 ,

, ,

, // 頂部

, ,

, , // 底部

, ,

, // 背面

}; //

一般在3d

引擎中,模型座標系中原始的物體座標一般需要保留,而不會隨著流水線,而變成轉化後的座標,所以這裡我們用乙個陣列來儲存變換後的座標

glfloat cubenew[24][4];

// 這裡是乙個核心函式,用來進行兩個矩陣相乘的操作

// 這裡涉及到矩陣相乘,這在任何一本線性代數的課本上都能夠輕鬆的找到

void matrixmul(glfloat matrix[4][4])

} //

有了這些基本操作的函式,下面就需要進行實際的變換了,其實也十分的簡單

// 平移矩陣

glfloat matrix_transform[4][4]=

, ,

, };

// 縮放矩陣

glfloat matrix_scale[4][4]=

, ,

, };

#define pi 3.1415926

// 旋轉矩陣

glfloat matrix_rotate[4][4]=

, ,

, };

//在繪製部分,我們首先繪製地面

glbegin(gl_points);

drawbackground();

glend(); //

然後通過乙個迴圈繪製轉換後的座標

for(int x=0;x<24;x++)

3D空間變換

它相當於是平移變換 t 和旋轉變換 r 的復合,等距變換前後長度,面積,線線之間的角度都不變。自由度 6 旋轉變換r自由度 3,平移變換t自由度 3 t rt0t 1 t begin r t 0 t 1 end t r0t t1 4x4矩陣 eigen isometry3d eigen isomet...

3D變換案例

正面是,當滑鼠懸停到上,背面出現文字。container content face pictures face text 濃縮咖啡 content face pictures face text 卡布奇諾 content face pictures face text 拿鐵 content face...

3D座標變換之自轉公轉

最近工作比較忙,好長時間沒更新了,今天得閒,再來一篇。我們拿太陽系為模型,主要實現太陽自轉 地球自轉 地球公轉 月球自轉 月球公轉效果。由於現在還沒有說到模型的繪製,我們現在暫時用正方體來代表三個星球。先來看一下,在direct3d中是如何生成平移 旋轉 縮放矩陣的。1 生成平移矩陣 c 1 2 d...