3DGL 파일을 OpenGL 프로그램에로드하고 약간의 문제가 발생했습니다. 모든 꼭지점이 올바르게 배치되고면이 그려지지만 문제는 대부분의 (또는 모든) 꼭지점이 하나 또는 두 개의 꼭지점에 대한 연결을 유지하는 것처럼 보이므로 많은 수의 여분의 모서리가 만들어집니다. 이전에이 문제를 겪은 사람이나 해결 방법에 대한 의견이 있으십니까?어떻게하면 제대로 3ds 파일에서 얼굴을 렌더링 할 수 있습니까?
다음 코드 블록은 내가 얼굴을 그리는 데 사용하는 루프입니다. 한 번에 하나의 꼭지점을 반복하며, 사용되지 않은면 수정 자이므로 매 4 번째 값 (이론상)을 건너 뜁니다.
glBegin(GL_TRIANGLES);
for(int x = 1; x < 4*numberOfTriangles+1; x++)
{
//Face bit modifiers not needed, skip em.
if(tLoop == 4)
{
tLoop = 0;
continue;
}
else
{
glVertex3f(Vertices[Triangles[x]*3],Vertices[(Triangles[x]*3)+1],Vertices[(Triangles[x]*3)+2]);
tLoop++;
}
}
glEnd();
다음은 내가 가진 문제를 나타내는 이미지입니다. http://img.photobucket.com/albums/v298/Reaperc89/Pistol.jpg
이것은 3ds 파일의 메쉬 데이터를 정확히 모른 채로는 문제를 해결하기 어렵습니다. 메쉬가 인덱스 된 삼각형 (즉, 인덱스 세트 (3 개의 인덱스 세트 각각이 3 개의 버텍스를 참조)과 정점 세트)로 저장 될 수 있습니다. – axon
3ds 파일 메쉬 데이터는 정점을 차례로 저장하는 반면면 데이터는 정점을 나타내는 3 개의 인덱스로 저장됩니다. 예를 들어 입방체의 경우,면 1의 세 인덱스는 4, 0 및 7 일 수 있습니다. 이는 정점 목록의 5, 1 및 8 번째 정점과 관련이 있습니다. 얼굴 데이터의 일부이기도 한 네 번째 값이 있지만 지오메트리를 구성하는 데 필요하지 않은면의 비트 플래그 수정 자입니다. – Evan
왜'x = 0' 대신에'x = 1'로 시작 했습니까? 만약 당신이 원하지 않는 값을 읽지 않거나 (즉 반복을 반복 할 수 있도록 루프를 풀어 놓기를 권장하지만) 별도의 변수를 가지기보다는'if (x % 4 == 3) 하나의 삼각형을 그립니다. – user786653