Laden...

Multitexturing (Textur Koordinaten)

Erstellt von Hitman II vor 18 Jahren Letzter Beitrag vor 18 Jahren 2.440 Views
Hitman II Themenstarter:in
140 Beiträge seit 2004
vor 18 Jahren
Multitexturing (Textur Koordinaten)

Hallo

Ich möchte mehrere Texturschichten miteinander verknüpfen (Multiplikation), aber dabei bin ich auf folgende Probleme gestossen:

  1. Mit device.SetTexture(0,tex0) und device.SetTexture(1,tex1) setze ich die Texturen, aber wie gehts weiter? Irgendwie brauche ich ColorOperation und Modulate, habe aber keinen Schimmer, wie ich das realisiere.

  2. Die zweite Texturschicht soll andere Texturkoordinaten haben als die erste. Aber alle Standard-Vertexformate unterstützen nur eine paar Texturkoordinaten. In einem englischen Forum habe ich gesehen, wie jemand selber ein CustomVertex-Format erstellt hat, aber das war Pseudo-Code, mit dem ich leider nichts anfangen kann. Hat jemand eine Idee wie man mehrere Texturkoordinatenpaare pro Vertex einbinden kann? Und wie sage ich dann der Anwendung, welches Paar sie verwenden soll?

mfg Hitman

Es gibt Probleme, die kann man nicht lösen. Für alle anderen gibt es Visual C# .NET!

A
26 Beiträge seit 2005
vor 18 Jahren

Naja zuerst mal definierst du dir ein eigenes Vertexformat.
Beispiel: Ein Vertexformat das Position, Normale und zwei Paar Texturkoordinaten speichert:

public struct MeinCustomVertexFormat
{
	public Vector3 Position;
	public Vector3 Normal;
	public float Tu0, Tv0;
	public float Tu1, Tv1;
	public static readonly VertexFormats Format = VertexFormats.PositionNormal | VertexFormats.Texture1 | VertexFormats.Texture2;
}

Das kannst du jetzt genau so verwenden wie vorher CustomVertex, d.h. z.B.:

vertexBuffer = new VertexBuffer(typeof(MeinCustomVertexFormat), anzahl, device, Usage.WriteOnly, MeinCustomVertexFormat.Format, Pool.Default);

Welche ColorOps du benutzen musst hängt davon ab, in welcher Weise die beiden Texturen verknüpft werden sollen. Auch hier wieder ein Beispiel:

device.SetTexture(0, textur1);
device.TextureState[0].ColorArgument1 = TextureArgument.TextureColor;
device.TextureState[0].ColorOperation = TextureOperation.SelectArg1;
device.SetTexture(1, textur2);
device.TextureState[1].ColorArgument1 = TextureArgument.Current;
device.TextureState[1].ColorArgument2 = TextureArgument.TextureColor;
device.TextureState[1].ColorOperation = TextureOperation.BlendFactorAlpha;
device.RenderState.TextureFactor = Color.FromArgb(128, 0, 0, 0).ToArgb();

Damit werden beide Texturen 50-50 gemischt. Es gibt aber noch ne Menge anderer Möglichkeiten; im Zweifelsfall einfach ausprobieren... 🙂

Hitman II Themenstarter:in
140 Beiträge seit 2004
vor 18 Jahren

Funktioniert tadellos. Danke für die schnelle Antwort.

mfg Hitman

Es gibt Probleme, die kann man nicht lösen. Für alle anderen gibt es Visual C# .NET!