我正在尝试使用iPhone上的OpenGL ES2从三角形元素中创建网格。工作正常,直到顶点数超过256.超过这个数字,三角形到处都是。
当我创建一个网格时 - 4x64一切都很好。
当我创建网格时 - 8x64,上半部分缺失。就像只有256字节的空间一样,所以数组的后半部分会覆盖前半部分。
这是我用来设置顶点缓冲区的代码:
// Grid size
NSInteger gridX = 4;
NSInteger gridY = 64;
_vertexSize = gridX * gridY * sizeof(BVertex);
_vertexData = (BVertex *) malloc(_vertexSize);
// The number of triangles (t) is: 2 * (gridSize - 1)^2
// The number of points (p) is 3 * t
_indexSize = 2 * 3 * (gridX - 1) * (gridY - 1);
_indexData = (GLubyte *) malloc(_indexSize);
// Code to add data to the arrays. I know this is working and
// it's long and boilerplate so I'm not including it
GLuint vertexBuffer;
glGenBuffers(1, &vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, _vertexSize, _vertexData, GL_STATIC_DRAW);
GLuint indexBuffer;
glGenBuffers(1, &indexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, _indexSize, _indexData, GL_STATIC_DRAW);
这是要渲染的代码:
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, _imageTexture);
glUniform1i(_textureUniform, 0);
// Draw the elements
glDrawElements(GL_TRIANGLES, _indexSize/sizeof(_indexData[0]), GL_UNSIGNED_BYTE, 0);
// Present our render buffer
[self.context presentRenderbuffer:GL_RENDERBUFFER];
任何见解都将不胜感激。
答案 0 :(得分:3)
我找到了解决方案!
我使用GLubyte类型来存储索引。此类型只能存储最多256个整数,然后重置为零。