2014-01-23 96 views
0

我正在創建一個類,它所具有的值之一就是它所構成的所有頂點(它的一個3d程序)。我想有頂點的默認陣列,以及(因爲頂點是相當大的進入),我想這樣做的方法是定義的頂點數組:在類的構造函數各種陣列操作

Entity::vertices[] = { 
     { -0.5f, 0.5f, 0.0f, { 0.0f, 0.0f, 0.0f, 0.0f } }, 
     { 0.5f, 0.5f, 0.0f, { 0.0f, 0.0f, 0.0f, 0.0f } }, 
     { 0.5f, -0.5f, 0.0f, { 0.0f, 0.0f, 0.0f, 0.0f } }, 
     { 0.5f, -0.5f, 0.0f, { 0.0f, 0.0f, 0.0f, 0.0f } }, 
     { -0.5f, -0.5f, 0.0f, { 0.0f, 0.0f, 0.0f, 0.0f } }, 
     { -0.5f, 0.5f, 0.0f, { 0.0f, 0.0f, 0.0f, 0.0f } } 
    }; 

,然後檢查自定義頂點是否已輸入,如果是,則使頂點數組成爲輸入數組。

是否有複製數組功能?
如果不是我如何清除數組(將清除現有的默認頂點,因爲如果輸入的頂點小於默認值,我將會有額外的頂點,這會對渲染不利)

+1

std :: vector有什麼問題嗎? – derpface

+0

@uberwulu它不包含顏色數據(除非它是?),這在渲染某些內容時很重要。 –

+1

std :: vectors是模板化的。他們可以保存您創建的任何頂點結構,無論您的vert是否包含顏色數據。它也有一個清晰的()函數。 – derpface

回答

3

我不是100%確定你要存儲在你的數組中的數據,但這裏是我如何在我製作的遊戲中存儲頂點數據的簡單示例。

struct Vertex 
{ 
    vec3 pos; 
    vec3 nrm; 
    vec2 uvs; // Can replace this with D3DCOLOR for example if you want colors instead of texture samples. 
}; 

將它們存儲在一個std ::載體,創建載體:

std::vector<Vertex> myVerts; 

要綠黨添加到載體:

Vertex vert; 
myVerts.push_back(vert); 

要清除載體:

myVerts.clear(); 

從Vertex對象數組中複製s到一個載體(分配矢量數組):

// assuming: Vertex otherVerts[] = { ... }; 
myVerts.assign(otherVerts,otherVerts+otherSize); 

如果你只是想新的綠黨陣列添加到現有的矢量:

// assuming: Vertex otherVerts[] = { ... }; 
myVerts.insert(myVerts.end(),otherVerts,otherVerts+size); 

從綠黨的另一個向量複製到該一個(分配此一個到另一個):

// assuming: std::vector<Vertex> otherVerts(...); 
myVerts = otherVerts; 

爲了綠黨的另一向量添加到該一個:

// assuming: std::vector<Vertex> otherVerts(...); 
myVerts.insert(myVerts.end(),otherVerts.begin(),otherVerts.end()); 

如果你絕對堅持使用你自己的數組而不是STL中可用的數組,那麼你最終需要在你自己的動態數組類中模仿這些相同的函數。如果你的數組不需要是動態的(它是一個在編譯時已知的固定大小),那麼你不一定需要在一個類中封裝功能(儘管它可以用std :: array完成),但使用具有自定義構造函數的自定義頂點結構比將手寫每個元素作爲一個漫長而難以讀取一系列浮動元素更容易。

+0

我不知道這可以做到這一點。謝謝 –