2013-10-23 27 views
0

我正在處理一個簡單的程序,其中我通過初始化每個在多維數據集的構造函數中攜帶XMFLOAT3和XMFLOAT2的VertexPos結構數組開始。然後,RenderCube函數讀取這些頂點並將立方體顯示在屏幕上。沒有正確初始化的結構的類數組

的RenderCube函數I內有工作完全正常,當我聲明(同一類型的)的陣列中的代碼如下所示:

VertexPos vertices[] = { 
      {XMFLOAT3(-1.0f, 1.0f, -1.0f), XMFLOAT2(0.0f, 0.0f)}, 
... 

問題是,當我試圖讀取從立方體的頂點[]對象,定義和下面(僅立方體的第一頂點下面爲了簡潔定義)初始化,我在調試器看到瘋狂的值看立方形>頂點時,如:

cube->vertices[0].pos.x=5.736e-039#DEN 

RenderCube():

bool Render::RenderCube(Cube* cube) 
{ 
... 
D3D11_SUBRESOURCE_DATA resourceData; 
    ZeroMemory(&resourceData, sizeof(resourceData)); 
    resourceData.pSysMem = cube->vertices; 
} 

Cube.h

struct VertexPos 
{ 
    XMFLOAT3 pos; 
    XMFLOAT2 tex0; 
    VertexPos(){} 
    VertexPos(XMFLOAT3 p, XMFLOAT2 t) 
    { 
     pos = p; 
     tex0 = t; 
    } 
}; 

class Cube 
{ 
    public: 
     Cube::Cube(LPCWSTR textureFileName); 
     VertexPos vertices[NUMBER_OF_VERTICES]; 
     LPCWSTR getTextureFileName(); 

    private: 
     LPCWSTR textureFileName; 
}; 

Cube.cpp:

Cube::Cube(LPCWSTR textureFileName) 
{ 
    //set texture 
    this->textureFileName = textureFileName; 
    vertices[0] = VertexPos(XMFLOAT3(-1.0f, 1.0f, -1.0f), XMFLOAT2(0.0f, 0.0f)); 

} 

LPCWSTR Cube::getTextureFileName(){ 
    return textureFileName; 
} 

我在做什麼錯?

+0

您初始化數組頂點[]一個接一個? – Matt

+0

不是我的實際代碼 - 這只是一個簡化的例子,說明了同樣的問題 – BearInATie

回答

1

您需要逐個初始化數組中的元素。例如:

VertexPos vertices[3] = {VertexPos(XMFLOAT3(-1.0f, 1.0f, -1.0f), XMFLOAT2(0.0f, 0.0f))} 

第一元件頂點[0]將被初始化爲VertexPos(XMFLOAT3(-1.0F,1.0F,-1.0F),XMFLOAT2(0.0F,0.0F)),但其它元件將使用默認構造函數進行初始化,因爲默認構造函數爲空,所以您會在結構中獲取垃圾內容。

+0

這似乎並沒有在這種情況下工作,我已經將我的代碼更改爲您在下面看到,並具有相同的結果: 結構VertexPos { \t XMFLOAT3 pos; \t XMFLOAT2 tex0; \t VertexPos(){ \t \t pos = XMFLOAT3(0.0f,0.0f,0.0f); \t \t tex0 = XMFLOAT2(0.0f,0.0f); \t} VertexPos(XMFLOAT3 P,XMFLOAT2噸) { \t \t POS = XMFLOAT3(p.x,p.y,p.z); tex0 = XMFLOAT2(t.x,t.y); } }; – BearInATie

1

我終於得到了它 - 僅使用一個參考來初始化我的立方體的載體,不是一個新的立方體