OpenGL 인덱스 버퍼: 서로 다른 인덱스 처리
3ds Max와 같은 타사 소프트웨어에서 사용자 정의 메시 데이터를 가져올 때 정점 및 일반 인덱스. OpenGL은 정점과 법선 모두에 대해 단일 인덱스 버퍼를 사용하기 때문에 이는 문제가 됩니다.
해결책 1: 정점과 법선 데이터 결합
한 가지 접근 방식은 정점 데이터와 일반 데이터를 모두 포함하는 결합 정점 버퍼입니다. 이를 위해서는 고유한(정점 인덱스, 법선 인덱스) 쌍을 식별하고 각 쌍에 대해 새 정점을 생성해야 합니다.
STL 맵을 사용하여 각(정점 인덱스, 법선 인덱스) 쌍에 대한 키를 생성합니다. 삼각형을 반복하고 각 모서리에서 (정점 인덱스, 법선 인덱스) 쌍을 검색하고 지도에 기존 항목이 있는지 확인합니다. 그렇지 않은 경우 CombinedVertices 배열의 해당 꼭지점과 법선 좌표를 사용하여 새 꼭지점을 만들고 지도를 업데이트하세요. 마지막으로, CombinedIndices 배열에 각 정점에 대한 결합 인덱스를 추가하세요.
샘플 의사 코드:
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
해결책 2: 데이터 정렬
또는 정점/법선 데이터를 다음과 같이 정렬할 수도 있습니다. glDrawArrays와 호환되게 만드세요. 그러나 중복된 정점이 있는 경우 문제가 될 수 있습니다.
원래 정점 인덱스에서 새로 정렬된 인덱스로의 매핑을 생성해야 합니다. 중복된 정점을 발견하면 이전에 본 정점의 인덱스를 할당합니다. 그러나 이 접근 방식에는 광범위한 데이터 처리 및 재구성이 필요할 수 있습니다.
위 내용은 OpenGL 인덱스 버퍼에서 일치하지 않는 정점 및 일반 인덱스를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!