2012-04-24 1 views
0

wavefront obj 파일에서 가져온 객체를 렌더링하려고합니다. 객체에는 여러 그룹과 재질이 있습니다.렌더링 할 객체를 구성하는 방법

# group one 
g one 
v ... 
vt ... 
vn ... 
# material A 
usemtl ... 
f ... 
# material B 
usemtl ... 
f .. 

# second group 
g two 
v ... 
vt ... 
vn ... 
# material C 
usemtl ... 
f ... 
# material D 
usemtl ... 
f ... 

모델의 각 부분은 재질이 다르기 때문에 별도로 렌더링해야합니다.

모델에 대한 정보가있는 컨테이너를 만들고 렌더링 할 객체의 "대기열"을 구성하는 가장 좋은 방법이나 일반적인 방법을 알고 싶습니다. 이 좋은 경우 모르겠어요

내 생각은, 인 (의사 포함) 다음 각 그룹 g 저장 객체 VertexInformation g1, g2과 얼굴에 대한 각 usemtl 정보를 저장에 대한 모든 정점 정보 (및 사용 재료)에 대한 FaceInformation f1, f2, f3, f4.

는 다음과 같이 보일 것이다 렌더링은 다음과 같습니다

load vertices g1 
render f1 f2 
load vertices g2 
render f3 f4 

아니면 더 나은 한 번에 g1g2에서 모든 정점을로드?

그런가요? 아니면 거대한 결점이 있습니까? 인터페이스의 IModel를 선언 등 WavefrontModel 같은 다른 모델을 구현하는 방법을 제안합니다

답변

1

나는 것 : http://code.google.com/p/gstmultimedialib/source/browse/#svn%2Ftrunk%2Fgstmultimedialib%2FGLEngine%2FGLEngine%2FModel

당신이 원하는 경우

class IModel{ 
public: 
virtual bool drawModel() =0; 
}; 

class WavefrontModel : public IModel{ 
public: 
    bool drawModel(); 
}; 

내가 여기 당신을 위해 예를 이 프로젝트에서 glEngine 모듈을 얻을 수 있습니다.

그런 다음 모델 목록이 포함 된 장면 또는 장치를 구현하십시오.

class Device{ 
private: 
std::list< IModel* > m_models; 

public: 
bool drawScene(); //iterate all of your models and call the draw method here. 
};