Der Mond wird mit zwei Draw-Aufrufen gezeichnet, aber beide zeichnen auf der Xbox falsch, sodass ich der Einfachheit halber nur einen Draw anzeige.
So sollte der Mond auf dem PC aussehen:
Wie es auf der XBOX aussieht:
Die Textur flackert, verschwindet, sieht aus wie ein Farbverlauf von unten nach oben, Linien verlaufen durch sie usw., während sich die Kamera bewegt. Zum Beispiel sieht es nach leichtem Bewegen der Kamera folgendermaßen aus: 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);
}
Hier wird der Shader verwendet, hier nichts kompliziertes: http://www.olhovsky.com/xna/Moon.fx
Weiß jemand, warum die Textur auf der Xbox nicht richtig angezeigt wird? Gibt es einen anderen Zustand, den ich vielleicht einstellen sollte?
Antworten:
Die Lösung bestand darin, die nicht verwendete Farbeingabe aus dem Shader zu entfernen.
Alter Pixel-Shader:
Neuer Pixel Shader:
quelle
color
Wert wird aus einer Textur festgelegt, bevor er in irgendeiner Weise verwendet wird, sodass der Anfangswert voncolor
keine Rolle spielen sollte. Ich weiß nicht, warum das passiert. Die Moral ist jedoch, keine unbenutzten Eingaben für Ihre Shader-Funktion zu haben.