Developers BR

Um Blog sobre XNA, SilverLight e CIA.

[Super Dica] SpriteBatch e RenderState

leave a comment »


Olá.

O assunto abordado é muito interessante, já que o XNA geralmente deixa o seu modelo estranho se você renderizar objetos 3D e logo em seguida desenhar 2D com o spriteBatch.

Isso ocorre porque o spriteBatch modifica RenderStates, de acordo com o Shaw H. ele faz as seguintes modificações:

GraphicsDevice.RenderState.CullMode = CullMode.CullCounterClockwiseFace;

GraphicsDevice.RenderState.DepthBufferEnable = false;

GraphicsDevice.RenderState.AlphaBlendEnable = true;

GraphicsDevice.RenderState.AlphaBlendOperation = BlendFunction.Add;

GraphicsDevice.RenderState.SourceBlend = Blend.SourceAlpha;

GraphicsDevice.RenderState.DestinationBlend = Blend.InverseSourceAlpha;

GraphicsDevice.RenderState.SeparateAlphaBlendEnabled = false;

GraphicsDevice.RenderState.AlphaTestEnable = true;

GraphicsDevice.RenderState.AlphaFunction = CompareFunction.Greater;

GraphicsDevice.RenderState.ReferenceAlpha = 0;

GraphicsDevice.SamplerStates[0].AddressU = TextureAddressMode.Clamp;

GraphicsDevice.SamplerStates[0].AddressV = TextureAddressMode.Clamp;

GraphicsDevice.SamplerStates[0].MagFilter = TextureFilter.Linear;

GraphicsDevice.SamplerStates[0].MinFilter = TextureFilter.Linear;

GraphicsDevice.SamplerStates[0].MipFilter = TextureFilter.Linear;

GraphicsDevice.SamplerStates[0].MipMapLevelOfDetailBias = 0.0f;

GraphicsDevice.SamplerStates[0].MaxMipLevel = 0;

Tais configurações funcionam ao exibir 3D e 2D, mas os resultados não é o que geralmente se espera. Para se ter o esperado, que seria visualizar somente o lado da frente de um modelo, modifique os seguintes renderstate antes de renderizar qualquer modelo 3D:

Dependendo do conteúdo do seu modelo 3D, é interessante colocar mais este código:

É isso. Mas para não deixar nada a desejar… Vou colocar aqui o trecho do código do método Draw. Isso serve para você não se perder.

—–> Método Draw

protected override void Draw(GameTime gameTime)

{

GraphicsDevice.Clear(Color.CornflowerBlue);

GraphicsDevice.RenderState.DepthBufferEnable = true;

GraphicsDevice.RenderState.AlphaBlendEnable = false;

GraphicsDevice.RenderState.AlphaTestEnable = false;

[Código para renderizar o Modelo]

base.Draw(gameTime);

}

Agora acabou. Até a próxima pessoal.

Anúncios

Written by rafaelangeline

julho 7, 2009 às 11:48 pm

Publicado em Dicas, XNA

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: