我在cocoa中编写了一个opengl程序,我在使用交错顶点数组进行渲染时遇到了问题。 Opengl使用NSOpenglview进行设置,特定渲染由单个对象完成。渲染使用静态“立方体”对象,其设置类似于以下代码,但不使用索引绘图或iva。
我的初始化代码
node = [[Octnode alloc]initWithTreeHeight:0 nodeSize:1.0 orign:&origin memoryPointer:vertexData];
indexArray[0] = 0;
indexArray[1] = 1;
indexArray[2] = 2;
glGenBuffers(1, &vertexBufferObject);
glBindBuffer(GL_ARRAY_BUFFER, vertexBufferObject);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), vertexData, GL_DYNAMIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glGenBuffers(1, &indexBufferObject);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBufferObject);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 36 * sizeof(unsigned int), indexArray, GL_DYNAMIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glGenVertexArraysAPPLE(1, &vertexArrayObject);
glBindVertexArrayAPPLE(vertexArrayObject);
glBindBuffer(GL_ARRAY_BUFFER, vertexBufferObject);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glEnableVertexAttribArray(2);
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, sizeof(colouredNormalVertex), 0);
glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, sizeof(colouredNormalVertex), (void*)sizeof(vertex));
glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, sizeof(colouredNormalVertex), (void *) ( sizeof(vertex) + sizeof(colour)));
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBufferObject);
glBindVertexArrayAPPLE(0);
渲染代码 glBindVertexArrayAPPLE(vertexArrayObject); glDrawElements(GL_LINES,3,GL_UNSIGNED_INT,0); glBindVertexArrayAPPLE(0);
添加数组的数据是在octnode init中配置的,并且使用bebugger进行检查可以显示我的期望。
答案 0 :(得分:0)
为缓冲区提供数据时,不是传入数据的大小,而是传递了指针的大小
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), vertexData, GL_DYNAMIC_DRAW);
应至少
glBufferData(GL_ARRAY_BUFFER, sizeof(voxelData), vertexData, GL_DYNAMIC_DRAW);