Kurze Frage zu screen space vertices und Koordinaten
-
Hi!
Nehmen wir nen 800x600 Backbuffer und folgende screen space (transformed) vertices:
struct Vertex { float x, y, z, rhw; float tu, tv; }; #define D3D8T_CUSTOMVERTEX (D3DFVF_XYZRHW | D3DFVF_TEX1) Vertex vertices[] = { { 0.0f, 600, 0.5f, 1.0f, 0.0f, 1.0f }, { 0.0f, 0.0f, 0.5f, 1.0f, 0.0f, 0.0f }, { 800, 600, 0.5f, 1.0f, 1.0f, 1.0f }, { 800, 0.0f, 0.5f, 1.0f, 1.0f, 0.0f } }; // Gezeichnet mit direct3dDevice8->SetVertexShader(D3D8T_CUSTOMVERTEX); direct3dDevice8->SetStreamSource(0, vertexBuffer, sizeof(Vertex)); direct3dDevice8->SetTexture(0, texture); direct3dDevice8->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
Die Textur deckt nun den ganzen Bildschirm ab. Doch eigentlich sollten die vertices nicht an 0-800/0-600 sondern eher an 0-799/0-599 sein. Jedoch wird die Textur dann nicht komplett über den 800x600 screen gezeichnet. Rechts und unten jeweils 1 Pixel zu kurz. Woran liegt das? Kann man dieses Verhalten ändern?
-
Ich verstehe die Frage nicht. Du wunderst dich, dass bei einem 800x600 Screen links und unten ein Pixel frei sind wenn du eine 799x599 Textur drauf malst?
-
Nun, du gibst die Ränder des Rechtecks an.
Pixel 0 geht ja sozusagen von [0,1). 800 ist dann der rechte Rand von Pixel 799. Passt doch alles?
-
@cooky451
Ne, die Textur ist 800x600 groß. Lediglich die vertices-Koordinaten sollten dann 0-799 und 0-599 sein. Dann fehlt aber eben bisschen was.Ok, wenn ich nun 0-800 und 0-600 angebe, muss ich die Textur allerdings mit 801x601 erstellen, das stört mich ein bisschen.
(Denn wenn ich das nicht mache, wird sie scheinbar leicht gestreckt, sprich es ist kein pixelgenaues Abbild Textur>Bildschirm mehr möglich. Ein Rechteck auf der Textur wäre minimal verzerrt. Ich möchte aber keine Texturfilter verwenden.)
-
http://msdn.microsoft.com/en-us/library/windows/desktop/bb147314.aspx
Und abgesehen davon gibt es hier tatsächlich ein Direct3D9 spezifisches Problem: http://msdn.microsoft.com/en-us/library/windows/desktop/bb219690.aspx
-
Ah danke, allerdings gehts um Direct3D 8.
Ich werd das mit -0.5 trotzdem mal ausprobieren.
-
Hi schrieb:
Ah danke, allerdings gehts um Direct3D 8.
Hab ich übersehen. In dem Fall: In Gottes Namen verwend bitte mindestens Direct3D9, der Unterschied zwischen 8 und 9 ist dermaßen minimal und selbst 9 ist bereits hoffnungslos veraltet...
-
Jooo das haut hin, danke nochmals!
-
@dot
Ich erweitere ein altes Spiel