PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit IndexBuffer aus Datei DirectX9


Gast
2009-05-11, 21:59:48
Ich habe meine 3D-Objecte in 2 Dateien verteillt.
1. Datei VertexBuffer (funktioniert einwandfrei).
2. Datei Index Buffer (Kann nicht eingelessen werden).
mit Hexadecimaleditor habe ich festgestellt, dass die Datei in ordnung ist.
Die Werte lassen sich einwandfrei identifizierenen.

Mein Quelltext ist folgender.

Indfile=_open(Indfilename,_O_RDONLY);
if(MainCl->pD3DDev->CreateIndexBuffer((3*AnzInd)*sizeof(UINT),0,D3DFMT_INDEX16,D3DPOOL_MANAGED,&IndexBuffer,NULL)==D3D_OK)
{
WORD z;
_3DOT_LogWr("IndexBuffer erstellt !",1);

IndexBuffer->Lock(0,0,(void**)&Index,D3DLOCK_NOSYSLOCK);
for(z=0;z<3*AnzInd;z++)
_read(Indfile,&Index[z],sizeof(WORD));

IndexBuffer->Unlock();
_3DOT_LogWr("Indexbuffer gefüllt.",1);
_close(Indfile);
}



Habe auch schon probiert die Werte in einem Zeiger entsprechender Grösse zu übergeben, aber dies funktioniert auch nicht richtig.

Mit fopen und fread funktioniert es erst recht nicht, weill mir diese Funktionen sämtliche Zeigervariablen in der Funktion zerstörren.
Nach einem 2. Aufruf von fread sogar der Zeiger für die Datei.

Weiss jemand einen Rat.

Neomi
2009-05-11, 23:04:10
3*AnzInd sagt recht eindeutig, daß AnzInd nicht die Anzahl der Indices ist, sondern die Anzahl der Dreiecke in einer "Triangle List" Topologie. Entweder ist hier ein Fehler im Code (Versuch, 3x so viele Indices zu lesen, wie vorhanden sind) oder ein Fehler in der Benennung. Das solltest du einmal klarstellen.

Als nächstes fällt mir sizeof(UINT) auf. Du spezifizierst 16 Bit pro Index, aber ein UINT hat mit an Sicherheit grenzender Wahrscheinlichkeit 32 Bit. Und was ist der Datentyp von deinem Pointer "Index"?

Weitere Anmerkungen: ein WORD als Zählervariable steigt aus, wenn AnzInd größer als 21845 sein sollte. Und prüfe mal die Rückgabe von Lock.