目前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