1

次のコードを使用して画面上の特定のピクセルの色を取得していますが、何らかの理由で常に黒色が返されます。これは私が使用しているコードです:

Rectangle pixel = new Rectangle((int)screenPosition.X, (int)screenPosition.Y, 1, 1);
                        Texture2D backBufferData = new Texture2D(ScreenManager.GraphicsDevice, ScreenManager.GraphicsDevice.PresentationParameters.BackBufferWidth, ScreenManager.GraphicsDevice.PresentationParameters.BackBufferHeight);
                        Color[] waterPixel = new Color[1];
                        backBufferData.GetData<Color>(0, pixel, waterPixel, 0, 1);
4

1 に答える 1

4

問題は、Texture2DオブジェクトbackBufferDataが実際にバックバッファデータにアクセスしていないことです。

インスタンス化する行はbackBufferData、バックバッファの内容を取得せず、現在のビューポートのサイズである新しいTexture2Dオブジェクトを作成するだけです。

XNA 4.0の時点では、カラーデータを画面にレンダリングする方法は2つしかありません。

  1. 慣用的でクリーンな方法。シーンをRenderTarget2Dオブジェクトにレンダリングして、そのコンテンツをサンプリングできるようにします。次に、SpriteBatch描画操作を使用して、そのRenderTarget2Dオブジェクトをバックバッファーにブリットします。

  2. 迅速で汚い方法。ScreenManager.GraphicsDevice.GetBackBufferDataを呼び出して、バックバッファーに直接アクセスします。このサンプリングをこれよりも頻繁に実行する必要がある場合は、非常に遅いため、最善の選択肢ではない可能性があります。(そしておそらくあなたのレンダリング操作をブロックします)

于 2013-03-19T06:08:49.600 に答える