粒子系统:XNA Framework HiDef配置文件不支持Vector4纹理上的alpha混合

时间:2011-11-15 00:03:29

标签: xna-4.0 particle-system

我发现了这个关于在XNA中制作粒子系统的精彩教程: http://www.catalinzima.com/tutorials/4-uses-of-vtf/particle-systems/

问题在于它是为旧版本的xna和xna 4.0编写的。

在DoPhysicsPass方法中,我得到了这个例外:

使用rendertarget格式Vector4时,XNA Framework HiDef配置文件不支持Alpha混合或ColorWriteChannel。

这是爆炸的方法

    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);

有人可以提供一些如何解决此问题的建议吗?

1 个答案:

答案 0 :(得分:0)

首先,您确定要正确设置SpriteBatch的效果吗?我不确定你是谁。看起来您已经转换了教程,该教程使用旧的4.0之前的方式应用自定义渲染设置(details)。

我怀疑您需要将SpriteSortMode.Immediate传递给Begin(请注意,这会禁用批处理),传递您的效果(可能之后< / em>设置CurrentTechnique)。

第二个问题只是由例外解释。 您需要停用Alpha混合ColorWriteChannels。我怀疑ColorWriteChannels实际上是被禁用的(默认值)。要禁用Alpha混合,请尝试将BlendState.Opaque传递给SpriteBatch.Begin(默认为AlphaBlend)。

我自己没有尝试将教程更新到XNA 4.0 - 但我很确定修复这些内容中的一个或两个都可以解决您的问题。