glDrawElements显示问题
我想用openGL ES 2中的纹理绘制对象(立方体),但得到了奇怪的结果(就像我)。
Obj,我想绘制 – 从FBX文件中提取,并有数据(也可以提取Normals,但我不使用它们,所以只是跳过):
----Indices----24 0 1 2 3 4 7 6 5 0 4 5 1 1 5 6 2 2 6 7 3 4 0 3 7 ----Coordinates(Vertises)----72 1 1 -1 1 -1 -1 -1 -1 -1 -1 1 -1 1 0.999999 1 -1 1 1 -1 -1 1 0.999999 -1 1 1 1 -1 1 0.999999 1 0.999999 -1 1 1 -1 -1 1 -1 -1 0.999999 -1 1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 1 1 -1 1 -1 1 0.999999 1 1 1 -1 -1 1 -1 -1 1 1 ----Texture UV----48 0.499999 9.7692e-05 0.499999 0.333364 0.250049 0.333364 0.250049 9.78112e-05 0.250049 0.666633 0.499999 0.666633 0.499999 0.9999 0.250049 0.9999 0.74995 0.333366 0.74995 0.666633 0.5 0.666633 0.5 0.333367 0.499998 0.333366 0.499998 0.666632 0.250048 0.666633 0.250048 0.333366 0.25005 0.333367 0.25005 0.666633 0.000100091 0.666633 0.000100024 0.333367 0.749953 0.666639 0.749953 0.333373 0.999903 0.333373 0.999903 0.666639
所以我打破缓冲区:
- (void)bindBuffer { glGenVertexArraysOES(1, &_vertextArray); glBindVertexArrayOES(_vertextArray); //vertises glGenBuffers(1, &_vertexBuffer); glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer); glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * _drawModel.numberOfVertices, _drawModel.vertices, GL_STATIC_DRAW); glEnableVertexAttribArray(GLKVertexAttribPosition); glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 3, NULL); //textures glGenBuffers(1, &_indexBuffer); glBindBuffer(GL_ARRAY_BUFFER, _indexBuffer); glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * _drawModel.numberOfTextCoords, _drawModel.texCoords, GL_STATIC_DRAW); glEnableVertexAttribArray(attributes[ATTRIBUTES_TEXTURE_COORDINATE]); glVertexAttribPointer(attributes[ATTRIBUTES_TEXTURE_COORDINATE], 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 2, NULL); //indises glGenBuffers(1, &_indisesBuffer); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _indisesBuffer); glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLuint) * _drawModel.numberOfIndises, _drawModel.indises, GL_STATIC_DRAW); glBindVertexArrayOES(0); }
并画出来
- (void)draw { glDisable(GL_DEPTH_TEST); glDepthMask(GL_FALSE); glDisable(GL_CULL_FACE); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glClearColor(0.65f, 0.65f, 0.65f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glUseProgram(_programm); glBindVertexArrayOES(_vertextArray); glUniformMatrix4fv(uniforms[UNIFORM_MODELVIEWPROJECTION_MATRIX], 1, 0, _mvpMatrix.m); glUniform1i(uniforms[UNIFORM_TEXTURE], 0); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, _texture.name); glDrawElements(GL_TRIANGLES, _drawModel.numberOfIndises, GL_UNSIGNED_INT, 0); }
结果我得到了下一个:
如果我使用GL_LINES
模式(仅供参考):
如果我使用GL_TRIANGLES
:
纹理(供参考)
所以看起来像gl machine
不会画一些额外的三angular形,但我为什么会发生这种情况,以及如何解决它…任何build议?
—-更新—–
问题是在不正确的指数索引和缺less部分,经过纠正我得到(感谢@ codetiger )
你有24个顶点,但是索引只指的是前7个顶点。 这意味着,指数是错的。
尝试按顺序喂食指数
0, 1, 2, 0, 2, 3, //front 4, 5, 6, 4, 6, 7, //right 8, 9, 10, 8, 10, 11, //back 12, 13, 14, 12, 14, 15, //left 16, 17, 18, 16, 18, 19, //upper 20, 21, 22, 20, 22, 23