1

XNA でのパーティクル システムの作成に関する素晴らしいチュートリアルを見つけました: http://www.catalinzima.com/tutorials/4-uses-of-vtf/particle-systems/

問題は、xna と xna 4.0 の古いバージョン用に書かれていることです。

DoPhysicsPass メソッドでは、次の例外が発生します。

XNA Framework HiDef プロファイルは、rendertarget 形式 Vector4 を使用する場合、アルファ ブレンディングまたは ColorWriteChannels をサポートしません。

これが爆発している方法です

    private void doPhysicsPass(string technique, RenderTarget2D resultTarget)
    {
        GraphicsDevice.SetRenderTarget(temporaryRT);
        GraphicsDevice.Clear(Color.White);
        spriteBatch.Begin();
        physicsEffect.CurrentTechnique = physicsEffect.Techniques[technique];
        if (isPhysicsReset)
        {
            physicsEffect.Parameters["positionMap"].SetValue(positionRT);
            physicsEffect.Parameters["velocityMap"].SetValue(velocityRT);
        }

        physicsEffect.CurrentTechnique.Passes[0].Apply();
        spriteBatch.Draw(randomTexture, new Rectangle(0, 0, particleCount, particleCount), Color.White);
        spriteBatch.End(); //<-----     Exception thrown here

        GraphicsDevice.SetRenderTarget(resultTarget);
        spriteBatch.Begin();
        physicsEffect.CurrentTechnique = physicsEffect.Techniques["CopyTexture"];
        physicsEffect.CurrentTechnique.Passes[0].Apply();
        spriteBatch.Draw(temporaryRT, new Rectangle(0, 0, particleCount, particleCount), Color.White);
        spriteBatch.End();
    }

randomTexture の初期化は次のとおりです。

velocityRT = new RenderTarget2D(GraphicsDevice, particleCount, particleCount, false, 
                                SurfaceFormat.Vector4, DepthFormat.None);

誰でもこれを修正する方法を提案できますか?

4

1 に答える 1

0

まず、エフェクトをSpriteBatch正しく設定していますか? あなたがそうであるかどうかはわかりません。カスタム レンダリング設定を適用する古い 4.0 より前の方法を使用しているチュートリアルを変換したようです (詳細)。

に渡すかSpriteSortMode.Immediate(Beginこれによりバッチ処理が無効になることに注意してください)、効果渡す必要があると思います (おそらく設定した後CurrentTechnique)。

2 番目の問題は、例外によって簡単に説明されます。アルファ ブレンディングとを無効にする必要がありColorWriteChannelsます。ColorWriteChannelsとにかく実際には無効になっていると思います(デフォルト)。アルファブレンディングを無効にするには、 (がデフォルトです) に渡しBlendState.Opaqueてみてください。SpriteBatch.BeginAlphaBlend

チュートリアルを自分で XNA 4.0 に更新しようとしたことはありませんが、これらのいずれかまたは両方を修正すると問題が解決すると確信しています。

于 2011-11-15T03:40:03.307 に答える