Система частиц: профиль XNA Framework HiDef не поддерживает альфа-смешение текстур Vector4 - PullRequest
1 голос
/ 15 ноября 2011

Я нашел этот замечательный урок по созданию системы частиц в XNA: http://www.catalinzima.com/tutorials/4-uses-of-vtf/particle-systems/

Проблема в том, что он написан для более старых версий xna и xna 4.0.

В методе DoPhysicsPass я получаю это исключение:

Профиль XNA Framework HiDef не поддерживает альфа-смешение или ColorWriteChannels при использовании формата rendertarget Vector4.

Вот метод взрыва

    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 голосов
/ 15 ноября 2011

Прежде всего, вы уверены, что правильно устанавливаете эффект на SpriteBatch? Я не уверен, что ты. Похоже, вы преобразовали учебник, который использует старый до-4.0 способ применения пользовательских настроек рендеринга ( details ).

Я подозреваю, что вам либо нужно передать SpriteSortMode.Immediate в Begin (обратите внимание, что это отключит пакетирование), или , передавая ваш эффект (вероятно, после установка CurrentTechnique).

Вторая проблема просто объясняется исключением. Вам необходимо отключить альфа-смешение и ColorWriteChannels. Я подозреваю, что ColorWriteChannels на самом деле все равно отключен (по умолчанию). Чтобы отключить альфа-смешение, попробуйте передать BlendState.Opaque в SpriteBatch.Begin (AlphaBlend по умолчанию).

Я сам не пытался обновить учебник до XNA 4.0 - но я уверен, что исправление одной или обеих этих проблем решит вашу проблему.

...