XNAプログラミングを始めたばかりで、「。x」モデルからテクスチャにアクセスする方法を理解できませんでした。カスタムシェーダーを使用して、フィルターがポイントに設定されたモデル(テクスチャがマップされた立方体のみ)を表示しています。これを行うには、モデルとは別にインポートする必要のあるテクスチャファイルのエフェクトを渡す必要がありました。そうしないと、モデルにも含まれているため、文句を言います。これは私が望むように完全に機能しますが、独自のテクスチャを持つ多くの異なるモデルがある場合、これは実際には適切な方法ではありません。
私の質問は:
モデルに含まれているテクスチャにモデルから直接アクセスして、シェーダーに送信するにはどうすればよいですか?または、HLSLを使用して直接アクセスできますか?
私が試したこと:
私はそれがテクスチャ変数に割り当てることができると言っている投稿を見つけました:
Texture2d texture = ((BasicEffect)model.Meshes[0].Effects[0]).Texture
これを試したところ、ゲームは実行されましたが、立方体は真っ黒です。テクスチャ変数が情報を保持していて正しいサイズであることがわかりますが、実際の画像を正しく保持しているかどうかはわかりません。私がちょうどBasicEffect
それらを使用したとき、それらはそれらのテクスチャーでうまくレンダリングされました。
アップデート:
少しいじった後、これを機能させることができました。私のゲームは数百の同じ立方体に読み込まれ、それぞれを作成すると、上記のコードを使用してモデルのテクスチャを保存し、メッシュパーツを調べて、効果をカスタム効果に変更しようとします。最初に作成されたキューブはテクスチャを問題なく保存できることを発見しましたが、その後に作成されたキューブは、BasicEffectとしてキャストできないと文句を言います。これにより、1つのテクスチャキューブが作成され、次に多くの黒いキューブが作成されました。同じモデルを何度も再利用すると、キューブの最初のインスタンスで実行されたカスタム効果を使用するように変更されたモデルが使用されると思います。これは正常ですか?テクスチャ変数を静的に変更することで、それらすべてをテクスチャとしてレンダリングすることができます。