DirectX7 - wie blitte ich einen Ausschnitt einer Textur?
-
Hi,
wie kann ich in DirectX7 einen Teil-Ausschnitt einer Textur (rechteckig) auf den Screen rendern?
Nehmen wir mal an, ich habe eine Textur 32 x 2048 und möchte davon ein 32 x 32 Quadrat "ausschneiden".
Bisher habe ich immer nur komplette Texturen gerendert mit:
m_pd3dDevice->SetTexture( 0, D3DTextr_GetSurface("tex2.tga") );
Rect[0] = D3DTLVERTEX( D3DVECTOR( X_pos, sprite_bottom, 0.99f), 0.5f, 0xffffffff, 0, 0, 1 );
Rect[1] = D3DTLVERTEX( D3DVECTOR( X_pos, Y_pos, 0.99f), 0.5f, 0xffffffff, 0, 0, 0 );
Rect[2] = D3DTLVERTEX( D3DVECTOR( sprite_right, sprite_bottom, 0.99f), 0.5f, 0xffffffff, 0, 1, 1 );
Rect[3] = D3DTLVERTEX( D3DVECTOR( sprite_right, Y_pos, 0.99f), 0.5f, 0xffffffff, 0, 1, 0 );m_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, D3DFVF_TLVERTEX, Rect, 4, 0 );
(mein Framework habe ich von der Particle-Chamber:
http://www.gamedev.net/directory/links/count.asp?listingid=305 )Danke,
Chris :p
-
Rect[0] = D3DTLVERTEX( D3DVECTOR( X_pos, sprite_bottom, 0.99f), 0.5f, 0xffffffff, 0, [b]0[/b], [b]1[/b] ); Rect[1] = D3DTLVERTEX( D3DVECTOR( X_pos, Y_pos, 0.99f), 0.5f, 0xffffffff, 0, [b]0[/b], [b]0[/b] ); Rect[2] = D3DTLVERTEX( D3DVECTOR( sprite_right, sprite_bottom, 0.99f), 0.5f, 0xffffffff, 0, [b]1[/b], [b]1[/b] ); Rect[3] = D3DTLVERTEX( D3DVECTOR( sprite_right, Y_pos, 0.99f), 0.5f, 0xffffffff, 0, [b]1[/b], [b]0[/b] );
Die letzten Parameter des D3DTLVERTEX Konstruktors sind doch die Texturkoordinaten. Diese habe einen Bereich von 0 bis 1 (jeweils für X/Y Richtung).
Wenn du nur 32x32 aus einer Textur der Größe 32x2048 haben willst, dann must den obigen Code wie folgt ändern:Rect[0] = D3DTLVERTEX( D3DVECTOR( X_pos, sprite_bottom, 0.99f), 0.5f, 0xffffffff, 0, [b]0[/b], [b]32.0f / 2048.0f[/b] ); Rect[1] = D3DTLVERTEX( D3DVECTOR( X_pos, Y_pos, 0.99f), 0.5f, 0xffffffff, 0, [b]0[/b], [b]0[/b] ); Rect[2] = D3DTLVERTEX( D3DVECTOR( sprite_right, sprite_bottom, 0.99f), 0.5f, 0xffffffff, 0, [b]1[/b], [b]32.0f / 2048.0f[/b] ); Rect[3] = D3DTLVERTEX( D3DVECTOR( sprite_right, Y_pos, 0.99f), 0.5f, 0xffffffff, 0, [b]1[/b], [b]0[/b] );
-
Sehr einleuchtend Illuminator
Danke,
Chris