OpenGL Index Buffers: Addressing Disparate Indices
When importing custom mesh data from third-party software like 3ds Max, you may encounter discrepancies between vertex and normal indices. Since OpenGL utilizes a single index buffer for both vertices and normals, this poses a challenge.
Solution 1: Combine Vertex and Normal Data
One approach is to create a combined vertex buffer that contains both vertex and normal data. This requires identifying unique (vertex index, normal index) pairs and creating a new vertex for each pair.
Using STL maps, create a key for each (vertex index, normal index) pair. Iterate over the triangles, retrieve the (vertex index, normal index) pairs at each corner, and check if there's an existing entry in the map. If not, create a new vertex with the corresponding vertex and normal coordinates in the combinedVertices array and update the map. Finally, add the combined index for each vertex to the combinedIndices array.
Sample Pseudo Code:
nextCombinedIdx = 0 indexMap = empty for triangle in input file: for corner in triangle: vertexIdx = ... normalIdx = ... if key(vertexIdx, normalIdx) in indexMap: combinedIdx = indexMap[key(vertexIdx, normalIdx)] else: combinedIdx = nextCombinedIdx indexMap[key(vertexIdx, normalIdx)] = combinedIdx nextCombinedIdx = nextCombinedIdx + 1 combinedVertices[combinedIdx] = inVertices[vertexIdx], inNormals[normalIdx] combinedIndices[combinedIdx] = combinedIdx
Solution 2: Sorting Data
Alternatively, you could sort the vertex/normal data to make it compatible with glDrawArrays. However, this can be problematic if you have duplicate vertices.
You would need to create a mapping from the original vertex indices to their new sorted indices. When encountering a duplicate vertex, assign it the index of its previously seen counterpart. However, this approach may require extensive data processing and restructuring.
The above is the detailed content of How to Handle Mismatched Vertex and Normal Indices in OpenGL Index Buffers?. For more information, please follow other related articles on the PHP Chinese website!