0

Texture2Dタイトルにあるように、を検討する前にサイズを変更しようとしていSpriteBatch.Draw()ます。Vector2Dこれを行う理由は、 sで定義された頂点でレイアウトされた任意のポリゴンを、任意ので埋めようとしているためですTexture2D

私が考えているのは、ポリゴンにフィットする長方形を作成し、その長方形にスケーリングしてTexture2Dから、ポリゴンの外側にあるピクセルをTexture2D'sGetData<>()と。で透明にすることSetData<>()です。

ポリゴンに合う長方形を見つけることができましたが、サイズを変更する方法はありTexture2Dますか、それとも完全に間違った方法で行っていますか?ありがとう!

4

2 に答える 2

1

あなたはそれについて間違った方法で行っています。テクスチャデータの設定にはコストがかかります。(そして、おそらくフィルタリングにもいくつかの問題があります。)

描画する頂点のテクスチャ座標(「UV座標」)を設定します。これにより、テクスチャの特定の場所がポリゴンのその頂点に表示されます。ポリゴンの外側に落ちるテクスチャは、単純に描画されることはありません(ポリゴンのエッジによって「クリップ」されます)。

テクスチャ座標は、テクスチャの左上から右下まで、0.0から1.0の範囲で指定されます(U軸とV軸-水平方向と垂直方向)。

頂点バッファを使用して描画している場合、XNAには、のような組み込みの頂点構造が含まれておりVertexPositionTexture、値VertexPositionColorTextureを指定できますTextureCoordinate

独自の頂点構造を使用している場合はVertexElementUsage.TextureCoordinate、を指定するときに使用しますVertexElement。独自のシェーダーを作成している場合、値はTEXCOORD0(使用インデックス0の場合)で公開されます。


で長方形を描画するだけの場合は、を呼び出すときにをSpriteBatch指定します。sourceRectangleDraw

于 2012-06-24T00:39:53.123 に答える
0

Drawメソッドでオーバーロードを使用する必要があるように聞こえます(何らかの理由でこれを実行したくないと思いますが、正当な理由でこのようになっています):

public void Draw (
     Texture2D texture,
     Vector2 position,
     Nullable<Rectangle> sourceRectangle,
     Color color,
     float rotation,
     Vector2 origin,
     Vector2 scale,
     SpriteEffects effects,
     float layerDepth
)

sourceRectangle、scaleパラメータ、およびoriginで十分です。メモリ内のテクスチャを変更しないでください。これを行うには比較的コストがかかります(特にフレームごとに変更します)。

http://msdn.microsoft.com/en-us/library/bb196420(v=xnagamestudio.31).aspx

Draw()でスケーリングしたくない理由を説明できますか?

于 2012-06-23T14:21:16.860 に答える