Ich versuche ein Quad in 2D zu zeichnen (in SharpDX, aber das ist im Grunde XNA). Aber die Texturkorrektur funktioniert nicht und ich bekomme nur ein affines strukturiertes Quad.
Ich benutze es BasicEffect
, um es zu rendern.
BasicTextureEffect = new BasicEffect(Device)
{
Alpha = 1.0f,
TextureEnabled = true,
LightingEnabled = false,
VertexColorEnabled = true,
Projection = Matrix.OrthoOffCenterLH(0.0f, ScreenWidth, ScreenHeight, 0.0f, 0.0f, 1.0f),
};
Es ist ein isometrisches 2D-Spiel. Ich habe Pseudo-3D-Koordinaten in der isometrischen Welt (es ist ein Schatten auf dem Boden) in den Bildschirmraum konvertiert und dann mit gerendert DrawQuad
.
Muss ich die Ansicht (oder Projektion?) Irgendwie einrichten, um echtes 3D zu erhalten (die isometrische Kamera emulieren), und dieses Quad stattdessen in 3D-Koordinaten zeichnen? Wie schließlich? Oder gibt es eine Möglichkeit, dies in 2D zu korrigieren?
Aktualisieren:
Ich habe den eigentlichen Teil-Screenshot hochgeladen (Abbildung A), damit Sie sehen können, dass er fast gleich ist. (Ich habe es ein bisschen geschnitten, aber es geht alles bis zur Ecke)
Abbildung A Abbildung B.
Update 2:
Ich kann jetzt bestätigen, dass SharpDX (XNA) BasicEffect
dies mit einfachem UW-Mapping (4 Ecken eines Quadrats) und einfach macht DrawQuad
. Ich habe es vorübergehend geändert, um den Mittelpunkt einzuschließen, und ich zeichne 4 Dreiecke anstelle von 2 (Abbildung B). Dies reduziert den Effekt auf ein Minimum, aber es ist immer noch da. Es muss noch gelöst werden, da ich es nicht nur im Schatten verwenden werde.
quelle
Antworten:
Ich habe den Shader gemäß dem von Seth Battin vorgeschlagenen Artikel geändert . Jetzt führt es eine perspektivisch korrekte Quad-Texturierung durch. Puh, Speck geliefert:
Für die zukünftigen Generationen kann das nie passieren. Die Eingabe erfolgt in Form der Linienscheitelpunkte A1 / A2, B1 / B2, die Diagonalen erzeugen (statt sequentieller Scheitelpunkte):
quelle