0

最近、XNAを使用してSilverlight5で3Dレンダリングコードを作成しようとしています。残念ながら、(カスタムシェーダーを使用して)何かを機能させるのに問題がありました。

基本的な効果は立方体で使用され、VertexPositionColor情報のみを使用しますが、カスタムシェーダーの使用に切り替えると、何もレンダリングされないように見えます(または画面外にレンダリングされます)。

この問題を解決するために、BasicEffect hlslコードを入手しましたが、実行していないことは何も実行されません。

このコードは、ワールド、ビュー、およびプロジェクションマトリックスを取り込んで、それぞれに次の順序で位置を乗算します。

float4 pos_ws = mul(position, World);
float4 pos_vs = mul(pos_ws, View);
float4 pos_ps = mul(pos_vs, Projection);

同じことを行うようにコードを変更し(単一のWorldViewProjectionマトリックスを渡す代わりに)、シェーダーはこれを使用して位置を計算し、ピクセルに色を適用します。しかし、何もレンダリングされていません。

私はこれにかなり固執しています、私は基本的な3Dで大丈夫ですが、大丈夫を渡すことはそれをカットしないようです!:)

4

1 に答える 1

1

したがって、問題はかなり単純であることがわかります。

問題が私のマトリックスである可能性が高いことを知っていたので、最初にこの質問を実際に削除しました。そのため、多くの助けが得られる可能性は低いです。

グーグルでつまずいた後、私が認めたいよりも多くのコーヒーを飲んだ後、私は答えを見つけました。
XNAは、それがずる賢い上で行列を転置し、あなたに教えてくれません!私は自分が何をしているのかを知っていることを期待して、ビューと投影の行列を転置しようとしましたが、それは役に立ちませんでした。

代わりに、以下を使用して計算された単一のWorldViewProjection_Transposed行列を渡します。

Matrix worldViewProjection_Transpose = Matrix.Transpose(world * view * projection);

これは現時点では機能しているようで、これが簡単であることを願っています。

レンダリングする必要のあるモデルがより複雑になるにつれて、さらに100万の問題に遭遇すると確信していますが、私と同様の状況(および経験レベル)の誰かが苦労している場合に備えて、これをオンのままにしておくことにしました:)

于 2012-09-17T16:09:12.063 に答える