2012-03-28 10 views
0

グラフィックリソース/オブジェクトをどのように整理するかについて質問があります。私はAssImpを使って3D Studioからシーンをインポートしています。現時点では私はAssImp構造体を自分で処理していますので、AssImpよりも素早くディスクへのストリームとディスクからのストリームが可能です。とにかく、私はシーンの素材も処理しています。これは、私に最良の処理方法がわからない選択肢を与えてくれます。配列内の各スロットに、3Dリソースを管理する(具体的にはサンプラー)

材質

は、周囲、拡散色、鏡面パワーのようなものが含まれていますというように、また、マップの配列が含まれています

私は、材料のための以下のクラスを持っています(すなわち、スロット0は常に周囲の地図であり、スロット1は拡散し、スロット2は光沢などである)。

地図

例えばラップモードおよびテクスチャオブジェクトへのポインタのようなパラメータを持つマップのインスタンス。

テクスチャ

OpenGLのテクスチャマップ。

サンプラー

OpenGLのサンプラーオブジェクト。

ここで、材料の任意のマップのサンプラーの設定をどのように処理するのかなんて思っています。技術的には、各マップは異なるサンプラーパラメータを持つことができます。例えば、サンプラは、UVラップモード、最小および最大フィルタおよび異方性を有することができる。これらのパラメータの一部はシーン(ラップモード)で定義され、その他はエンジンパラメータ(フィルタリング、異方性)として定義されます。

私が考えているのは、マップごとに1つのサンプラーオブジェクトを作成することです(テクスチャごとではなく、マップがテクスチャを指すことを忘れないでください)。次に、マップXを持つ素材を持つオブジェクトをレンダリングすると、マップXのサンプラーで自動的にそのチャンネルにバインドされます。可能であれば何千もの地図がありますので、それに対応する何千ものサンプラーが良いアイデアかどうか疑問に思っています。

サンプラーをリソースディクショナリに追加して、同じパラメータを持つマップで共有できるようにするもう1つの方法です。

誰もこのようなことを最善に管理する方法についての意見はありますか?

+0

「テクスチャマップ」内の単語「マップ」は、テクスチャの表面への*マッピング*を指していることに注意してください。つまり、テクスチャ座標(静的であるか動的に生成されたかにかかわらず)。 「テクスチャマップ」という用語は誤った名称です。そのような動物はありません。だからそれを「マップ」と呼ぶのは間違っています。 –

+0

それは奇妙です。テクスチャはビットマップなので、テクスチャマップと呼ぶのが理にかなっています。その名前を* texture * :-)に変更します。 – Robinson

答えて

1

これは本当に難しい問題ではありません。

可能なサンプラーの数はいくつありますか?フィルタリングがグローバルコンセプトの場合、サンプラーの主な違いはラップモードです。ラッピング(S、T、R)の3つの次元と4つの可能なラッピング・タイプ(CLAMP_TO_EDGE、CLAMP_TO_BORDER、REPEAT、およびMIRROR_REPEAT)があります。これにより、あなたは正常なもののために使うことができる12のサンプラーを得ることができます。

CLAMP_TO_BORDERには境界線の色が必要なため、一意のサンプラーオブジェクトが必要です(多くのテクスチャが同じ境界線を共有している場合を除き、不合理ではありません)。また、深度比較サンプリングを行っている場合は、サンプラーオブジェクトがさらに必要になります。

サンプラーを求めることができるサンプラーオブジェクトマネージャーがあります。あなたはいくつかのパラメータを与え、サンプラーを逆流させます。それは存在するサンプラーか、あなたのためだけに作成されたサンプラーです。ユニークなもの(境界線の色)が必要な場合は、あなたに与えられたユニークなものを求めることができます。それ以外の場合、2人が同じサンプラーを要求すると、と同じサンプラーが得られます。

+0

賢明そうです。 – Robinson

関連する問題