1

ゲーム シーンには、キャラクター スプライトと背景スプライトの 2 つのゲーム オブジェクトがあります。spritebatch.begin パラメーターにスカラー マトリックスを渡しました。1 以下でスケーリングすると、すべてが正常に描画されます。ただし、1 より上の任意の場所にスケーリングすると、背景イメージは描画されません (キャラクター スプライトは引き続き描画されます)。背景とキャラクターのコードはほとんど同じです (位置、画像ファイルなどを除く)。

マトリックス:

ViewMatrix = Matrix.CreateScale(1.5f); //Anything 1 or below works fine.

もっと情報を提供できたらいいのにと思いますが、何を提供すればよいかわかりません.. Web で同様の問題を検索してみましたが、何も見つかりませんでした。

4

1 に答える 1

2

使用Matrix.CreateScale(1.5f, 1.5f, 1f)- 基本的に: Z 軸をスケーリングしないでください。


GPU ラスター領域は ~ の範囲(-1, -1, 0)にあり(1, 1, 1)ます。このボリュームに含まれるフラグメント (ピクセル) のみがレンダリングされます。Z 軸は深度バッファの範囲です。伝統的に、射影行列はシーンを取り、それをこの空間に射影します。

SpriteBatchの投影行列に相当するものは、シーンを「クライアント空間」(原点の左上隅) に取り、この空間に投影します。ただし、Z軸はそのままです。

デフォルトでSpriteBatchは、深度バッファを使用しません。layerDepthただし、各スプライト クワッドにはパラメータ toで指定される Z 位置が与えられますSpriteBatch.Draw

で指定された変換SpriteBatch.Beginは、スプライト クワッドが によって配置された後Draw、投影の前に適用されます。

したがって、通常、有効な範囲layerDepthは 0 から 1 の間です (これはラスター ボリュームに収まるため)。ただし、スプライトの Z 軸を変更するカスタム変換を適用すると、有効な範囲layerDepthが変更されます。

于 2013-09-10T11:33:52.950 に答える