2013-10-17 39 views
0

我在我的OpenGL ES應用中的以下頂點結構:正在初始化一個C結構陣列 - 目標C - OpenGLES

typedef struct Vertex { 
float Position[3]; 
float Color[4]; 
} Vertex; 

以我頭我然後聲明:

Vertex *Vertices; 

然後在我的初始化方法:

int array = 4; 
Vertices = (Vertex *)malloc(array * sizeof(Vertex)); 

我再後來設置所述網狀如下,其中頂點陣列在這種情況下具有4個頂點:

- (void)setupMesh { 
int count = 0; 

for (VerticeObject * object in verticesArray) { 

    Vertices[count].Position[0] = object.x; 
    Vertices[count].Position[1] = object.y; 
    Vertices[count].Position[2] = object.z; 

    Vertices[count].Color[0] = 0.9f; 
    Vertices[count].Color[1] = 0.9f; 
    Vertices[count].Color[2] = 0.9f; 
    Vertices[count].Color[3] = 1.0f; 

    count ++; 
    } 
} 

任何人都可以發現我在這裏做錯了嗎?當我通過這個頂點對象的OpenGL什麼也不繪製,而如果我硬編碼的頂點數組:

Vertex Vertices [] = { 
{{0.0, 0.0, 0}, {0.9, 0.9, 0.9, 1}}, 
{{0.0 , 0.0 , 0}, {0.9, 0.9, 0.9, 1}}, 
{{0.0, 0.0, 0}, {0.9, 0.9, 0.9, 1}}, 
{{0.0, 0.0, 0}, {0.9, 0.9, 0.9, 1}}, 
}; 

一切正常?

+0

當您在初始化後檢查調試器中的第一個數組時,它看起來像您期望的那樣嗎? (即,它看起來與第二種情況相同嗎?) –

+0

另外,你如何初始化verticesArray? – micantox

+0

本 - 是的 - 數組看起來不錯。 – GuybrushThreepwood

回答

1

我認爲問題是,在堆棧中分配一個數組之前,現在你有一個指針(內存地址)指向堆上的一塊內存。所以當你像sizeof(Vertices)這樣的東西你的原始sizeof(Vertices)將導致4個頂點,每個頂點有3個浮點位置和4個浮點顏色 - > 4 *(3 + 4)* 4(float = 4個字節)= 112個字節。其中sizeof(aPointer) = 4個字節。 OpenGL是一個C庫,並不是一件容易的工作,所以你應該在試圖讓它運行之前真正地學習C語言技能。現在還有一個GLKView課程,可以讓所有的設置更容易。

glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_STATIC_DRAW); 

嘗試分配與頂點數組相同的大小。在你的情況4 * sizeof(頂點)。

glBufferData(GL_ARRAY_BUFFER, sizeof(Vertex) * 4, Vertices, GL_STATIC_DRAW); 

如果不工作,你可以輕鬆地修復更換您的動態分配的數組的一個靜態分配的,因爲你知道在編譯的時候,它需要有多大是問題。

Vertex Vertices[4]; 

然後像你一樣設置循環中的值。