Aus einem Mesh die Vertex/Indexdaten lesen - kleines Problem
-
Ich habe ihn mir einfach als Zahl ausgegeben, und mit meinem üblichen FVF des TVertex Structs verglichen. Beide haben die Zahl 274
Ich versteh das absolut nicht. Gehe ich überhaupt den richtigen Weg dass ich den Indexbuffer erst "locken" muss und dann aus ihm raus die Daten über pVertex kopieren kann?
Danke nochmal für eure Unterstützung
Kevin
-
Ich versteh das nicht.
Hier steht, man kann da GANZ EINFACH drauf zugreifen. Ich locke es, kopier Inhalt raus, Ergebnis => falsches Ergebnis.
Man wo liegt dieser Fehler?
Kevin
-
Das gibts doch nicht dass das tatsächlich niemand weiß
-
Ich sehe da nirgendwo einen Fehler mehr, der liegt wahrscheinlich woanders. Aber es kann nix schaden, mal in einer der Direct3D-Newsgroups nachzufragen!
-
kannst du mir da eine empfehlen?
Im Mesh liegt der Fehler auch nicht...ich habe auch schon versucht einen "eigenen" Indexbuffer auszulesen, der selbe Erfolg
-
Hmmm, bitte poste doch nochmal Deinen Code in der aktuellen Version. Da muss doch irgendwas falsch sein. Und was Du auf jeden Fall tun solltest: die Rückgabewerte ALLER DirectX-Methoden prüfen! Dazu gehört auch die Lock-Methode!
-
Hier ist das gute Stück:
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1) struct TVertex { D3DXVECTOR3 position; // Ortsvektor des Vertex FLOAT nx, ny, nz; //Lighting Normal float tu, tv; }; VOID *pVertex; TVertex *v; if(m_pMesh->GetVertexBuffer(&m_meshvertexbuffer) != D3D_OK) { MessageBox(dd_obj.hwnd, "Laden der Meshvertizen schlug fehl :(", 0, 0); } m_meshvertexbuffer = terrain.D3D_VertexBuffer; if(m_meshvertexbuffer == NULL) { MessageBox(dd_obj.hwnd, "fehler2", 0, 0); } if(m_meshvertexbuffer->GetDesc(&m_desc) != D3D_OK) { MessageBox(dd_obj.hwnd, "Infos schlugen fehl", 0, 0); } v = new TVertex[((m_desc.Size)/sizeof(TVertex))]; if(m_meshvertexbuffer->Lock(0, m_desc.Size, (BYTE**)&pVertex, D3DLOCK_READONLY) != D3D_OK) { MessageBox(dd_obj.hwnd, "fehler3", 0, 0); } memcpy(v, pVertex, m_desc.Size); m_meshvertexbuffer->Unlock();
Habe schon so ziemlich jede Kombi ausprobiert, jedoch ist dies die eheste die funktionieren sollte
Kevin
-
Surkevin schrieb:
m_pMesh->GetVertexBuffer(&m_meshvertexbuffer); m_meshvertexbuffer = terrain.D3D_VertexBuffer;
Welchen Sinn hat das?
-
Keinen
Hier habe ich den Vertexbuffer nur auf meinen "eigenen" Vertexbuffer gesetzt anstatt dem des Meshes um mir sicher zu gehen dass das struct das Selbe ist
-
Ich scheine zwar dumm zu sein, aber du kannst trotzdem mal meinen Tipp ausprobieren.
-
niemand sagt dass du dumm seist, im Gegenteil!
Nur stürzt das Programm nicht mehr ab, sondern die Werte sind nur grottenfalsch
(-1928484982) z.n.
Kevin
-
Surkevin schrieb:
Nur stürzt das Programm nicht mehr ab, sondern die Werte sind nur grottenfalsch
(-1928484982) z.n.
Achso, wenn das jetzt der Fehler ist, dann würde ich (als jemand der scheinbar dumm ist), den Debugger benutzen und mir erstmal die Ausgaben der debug runtimes anschauen.
Bye, TGGC
-
was soll das bringen? Inhalt is falsch - ich hab den Inhalt auch schon in eine Datei geschrieben und mit dem Original verglichen, sieht ähnlich jedoch nicht gleich aus
-
@Kevin:
Wie gibst Du denn die Werte aus?
Ich meine Du musst ja irgendwie wissen, dass sie "grottenfalsch" sind.
Habe da so einen Verdacht... also zeig mal Code, wo Du die Werte ausgibst.
-
Dem Debugger würde sowas nicht passieren...
-
Ich befürchte, dass er den Inhalt mit printf ausgibt und ein "%d" für float-Werte genommen hat, anstelle eines "%f"...
-
oh gott du scheinst recht zu haben...ich habe %i angegeben weil ich es gerundet haben wollte.
char test[256]; sprintf(test, "ecken: %i x: %i y: %i z: %i",m_desc.Size/sizeof(TVertex), v[124].position.x, v[243].position.y, v[332].position.z); MessageBox(dd_obj.hwnd, test, 0, 0);
Werde mir das noch weiter angucken. Oh man...da sucht man in den kleinsten Ecken und dann sowas... Aber es wundert mich trotzdem, dass wenn ich die ausgelesenen Vertexdaten in eine Datei schreibe und die originalen Vertexdaten auch, dann sieht die Datei nicht identisch aus!
Werde das weiter untersuchen, aber danke für den Tipp
Kevin
-
Ha, das war ja wohl ein Volltreffer
-
Surkevin schrieb:
was soll das bringen? Inhalt is falsch - ich hab den Inhalt auch schon in eine Datei geschrieben und mit dem Original verglichen, sieht ähnlich jedoch nicht gleich aus
So, jetzt weiss ich was es bringt. Du siehst dann, das der Inhalt garnicht falsch ist, sondern nur das was ausgegeben wird!
Bye, TGGC
-
weiss aba net wie ich debugger im fullscreen benutzen kann