2012-06-21 3 views
1

создать перемежающуюся массив вершин в C++:glNormalPointer буфером чередованием массива

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

скопировать массив в буфер г л:

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) сохраняется как состояние вершины arrayclient-side (GL_VERTEX_ARRAY_BUFFER_BINDING). "** – genpfault

+1

Это второй абзац блока ** Описание ** по путь. – genpfault

+0

Да, я думаю, я должен удалить этот вопрос. Прости! – atb

Смежные вопросы