最近我完成了乙個3d軟體光柵器,也就是用cpu執行的小型3d渲染引擎,下面我就分為幾個章節分別說下我實現的思路
通常我們的向量和頂點都是用(x,y,z)表示,但是在3d圖形學裡,我們用(x,y,z,w)表示,那麼在3d圖形學裡頂點和向量有什麼區別呢?
在3d圖形學裡,頂點(vertex)用(x,y,z,1.0)表示,而向量用(x,y,z,0.0)表示,為什麼會這樣呢?其實原因很多,第四個引數的引入可以讓我們實現仿射變換,可以讓我們在透視投影變換後用第四個引數儲存相機空間的z值,反正好處非常多,詳細內容可參見
或者《introduction+to+3d+game+programming+with+directx+11》第三章。
在3d圖形學裡,我們用到的矩陣為4x4矩陣,用c++的二維陣列來表示為float[4][4], 如下面圖所示:
**實現:
/*----------------一,向量和頂點--------------*/
struct vector
;typedef vector point;
//構造乙個頂點
point buildpoint(float x, float y, float z)
//構造乙個向量
vector buildvector(float x, float y, float z)
**實現:
/*------------------二,矩陣-------------------*/
struct matrix
;
假設有兩個向量vector1 (x1,y1,z1,0) 和vector2 (x2,y2,z2,0),公式如下:
**實現:
//向量點乘(包括點和向量)
float vectordotproduct(const vector* v1, const vector* v2)
假設有兩個向量vector1 (x1,y1,z1,0) 和vector2 (x2,y2,z2,0),公式如下:
**實現:
//向量叉乘
vector vectorcrossproduct(const vector* v1, const vector* v2)
假設有存在乙個向量vector(x1,y1,z1,0),規格化後變為(x2,y2,z2,0),則x2*x2+y2*y2+z2*z2=1, 公式如下:
**實現:
//向量規格化
void vectornormalize(vector* v)
假設有兩個向量vector1 (x1,y1,z1,0) 和vector2 (x2,y2,z2,0),公式如下:
//向量相減,左減去右
vector vectorsubtract(const vector* v1, const vector* v2)
假設有乙個向量或者頂點為(x,y,z,w),則頂點或者向量乘以矩陣的運算公式為
如果為頂點,也就是(x,y,z,1), 則運算公式為:
如果為向量,也就是(x,y,z,0), 則運算公式為:
**實現:
//向量進行矩陣變換, 對於不改變內容的函式形參加個const
void vectortransform(vector* pointptr, const matrix* maptr)
else
}
假設有兩個矩陣a和b,a*b得到c矩陣
**實現:
//矩陣乘法
matrix matrixmultiply(const matrix* ma1, const matrix* ma2)
} }return matrix;
}
DirectX11渲染過程
網易作業deadline 要涼了555 對directx初始化完成後,就可以進行渲染了。struct vs input 輸入資料的格式 struct vs output 輸出資料的格式 vs output main vs input input 編譯之後生成cso檔案,使用readfiletoblo...
rest framework之渲染器
根據 使用者請求url 或 使用者可接受的型別,篩選出合適的 渲染元件。序列化 友好的展示資料 首先要在settins.py中將rest framework元件加進去 引入渲染器類,然後將他們作為乙個列表的元素賦值給renderer classes 配置屬性,如下 from rest framewo...
DirectX11學習筆記 4 文字的渲染
遊戲中的文字有多種實現方式,比如在螢幕上進行幾何貼圖,使用向量繪製,甚至僅僅使用標準訊息盒。在2d和3d遊戲中,文字通常使用貼圖的幾何圖形進行繪製 動態文字系統通重載入在字型中包含的任何字母的單一貼圖來構建那些文字字串 這裡的建立頂點快取是動態的 設定如下 hresult d3dtextdemo c...