目前IM,而是等同于具有模型在照明方面看起来圆润,这是不理想的,因为我的模型意味着有锋利的边缘。周围的Googling让我发现,它似乎并不可能在OpenGL-ES 2.0的使用表面法线,但另一种技术是使用每个顶点的多个顶点的法线,如果你是使用表面法线采取行动。是可以使用一个每个顶点正常的我的模型让每个顶点的多条法线在OpenGL-ES 2.0
这意味着,对于普通数组和顶点数组,索引缓冲区需要不同,因为例如一个立方体将有8个顶点,但每个顶点需要3个法线才能像表面法线一样工作(一个用于如果模型是三角形的,则立方体的每个连接面可能需要更多)。所以顶点的索引数组为8,法线的索引数组为8x3 = 24。
没有人知道如何去这样做呢?
此刻我的代码看起来像这样
glGenVertexArraysOES(1, &_vertexArray);
glBindVertexArrayOES(_vertexArray);
glGenBuffers(1, &_indexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _indexBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, numIndices*sizeof(GLubyte), indices, GL_STATIC_DRAW);
glGenBuffers(1, &_vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, numVertices*sizeof(GLfloat), vertices, GL_STATIC_DRAW);
glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 0, 0);
glGenBuffers(1, &_normalBuffer);
glBindBuffer(GL_ARRAY_BUFFER, _normalBuffer);
glBufferData(GL_ARRAY_BUFFER, numNormals*sizeof(GLfloat), normals, GL_STATIC_DRAW);
glEnableVertexAttribArray(GLKVertexAttribNormal);
glVertexAttribPointer(GLKVertexAttribNormal, 3, GL_FLOAT, GL_FALSE, 0, 0);
好的建议一直没有顶点分享我的模型,它应该工作,虽然是有点扯淡办法做到这一点,如果你的模型是非常大的,但我有至多20个顶点,所以它不应该是太糟了。如果我得到它的工作,并没有人发布了答案生病写作答案 – Fonix 2012-07-09 15:51:06