KINGx - Das inoffizielle PlayStation Forum & News Portal

Normale Version: sceGu Texturen
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Ich versuche im momment Texuturen in sceGu zu laden. Das funktioniert soweit alles, jedoch wird (egal welche Textur ich benutzte) ein drittel der breite nicht angezeigt. Nur die höhe der Textur stimmt.

Also, bei einer 480px breiten Textur wird sie ausirgenteinen Grund bei 300 "abgeschnitten" und zur Seite gestrekt. Und wenn ich die Vertices einfach weiter auseinander nehme wird es auch nur gestreckt.

Für die Texturen benutze ich folgenden TGALoader: http://www.psp-programming.com/code/doku.php?id=cTonguespgu-neheport-lesson5


Hier kann man sehen, dass was fehlt.

http://www.img-teufel.de/img_PCT20015a9888e2BMP.bmp.jpg.html
http://www.img-teufel.de/img_PCT200201a00da7BMP.bmp.jpg.html

Und so sollte es aussehen:

http://www.img-teufel.de/img_splash1e746884png.png.html

Code:

main.h: http://code.mastercoding.net/show/14/
main.cpp: http://code.mastercoding.net/show/15/
splash.cpp: http://code.mastercoding.net/show/17/

Ich finde den Fehler einfach nicht. Die Textur ich die benutze ist 480x272, wenn ich eine 22x22 Texturnehme fehlt auch ein drittel der Breite.
Push & Update ^^

Edit:

Habs einfach ein paar Werte gestellt und nachgesehn, was sich verändert.
So bin ich auf folgendes Ergebnis gekommen:

Code:
TexVertex __attribute__((aligned(16))) splash2[6] =
{
    { 0, 0, 0xFFFFFFFF, 0, 0, 0 },
    { 0, 1, 0xFFFFFFFF, 0, 272*0.012720588f, 0 },
    { 1, 0, 0xFFFFFFFF, 515*0.007208333f, 0, 0 },
    { 1, 1, 0xFFFFFFFF, 515*0.007208333f, 272*0.012720588f, 0 }
};


...

Code:
sceGuTexImage(0, 515, 272, 480, mcnet.Image());
    sceGumDrawArray(GU_TRIANGLE_STRIP, GU_TEXTURE_32BITF|GU_COLOR_8888|GU_VERTEX_32BITF|GU_TRANSFOR M_3D,
                    4, 0, splash2);


Das TGA Bilde ist 480x272. Bei GuTexImage hab ich einfach 515 eingestellt. Unter 510px fehlt das letzte drittel des Bildes. Über 510px ist es da, aber dafür muss man das Polygon breiter als den Bildschirm machen. Aber im Endeffekt siehts genauso aus, als wenn das Polygon 480px wären, denn man sieht ja nicht was neben dem Bildschirm wäre. Big Grin

Warum das ganze so mit den 510px ist kann ich mir auch nicht erkären.

Hi,

du nutzt die Funktion zum setzen der Textur nicht ganz richtig...
die Funktion lautet wie folgt:
sceGuTexImage(mipmap, width, height, stride, data);

lass dich von den Werten nicht täuschen, auch wenn sie Breite und Höhe bedeutet, sind es nie die echten Daten der textur, sondern immer eine Potenz von 2. stride ist hier die Textur-Pufferbreite, ebenfalls eine potenz von 2.
Bei einer gedachten Textur von 480x272 Pixel muss diese in einem Speicherbereich liegen der 512 breit und 512 hoch ist. 256 (die nächst kleinere Potenz ist leider kleiner als 272 :o( )...
beim Aufruf ist es dann
sceGuTexImage(0, 512, 512, 512, data);
durch das setzen der richtigen U/V werte bei deinen Vertexen kannst du dann sicherstellen, dass nur der Teil der Textur in dem sinnvolle Daten stehen (480x272) gezeigt werden...

Ich hoffe das hilft dir weiter...

VG anmabagima
Referenz-URLs