Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
for(unsigned int i = 0; i < m_NumMeshes; ++i) { m_NumVertices = 0; m_File.read(reinterpret_cast<char*>(&m_NumVertices), sizeof(unsigned int)); TempModel.Vertices = new veModelVertex[m_NumVertices]; m_Model.NumVertices.push_back(m_NumVertices); for(unsigned int v = 0; v < m_NumVertices; ++v) { m_File.read(reinterpret_cast<char*>(&TempModel.Vertices[v].posx), sizeof(float)); m_File.read(reinterpret_cast<char*>(&TempModel.Vertices[v].posy), sizeof(float)); m_File.read(reinterpret_cast<char*>(&TempModel.Vertices[v].posz), sizeof(float)); m_File.read(reinterpret_cast<char*>(&TempModel.Vertices[v].normalx), sizeof(float)); m_File.read(reinterpret_cast<char*>(&TempModel.Vertices[v].normaly), sizeof(float)); m_File.read(reinterpret_cast<char*>(&TempModel.Vertices[v].normalz), sizeof(float)); m_File.read(reinterpret_cast<char*>(&TempModel.Vertices[v].tu), sizeof(float)); m_File.read(reinterpret_cast<char*>(&TempModel.Vertices[v].tv), sizeof(float)); } m_ModelData.push_back(TempModel); } for(unsigned int i = 0; i < m_NumMeshes; ++i) { m_NumAllVertices += m_Model.NumVertices[i]; } if(FAILED(hResult = d3ddev->CreateVertexBuffer(m_NumAllVertices * sizeof(veModelVertex), D3DUSAGE_WRITEONLY, ModelVertexFVF, D3DPOOL_MANAGED, &m_pVertexBuffer, NULL))) { MessageBox(NULL, "Fehler beim Erzeugen des VertexBuffers", "Fehler aufgetreten", MB_OK | MB_ICONEXCLAMATION); return false; } for(unsigned int i = 0; i < m_NumMeshes; ++i) { void * pData; m_pVertexBuffer->Lock(0, 0, (VOID**)&pData, 0); memcpy(pData, m_ModelData[i].Vertices, sizeof(veModelVertex) * m_Model.NumVertices[i]); m_pVertexBuffer->Unlock(); } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 |
for(unsigned int i = 0; i < m_NumMeshes; ++i) { void * pData; m_pVertexBuffer->Lock(0, 0, (VOID**)&pData, 0); memcpy(pData, m_ModelData[i].Vertices, sizeof(veModelVertex) * m_Model.NumVertices[i]); m_pVertexBuffer->Unlock(); } |
C-/C++-Quelltext |
|
1 |
m_File.read(reinterpret_cast<char*>(&TempModel.Vertices[v].posx), sizeof(float)); |
C-/C++-Quelltext |
|
1 2 3 4 5 6 |
struct veModelVertex { float posx, posy, posz; float normalx, normaly, normalz; float tu, tv; }; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
m_pVertices = new veSModel[m_NumMeshes * m_NumAllVertices]; for(unsigned int i = 0; i < m_NumMeshes; ++i) { for(unsigned int v = 0; v < m_NumVertices; ++v) { m_File.read(reinterpret_cast<char*>(&m_pVertices->Vertices), sizeof(float)); m_File.read(reinterpret_cast<char*>(&m_pVertices->Vertices), sizeof(float)); m_File.read(reinterpret_cast<char*>(&m_pVertices->Vertices), sizeof(float)); m_File.read(reinterpret_cast<char*>(&m_pVertices->Vertices), sizeof(float)); m_File.read(reinterpret_cast<char*>(&m_pVertices->Vertices), sizeof(float)); m_File.read(reinterpret_cast<char*>(&m_pVertices->Vertices), sizeof(float)); m_File.read(reinterpret_cast<char*>(&m_pVertices->Vertices), sizeof(float)); m_File.read(reinterpret_cast<char*>(&m_pVertices->Vertices), sizeof(float)); } } if(FAILED(hResult = d3ddev->CreateVertexBuffer(m_NumAllVertices * sizeof(veModelVertex), D3DUSAGE_WRITEONLY, ModelVertexFVF, D3DPOOL_MANAGED, &m_pVertexBuffer, NULL))) { MessageBox(NULL, "Fehler beim Erzeugen des VertexBuffers", "Fehler aufgetreten", MB_OK | MB_ICONEXCLAMATION); return false; } void * pData; m_pVertexBuffer->Lock(0, 0, (VOID**)&pData, 0); memcpy(pData, m_pVertices->Vertices, sizeof(veModelVertex) * m_NumAllVertices); m_pVertexBuffer->Unlock(); |
C-/C++-Quelltext
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 m_pVertices = new veSModel[m_NumMeshes * m_NumAllVertices]; for(unsigned int i = 0; i < m_NumMeshes; ++i) { for(unsigned int v = 0; v < m_NumVertices; ++v) { m_File.read(reinterpret_cast<char*>(&m_pVertices->Vertices), sizeof(float)); m_File.read(reinterpret_cast<char*>(&m_pVertices->Vertices), sizeof(float)); m_File.read(reinterpret_cast<char*>(&m_pVertices->Vertices), sizeof(float)); m_File.read(reinterpret_cast<char*>(&m_pVertices->Vertices), sizeof(float)); m_File.read(reinterpret_cast<char*>(&m_pVertices->Vertices), sizeof(float)); m_File.read(reinterpret_cast<char*>(&m_pVertices->Vertices), sizeof(float)); m_File.read(reinterpret_cast<char*>(&m_pVertices->Vertices), sizeof(float)); m_File.read(reinterpret_cast<char*>(&m_pVertices->Vertices), sizeof(float)); } }
Ich habe in einem Buch nachgeschaut wegen den Indices. Es ist so, wenn man einen IndexBuffer verwendet, dann braucht man für zwei Dreiecke nur 4 Vertices anstatt 6, da die zwei Vertices die zweimal entstehen nur einmal verwendet werden. Das macht der IndexBuffer aber bestimmt selber, oder? Wenn ja, dann kann ich ja die Vertexdaten so erzeugen wie bisher.
Werbeanzeige