(我决定尝试以不同的方式提出这个问题,以可能推进如何做到这一点)
仅使用清单 9-4 作为 Apples iOS OpenGL ES 指南、“OpenGL ES Programming Guide for iOS”的“使用顶点数据的最佳实践”的基础
我想基本上“添加”位置日期到这个缓冲区。(可以以某种方式完成吗?)
然后在使用 glDrawElements 时调用哪个标识符...
有没有办法做到这一点?显示的是我想要提供视觉效果的示例。
typedef struct VertexData3D
{
GLfloat position[3];
GLfloat normal[3];
} VertexData3D;
GLuint test1Buffer;
GLuint test2Buffer;
GLuint index1Buffer;
GLuint index2Buffer;
const VertexData3D test1Buffer[] = {...};
const VertexData3D test2Buffer[] = {...};
const GLushort indices1[] = {...};
const GLushort indices2[] = {...};
void CreateBuffers()
{
// Static position data
glGenBuffers(1, &test1Buffer);
glBindBuffer(GL_ARRAY_BUFFER, test1Buffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(test1VertexData), test1VertexData, GL_STATIC_DRAW);
glGenBuffers(1, &test2Buffer);
glBindBuffer(GL_ARRAY_BUFFER, test2Buffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(test2VertexData), test2VertexData, GL_STATIC_DRAW);
// Static index data
glGenBuffers(1, &index1Buffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, index1Buffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices1), indices1, GL_STATIC_DRAW);
glGenBuffers(1, &index2Buffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, index2Buffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices2), indices2, GL_STATIC_DRAW);
glVertexPointer(3, GL_FLOAT, sizeof(VertexData3D), (void*)0);
glNormalPointer(GL_FLOAT, sizeof(VertexData3D), (void*)12);
}
// sometimes in the model, draw out this test1model.
void DrawModelusingTest1()
{
glBindBuffer(GL_ARRAY_BUFFER, test1VertexData);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, index1Buffer);
glDrawElements(GL_TRIANGLES, theNumberInIndex1, GL_UNSIGNED_SHORT, (void*)0);
}
// sometimes in the model, draw out this test2model.
void DrawModelusingTest2()
{
glBindBuffer(GL_ARRAY_BUFFER, test2VertexData);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, index2Buffer);
glDrawElements(GL_TRIANGLES, theNumberInIndex2, GL_UNSIGNED_SHORT, (void*)0);
}