La lune est dessinée avec deux appels de tirage, mais les deux dessinent mal sur la xbox, donc je n'affiche qu'un seul tirage pour plus de simplicité.
Voici à quoi devrait ressembler la lune sur le PC:
À quoi ça ressemble sur la XBOX:
La texture scintille, disparaît, ressemble à un dégradé de bas en haut, des lignes la parcourent, et ainsi de suite lorsque la caméra se déplace. Par exemple, après avoir légèrement déplacé la caméra, cela ressemble à ceci: http://olhovsky.com/xna/xbox_moon2.png
public void Draw(Camera cam)
{
GraphicsDevice gd = Game3.GDM.GraphicsDevice;
Vector3 position = Position + cam.Position;
Matrix world = Matrix.CreateScale(2.0f);
world *= Matrix.CreateConstrainedBillboard(
position, cam.Position, Vector3.Down, cam.Forward, null);
_moonEffect2.Parameters["World"].SetValue(world);
_moonEffect2.Parameters["View"].SetValue(cam.View);
_moonEffect2.Parameters["Projection"].SetValue(cam.Projection);
// Draw blended part of moon only.
_moonEffect2.Parameters["AlphaTestDirection"].SetValue(-1);
gd.BlendState = BlendState.AlphaBlend;
gd.RasterizerState = RasterizerState.CullNone;
gd.DepthStencilState = DepthStencilState.DepthRead;
ScreenQuadDraw.DrawQuad(_moonQuad, _moonEffect2);
}
Voici le shader utilisé, rien de compliqué ici: http://www.olhovsky.com/xna/Moon.fx
Est-ce que quelqu'un sait pourquoi la texture ne s'affiche pas correctement sur la Xbox? Y a-t-il un autre état que je devrais définir peut-être?
Réponses:
La solution consistait à supprimer les entrées de couleur inutilisées du shader.
Ancien pixel shader:
Nouveau pixel shader:
la source
color
valeur est définie à partir d'une texture avant d'être utilisée de toute façon, la valeur initiale decolor
ne devrait donc pas avoir d'importance. Je ne sais pas pourquoi cela se produit. La morale, cependant, n'est pas d'avoir des entrées inutilisées pour votre fonction de shader.