SoftwareRender三部曲 一 網格

2021-08-14 02:45:42 字數 1577 閱讀 9057

在這個系列講述繪製圖元主要是以三角形為主,我們通過頂點構成三角形,三角形構成整個模型的網格。如下:

每個頂點可以攜帶一些資訊,比如位置、法向量、顏色、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...