繁体   English   中英

OpenGL ES2网格打破了超过256个顶点

[英]OpenGL ES2 Mesh breaks with more than 256 vertices

我正在尝试在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]; 

任何见解将不胜感激。

我找到了解决方案!

我正在使用GLubyte类型存储索引。 此类型最多只能存储256个整数,然后将其重置为零。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM