在這個系列講述繪製圖元主要是以三角形為主,我們通過頂點構成三角形,三角形構成整個模型的網格。如下:
每個頂點可以攜帶一些資訊,比如位置、法向量、顏色、uv座標等等。後面我會在shader著色器篇章講述這些資訊的用處。
如何用頂點來組織乙個網格呢?這裡我們是使用的索引頂點。也就是頂點資料只存乙份,網格的圖元頂點僅僅使用頂點的索引來表示。這裡有篇ogl中網格頂點組織結構的介紹。
根據上面所述的頂點屬性,我們可以簡單的將頂點結構定義為如下:
//頂點資訊 包括座標,顏色,紋理座標,法線等等
class
vertexin
vertexin
(const
vertexin& rhs) :pos(rhs.pos), color(rhs.color), tex(rhs.tex), normal(rhs.normal) {}
};
根據上面的所述,我們知道網格結構一定有兩個陣列,乙個是儲存所有的頂點,乙個是用於儲存圖元的頂點索引。**如下:
class mesh
mesh(const mesh& mesh):vertices(mesh.vertices), indices(mesh.indices){}
mesh(mesh&& mesh)
mesh& operator=(const mesh& mesh)
vertices = mesh.vertices;
indices = mesh.indices;
return *this;
}mesh& operator=(mesh&& mesh)
void setvertexs(vertexin* _vs, int count)
void setindices(int* _es, int count)
std::vector
vertices;
std::vector
indices;
};
有了上面的基本結構,我們能夠很好的組織我們需要繪製的模型資料,接下來我們需要提供乙個工具用於生成一些常用的模型頂點資料。當然,對於哪些複雜的模型資料,一般都是由美術通過建模軟體製作出來匯出成模型檔案,由程式讀取模型檔案解析得到頂點、貼圖資料。不過這裡我們只是使用一些簡單的模型,比如正方形;所以我們直接在**中設定頂點資料。具體**如下:
class meshgenerator
public:
static mesh createbox(real width, real height, real depth);
};
這裡只貼出了標頭檔案,具體的函式實現由於過長就不貼出來了,目前由於沒有講解shader,所以可能對createbox這個方法中建立模型頂點資料的過程不是很能理解。等下一節,我們講述了shader(著色器),大家就會對這個方法中頂點屬性的設定有所理解。
該章節涉及到**:
mesh.h、meshgenerator.h、meshgenerator.cpp
SoftwareRender三部曲 前言
這個系列主要是介紹如何簡單製作乙個softwarerender,後面會分三篇文章來完成這個系列。在看這個系列之前最好先閱讀之前 遊戲開發3d數學筆記 在這個工程中的所需要的一些數學庫 vector matrix mesh等 都 於之前3d數學系列。當然,這些數學庫使用上比較簡單,如果你對其數學原理不...
三消遊戲(三)
後面一些更改就是實現下落下標更改的方法。這個方法要在一開始檢測三色的時候呼叫 with3arr this.filterdelsame with3arr,return with3arrupdatecellfalldownnum function cell 還要刪除陣列裡的相同元素 filterdels...
三周C 總結三
1 陣列概念 陣列名變數代表陣列首位址。定義 int x1 new int 10 string names 2.折半查詢演算法 要求陣列按照大小有序 static int quickfind int arr,int x 形式引數 int index 1 int low 0,high arr.leng...