HASTCounter:6953Today:4Yesterday:3Online:7TweetHLSLでテクスチャのピクセル座標を取得するAboutHLSL(シェーダ)ではテクスチャの座標は、X軸Y軸共に0~1で表される。フィルタリング処理などでは、与えたテクスチャのピクセルレベルでの座標が必要になる。そこでHLSL内であってもテクスチャの座標をピクセル単位で取得できるようにする。WindowsGame1_GetPixelCoordinateInHLSL.zipVS2010XNA4.0SpriteにPixelShaderを適用するSpriteで描画するオブジェクト(スプライト)、例えばテクスチャなどにPixelShaderを適用する場合は次の様にする。spriteBatch.End();「SpriteBatch.Beginメソッド」によってSpriteの描画を開始する際に、利用するエフェクトを指定する。その他のオプションに関しては、基本的には「null」を指定しておけば、デフォルト値が設定されるようになっている。必要がない限りはnullを指定するのが良い。引数である「SpriteSortMode」のデフォルト値は「SpriteSortMode.Deferred」である。確認していないが、必要がない限り、指定するEffect(シェーダ)は、PixelShaderのみを持つようにした方が良い。VertexShaderがあっても動作するが、Spriteに適用する分には、基本的にはVertexShader無しでEffectファイルを利用・適用することができる。Sampleここではレナの画像を対象に、ピクセル座標が偶数列・偶数行の時に、そのピクセルに黒を描画する様なプログラムを実装した。SpriteBatchを利用して描画するのでPixelShaderしか用意しない。左に用意した結果画像は縮小表示のため、ブラウザ上では効果が確認し難いので注意されたい。toどうということはなくて、実際のサイズにスケールを合わせれば良い。20」で「X=20px」といった具合にピクセルでの座標を取得することができる。シェーダ内ではテクスチャのピクセルレベルでの大きさを取得することができないので、CPU側からあらかじめパラメータとして与える必要があるので注意する。CPUまずはCPU側から、ピクセル座標を取得したいテクスチャのサイズをシェーダに引き渡す。それ以上の処理をする必要は無い。tex2d_Lena.Height));GPU与えられたテクスチャサイズから先の説明の通り乗算によってピクセル座標を求める。最後にround関数によって整数に丸める。)、実は+0.5の処理は不要。※何かしらの原因で+0.5が必要であった気がするが失念したので同現象が発生次第に追記する。著作権Administrator。