グラフィックリソース/オブジェクトをどのように整理するかについて質問があります。私はAssImpを使って3D Studioからシーンをインポートしています。現時点では私はAssImp構造体を自分で処理していますので、AssImpよりも素早くディスクへのストリームとディスクからのストリームが可能です。とにかく、私はシーンの素材も処理しています。これは、私に最良の処理方法がわからない選択肢を与えてくれます。配列内の各スロットに、3Dリソースを管理する(具体的にはサンプラー)
材質
は、周囲、拡散色、鏡面パワーのようなものが含まれていますというように、また、マップの配列が含まれています
私は、材料のための以下のクラスを持っています(すなわち、スロット0は常に周囲の地図であり、スロット1は拡散し、スロット2は光沢などである)。
地図
例えばラップモードおよびテクスチャオブジェクトへのポインタのようなパラメータを持つマップのインスタンス。
テクスチャ
OpenGLのテクスチャマップ。
サンプラーは
OpenGLのサンプラーオブジェクト。
ここで、材料の任意のマップのサンプラーの設定をどのように処理するのかなんて思っています。技術的には、各マップは異なるサンプラーパラメータを持つことができます。例えば、サンプラは、UVラップモード、最小および最大フィルタおよび異方性を有することができる。これらのパラメータの一部はシーン(ラップモード)で定義され、その他はエンジンパラメータ(フィルタリング、異方性)として定義されます。
私が考えているのは、マップごとに1つのサンプラーオブジェクトを作成することです(テクスチャごとではなく、マップがテクスチャを指すことを忘れないでください)。次に、マップXを持つ素材を持つオブジェクトをレンダリングすると、マップXのサンプラーで自動的にそのチャンネルにバインドされます。可能であれば何千もの地図がありますので、それに対応する何千ものサンプラーが良いアイデアかどうか疑問に思っています。
サンプラーをリソースディクショナリに追加して、同じパラメータを持つマップで共有できるようにするもう1つの方法です。
誰もこのようなことを最善に管理する方法についての意見はありますか?
「テクスチャマップ」内の単語「マップ」は、テクスチャの表面への*マッピング*を指していることに注意してください。つまり、テクスチャ座標(静的であるか動的に生成されたかにかかわらず)。 「テクスチャマップ」という用語は誤った名称です。そのような動物はありません。だからそれを「マップ」と呼ぶのは間違っています。 –
それは奇妙です。テクスチャはビットマップなので、テクスチャマップと呼ぶのが理にかなっています。その名前を* texture * :-)に変更します。 – Robinson