2016-06-20 1 views
1

OpenGL에서 렌더링 할 자체 정점, 색상 및 인덱스를 만들었습니다. 다음은 정점, 색상 및 인덱스를 렌더링하는 소스 코드입니다.OpenGL 정점 및 웨이브 프런트 obj에 대한 인덱스

//CODES TO SET VBO.... 
void displayCallback() {  
    glVertexPointer(...); 
    glColorPointer(...); 
    glDrawElemnts(GL_TRIANGLE_STRIP,...); 
} 

인덱스에서 볼 수 있듯이 인덱스는 GL_TRIANGLE_STRIP으로 빌드되어 렌더링됩니다. 렌더링 후에는 정점, 인덱스 및 색상 데이터가있는 wavefront 객체 파일을 저장하려고합니다.

.obj 파일이 거짓말을하도록 만들려고했습니다.

for(int i = 0; i < vertexSize; ++i) { 
    fprintf(fp, "v %f %f %f\n", vertices[i*3], vertices[i*3+1], vertices[i*3+2]); 
} 

fprintf("fp, "s 1\n"); 

for(int i = 0; i < indexSize; ++i) { 
    fprintf(fp, "f %d %d %d\n", indices[i*3], indices[i*3+1], indices[i*3+2]); 
} 

나는 다시 개방하는 뷰어를 assimp 사용하여, (http://www.assimp.org/을)은로드하지 못했습니다 시도했습니다. 내가 빠진 것이 있습니까?

감사합니다.

답변

2

간단한 샘플 obj 파일 (큐브와 같은 코드)을 추가하여 파일에있는 내용을 확인할 수 있도록하십시오. 내가 그 무슨 뜻 보는 것은 좀 봐 :

내 건 당신 잘못 지수를 가지고 있다는 것입니다.

  1. GL_TRIANGLE_STRIP3

    OpenGL doc 따르면 n 길이의 정점 스트림으로 GL_TRIANGLE_STRIPn-2 삼각형을 생성하지 삼각형 당 1 정점을 갖는다.

  2. 파면 OBJ 파일 인덱스는 그래서 당신은 0에서 가장 가능성이 인덱싱 그래서 ... 그 확인하고 그에 따라 +1 여부를 사용하여 1

    에서 시작하고있다.

나는 당신의 데이터 구조 아키텍처/토폴로지를 모르지만 퍼트 # 1, # 2 (나는 당신의 배열/테이블과 모델을 가지고 있지 않기 때문에 테스트하지) 내 생각에 당신의 얼굴은 다음과 같이 저장해야 함께 :

fprintf(fp, "f %d %d %d\n", indices[0]+1, indices[1]+1, indices[2]+1); 
for(int i = 3; i < indexSize; i++) 
fprintf(fp, "f %d %d %d\n", indices[i-2]+1, indices[i-1]+1, indices[i]+1); 

컬러 데이터이 파면 OBJ를 들어

미안 그 익숙하지 오전 (별도의 파일 MTL에서 STL을 소재 확장을 사용하고 있습니다 ...)하지만 요즘 3D 스캐너 (일부 시청자 지원)가 다음과 같이 이루어집니다 OBJ 파일 내부에 직접 문서화되지 않은 컬러 인코딩을 사용하고 있습니다 : 정점이있는 경우

v -5.231932 438.659877 -432.038039 0.000000 1.000000 0.000000 

그래서 6 처음 3x,y,z하고 마지막 3 그렇게 r,g,b이다 좌표 붉은 색 링크 대답에서 큐브가 될 것입니다

v -1.0 -1.0 -1.0 1 0 0 
v +1.0 -1.0 -1.0 1 0 0 
v +1.0 +1.0 -1.0 1 0 0 
v -1.0 +1.0 -1.0 1 0 0 
v -1.0 -1.0 +1.0 1 0 0 
v +1.0 -1.0 +1.0 1 0 0 
v +1.0 +1.0 +1.0 1 0 0 
v -1.0 +1.0 +1.0 1 0 0 

f 1 2 3 4 
f 5 6 7 8 
f 1 2 6 5 
f 2 3 7 6 
f 3 4 8 7 
f 4 1 5 8 

당신은 내가 그들이 같은 내용을 저장할 수 어디에서 일부 저렴한 비용으로 3D 스캐너 응용 프로그램에서 본 ... 그것은 같은 인코딩을 지원하고 있는지 확인하기 위해 뷰어에서 시도 할 수 있습니다 파일을 다시로드 한 후 색상을 렌더링 할 수 없으므로 ...

+0

잘못된 인덱싱으로 인해 문제가 발생했습니다. 이제 해결되었습니다. 고맙습니다! –