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か?

その通りですか?それとも、いくつかの大きな欠点がありますか?

4

1 に答える 1

1

インターフェイスIModelを宣言し、WavefrontModelなどの別のモデルに実装することをお勧めします。

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

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

ここに例があります: http ://code.google.com/p/gstmultimedialib/source/browse/#svn%2Ftrunk%2Fgstmultimedialib%2FGLEngine%2FGLEngine%2FModel

必要に応じて、このプロジェクトからglEngineモジュールを入手できます。

その後、モデルのリストを含むシーンまたはデバイスを実装します。

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

public:
 bool drawScene(); //iterate all of your models and call the draw method here.
};
于 2012-04-24T18:42:01.780 に答える