2010-01-23 2 views
1

C++에서 opengl 프로젝트를 작성 중입니다. .model 파일에서 기능을 입력하려면 로더를 작성해야합니다. 그것은 fstream 처리 할 수없는 것 같습니다. 모든 의견이나 조언? 감사.C++에서 .model 파일로드

+2

'.model' 파일 포맷에 대해 더 많은 정보를 제공 할 수 있습니까? 왜'fstream'이 그것을 처리 할 수 ​​없다고 생각합니까? – dvide

+0

너무 자주, 간단하고 최소한의 테스트 케이스로 마무리하여 문제를 보여 주면 도움이 될 것입니다. –

답변

4

아마도 fstream을 잘못 사용했을 것입니다. 텍스트 모드로 열면 변환 프로세스가 엉망이되는 변환이 발생합니다. 파일을 바이너리로 열어야합니다.

std::ifstream file("something.model", std::ios::binary); 

그런 다음 원시 데이터를 읽을 수 있습니다

당신이 필요하지만
// read in float 
float f; 
file.read(&f, sizeof(f)); 

. int 또는 char과 같은 유형은 반드시 올바른 비트 폭이 아닐 수 있습니다. 확실하게 알고 싶다면 고정 폭 정수가 필요합니다. 부스트는 such a library을 제공합니다.

#include <boost/cstdint.hpp> 

// ... 
// read a 32-bit int 
boost::uint32_t i; 
file.read(&i, sizeof(i)); 
+0

한숨 ... 사실, 나는 과기 때문에 깃발을 놓는 것을 잊었다. 죄송합니다. fstream이 상황을 잘 처리하고있는 것 같습니다. 고마워. –

+1

@small_potato : 문제 없습니다. 해결책으로 답변을 게시하고 동의하면 질문이 완료됩니다. – GManNickG

1

.model 파일의 데이터는 모델의 각 다각형 좌표를 설명하는 숫자 일 가능성이 큽니다. 다른 종류의 파일에서 데이터를 읽는 것처럼 논문 번호를 읽고 OpenGL 프리미티브를 사용하여 모델의 폴리곤을 그려야합니다.

문제는 다음과 같습니다. 숫자가있는 다각형을 여러 가지로 표현할 수 있으므로, .model 파일의 구조를 모르는 경우에는 .model 파일이 거의 쓸모가 없습니다.