PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : "Lade Textur aus Sprite" Problem-> Pixeldaten sind falsch


Freak5
28.12.2006, 23:56
Ich habe eine Textur, die 40px hoch ist und 500px breit. Ich weiß, das man eigentlich quadratische Texturen haben sollten die immer pixel=2^x entsprechen.
Scheinbar wird es aber trotzdem geladen und hat bei der Adressierung der einzelnen Buchstaben in der Textur einen Vorteil.
Das Problem ist jetzt, wenn ich meine Datei Textur.png lade und daraus die ersten beiden Zeichen anzeige:
RECT TexRect;
TexRect.left=0;
TexRect.top=0;
TexRect.right=160;
TexRect.bottom=40;
g_pSprite->Draw(g_pTexture,&TexRect, &D3DXVECTOR2(1,1),NULL,NULL,&D3DXVECTOR2(80,80),0x99FFFFFF);

Sind die Zeichen unten abgeschnitten.
Jedes Zeichen ist normalerwesie 40x40 pixel groß.
Um sie hier anzeigen zu können, muss ich aber von 60x80 ausgehen.
Warum???
Momit hängt das Zusammen? Mit dem internen Speicherformat? Oder ist das abhängig von der Darstellungsform, also den Matrizen?
Aber das 2. wäre unlogisch. Ich habe jetzt ja die Umrechnung ermittelt, kann ich davon ausgehen, dass die überall so ist und auch bleibt, so dass ich sie fest in mein Programm einprogrammieren kann, oder muss ich die für jeden PC irgendwie ermitteln?

Edit: Davon abgesehen ist mir noch etwas aufgefallen:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/rectangl_6cqa.asp
http://www.toymaker.info/Games/html/sprites.html
Überall werden 5 Argumente übergeben.
Im Header d3dx9core.h stehen aber 7:
STDMETHOD(Draw)(THIS_ LPDIRECT3DTEXTURE9 pSrcTexture,
CONST RECT* pSrcRect, CONST D3DXVECTOR2* pScaling,
CONST D3DXVECTOR2* pRotationCenter, FLOAT Rotation,
CONST D3DXVECTOR2* pTranslation, D3DCOLOR Color) PURE;
Edit: OK, wenn eine Textur nicht der Formel 2^x entspricht, wird sie resized. Aber was ist, wenn man quadratische Texturen braucht? Ich glaube, es gibt Grafikkarten auf die das zutrifft, wird dann die Textur auf 1024x1024 resized?