[DirectX C++] Meshdaten abfragen?
-
Hallo, ich habe gerade mit DirectX unter C++ angefangen und verwende Meshes in meinem Programm.
Allerdings benötige ich die Daten der Meshes sprich Vertices und Polygone (Koordinaten).Weiß jemand wie man an sowas rankommt? Bisher kann ich die Meshes nur anzeigen lassen

-
ID3DXMesh::GetVertexBuffer ?
-
Du solltest dir angwöhnen, solcche Fragen mit Hilfe der DXSDK Doku zu beantworten. f'`8k
AutocogitoGruß, TGGC (\-/ has leading)
-
Also ich habe nun die Daten in einen Vertexbuffer und einen Indexbuffer geladen, nun ist die frage, wie ich an die Koordinaten komme, leider konnte ich dazu nix gescheites finden.
Kann mir da jemand weiterhelfen.
-
PeterBücherwurm schrieb:
Also ich habe nun die Daten in einen Vertexbuffer und einen Indexbuffer geladen, nun ist die frage, wie ich an die Koordinaten komme
Du hast Daten in den Vertex-Buffer geladen?
Dann hast du doch schon alle Vertizes und damit auch alle Koordinaten.
-
ich habe nun die Daten in einen Vertexbuffer und einen Indexbuffer geladen,
nun ist die frage, wie ich an die Koordinaten komme,
leider konnte ich dazu nix gescheites finden.Ich erklaere nochmal kurz die Vorgehensweise:
1. es gibt Dokumentation zu Direct3D.
2. du hast ein IDirect3DVertexBuffer9-Objekt; dieses Objekt besitzt Methoden.
3. Die Methode die du suchst heisst IDirect3DVertexBuffer9::Lock:Locks a range of vertex data and obtains a pointer to the vertex buffer memory.
Tip: Lesen, Bücherwurm.
-
hm..., sry, dass ich nochmal nerven muss, aber irgendwie scheint das mit dieser GetIndexBuffer-Methode und der anderen doch nicht so zu funzen, wie es soll, wenn ich die Eigenschaften des Buffers nach dem Laden über den Debugger angucke, dann ist die stehen da sachen, als wäre der Buffer gar nicht richtig initialisiert worden, z. b. bei Length ein riesiger wert oder bei einigen Sachen existiert noch nicht einmal ein Wert.
LPDIRECT3DVERTEXBUFFER9 pVB; LPDIRECT3DINDEXBUFFER9 pib; m_pD3DXMesh->GetIndexBuffer(&pib); //Daten in den Indexbuffer laden m_pD3DXMesh->GetVertexBuffer(&pVB); int iFaces = m_pD3DXMesh->GetNumFaces();die GetNumFaces-Methode scheint aber zu funktioniern, was beweist, dass das Mesh auch richtig geladen ist, mal ganz davon abgesehen, dass es gerendert und angezeigt wird.
-
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39418.html schrieb:
- alle Strukturen mit ZeroMemory und size=sizeof(struktur) initialisiert

-
Habs gerad ausprobiert, es geht aber auch nicht. Die Indizes haben nur komische Werte, die nicht angehen können. Ich poste mal den ganzen Quellcode.
LPDIRECT3DVERTEXBUFFER9 pVB; LPDIRECT3DINDEXBUFFER9 pib; Dreieck tmpDreieck; int *pindex; int *index; int iFaces = m_pD3DXMesh->GetNumFaces(); int IndizesSize = iFaces * 3; ZeroMemory(&pVB, sizeof(pVB)); ZeroMemory(&pib, sizeof(pib)); m_pD3DXMesh->GetIndexBuffer(&pib); //Daten in den Indexbuffer laden m_pD3DXMesh->GetVertexBuffer(&pVB); //Daten in den Vertexbuffer laden int vertices = m_pD3DXMesh->GetNumVertices(); //Anzahl der Vertices CUBEVERTEX *pVertexData; index = new int [IndizesSize]; pib->Lock(0, IndizesSize, (void**) (&pindex), D3DLOCK_READONLY); for(int i = 0; i<IndizesSize; i++) index[i] = pindex[i]; pib->Unlock();Ich weiß absolut nicht mehr was ich machen soll

-
PeterBücherwurm schrieb:
//Daten in den Indexbuffer laden m_pD3DXMesh->GetVertexBuffer(&pVB); //Daten in den Vertexbuffer ladenDeine Kommentare passen nicht zum Code.
Da wird nichts in einen Buffer geladen.Tipp:
unsigned int für 32-Bit-Indizes,
unsigned short für 16-Bit-IndizesDu benutzt wahrscheinlich 16 Bits pro Index, und das erklärt, warum da komische Werte rauskommen. Er stopft dann immer 2 Indizes in deinen int, der zu allem Überfluss auch noch signed ist.
-
ah danke, nun geht es, naja, zumindest kommen sinnvolle Werte heraus, ob es wirklich geht, müsste man ja mit Nachzeichnen ausprobieren
