【问题标题】:OpenGL ES2 Mesh breaks with more than 256 verticesOpenGL ES2 Mesh 中断超过 256 个顶点
【发布时间】:2014-02-04 16:22:38
【问题描述】:

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

任何见解将不胜感激。

【问题讨论】:

    标签: ios objective-c opengl-es


    【解决方案1】:

    我找到了解决办法!

    我使用 GLubyte 类型来存储索引。这种类型只能存储最多 256 个整数,然后它会重置为零。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-20
      • 1970-01-01
      • 1970-01-01
      • 2012-07-07
      • 2017-05-03
      • 2012-04-03
      • 1970-01-01
      相关资源
      最近更新 更多