OBJ는 OpenGL과 완전히 관련이없는 파일 형식이기 때문에.
OBJ 파일의 얼굴 명령문은 3 또는 4뿐만 아니라 모든 개수의 정점을 포함 할 수 있습니다. 4 이상을 포함하는 것은 드문 일이 아닙니다. 따라서 합리적인 다양한 OBJ 파일을 읽고 싶다면, 당신은 얼굴 당 정점의 개수를 읽을 준비가 필요합니다.
이것은 실제로 많은 어려움을 추가하지 않습니다. 알고리즘을 사용하여 연결을 분석하고 메쉬를 작성하지 않는 한 얼굴 당 정점이 3 개인 파일의 경우에도 얼굴 진술마다 별도의 삼각형이 표시됩니다. 따라서이 경우 얼굴 당 하나의 삼각형을 만들고 기본 유형 GL_TRIANGLES
으로 그립니다.
얼굴 당 3 개 이상의 꼭지점이 변경되면 얼굴 당 여러 개의 삼각형이 생성됩니다. n
개의 꼭지점이있는 얼굴에는 n - 2
개의 삼각형이 필요합니다. 이 질문에 대한 내 대답은 어떻게 수행되는지 자세히 설명합니다 : Converting quadriladerals in an OBJ file into triangles?.
또 다른 옵션은 각 얼굴을 삼각형 팬으로 처리하고 GL_TRIANGLE_FAN
프리미티브 유형으로 렌더링하는 것입니다. 볼록 다각형 (파일 안의면이 볼록하지 않은 다각형 인 경우 분해 될 수 있음)은 정점을 원래 순서대로 정확하게 유지하면서 항상 삼각형 팬으로 그릴 수 있습니다. 별도의 삼각형 팬 등의 각면을 치료하려면, 같은 호출을 사용하여 OpenGL을 3.1부터 사용할 수있다 원시적 재시작 기능을 사용할 수 있습니다 :
glEnable(GL_PRIMITIVE_RESTART);
glPrimitiveRestartIndex(...);
그것은 OBJ는 OpenGL은 렌더링을 대상으로되지 않는다는 것을 알 쉽습니다. OpenGL은 모든 정점 속성에 사용되는 단일 색인 세트 만 지원하는 반면 OBJ는 위치, 법선 및 텍스처 좌표에 대해 별도의 색인을 사용한다는 점이 훨씬 귀찮은 측면입니다. 이것은 파서를 작성하는 사람들에게 훨씬 더 어려움을 초래하는 경향이 있습니다. 예를 들어 여기를 참조하십시오 : OpenGL - Index buffers difficulties.
다른 3D 렌더링 API는 삼각형으로 제한되지 않으므로 첫 번째 부분에 응답하십시오. 예를 들어, Pixar RenderMan의 기본 렌더링 프리미티브는 쿼드가 하위 집합 인 4 개의 정점 "마이크로 다각형"(쌍 선형 패치)입니다. 영화/TV CGI를하는 사람은 삼각형이 아닌 쿼드를 원할 것입니다. –
. 코멘트 주셔서 감사합니다! – Windforces