2010-12-15 5 views
0

Ich erstelle flache Vertex-basierte Geometrie mit dem Ziel 2D-Gelände für ein 2D-Side-Scroller-Spiel zu erstellen.Kacheln einer Textur über einen Eckenpuffer? (Windows Phone 7/XNA)

Bis jetzt kann ich die Vertex Puffer fein und zeichnen, was auch immer Dreieck zu Bildschirm ich will. Allerdings habe ich ein Problem mit der Texturierung. Wie kann ich die Dreiecke mit Kacheln strukturieren (wenn es überhaupt möglich ist). Ich verwende die BasicEffect-Klasse.

Was wäre ein guter Algorithmus, um UV-Daten über alle Scheitelpunkte hinweg einzurichten, so dass die Textur über alle von ihnen nahtlos n-mal kacheln wird?

Meine aktuelle Idee ist es, die meisten und die meisten Vertices (sowie die obersten, am weitesten unten) die Dimensionen der gesamten Geometrie basierend darauf, dann durch jedes Dreieck und die UV-Einstellung seiner Ecken zu erhalten (basierend auf der Dreiecke width/height) auf einen Wert, der ein Stück der Textur verwendet, so dass es in das nächste übergeht (dh ein Vertex UV wäre 0,1, 0,3 und das nächste wäre 0,2, 0,4).

Dies scheint ein bisschen kompliziert und hat einen großen Rückzieher, die Größe der Kachel muss größer sein als die Größe des größten Dreiecks Gesicht, aber es ist die einzige Möglichkeit, wie ich es tun kann. Ich habe versucht, nach einer Lösung zu suchen oder zumindest nach jemand anderem, der das gleiche gemacht hat wie ich, aber nichts gefunden habe.

Antwort

3

Ja, Sie werden einen Algorithmus finden müssen, um Ihre Tex-Koordinaten richtig einzurichten ... das ist leider eine Funktion dessen, wie Ihre Texturen und Ihre Geometrie aussehen, also bin ich mir nicht sicher, wie gut wir dazu in der Lage wären Hilfe.

Soweit das technische Bit, sollten Sie die TextureAddressMode auf Wrap setzen können und die GPU wird darauf achten, die Textur entsprechend zu kippen, um es basierend auf dem UV zu kacheln.

graphics.GraphicsDevice.SamplerStates[0].AddressU = TextureAddressMode.Wrap; 
graphics.GraphicsDevice.SamplerStates[0].AddressV = TextureAddressMode.Wrap;