2012-06-21 49 views
1

我在C++中創建的交錯頂點數組:glNormalPointer與交織排列緩衝器

struct vertex 
{ 
    GLfloat position[3]; 
    GLbyte normal[3]; 
}; 
std::vector<vertex> vertices; 
// fill in vertices... 

我陣列複製到GL緩衝液:

GLuint vertsBuffer; 
glBindBuffer (GL_ARRAY_BUFFER, vertsBuffer); 
glBufferData (GL_ARRAY_BUFFER, vertices.size() * sizeof (vertex), vertices.data(), GL_STATIC_DRAW); 

是否有可能使用glNormalPointer與像交織數據這個,例如?

glBindBuffer (GL_ARRAY_BUFFER, vertsBuffer); 
glEnableClientState (GL_NORMAL_ARRAY); 
glNormalPointer (GL_BYTE, sizeof (vertex), (GLvoid*) offsetof (vertex, normal)); 

還是我必須使用glVertexAttribPointer呢?

回答

1

如果您使用傳統gl_NormalGLSL built-in (Section 7.3, page 49),那應該可以正常工作。

glVertexAttribPointer()雖然更向前兼容。

+1

如果你有一個VBO綁定,它將指針的值解釋爲一個偏移量:**「如果一個非零的已命名緩衝區對象綁定到GL_ARRAY_BUFFER目標(參見glBindBuffer),而指定了一個頂點數組,指針是將緩衝區對象綁定(GL_ARRAY_BUFFER_BINDING)保存爲頂點數組客戶端狀態(GL_VERTEX_ARRAY_BUFFER_BINDING)。「** – genpfault

+1

這是** Description **塊的第二段,方式。 – genpfault

+0

是的,我想我應該刪除這個問題。抱歉! – atb