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
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 |
//Die Indexdaten kopieren und umrechnen for(int i2=0; i2<(*m_PartIt)->GetNumIndices(); i2++) { pIndices[i2]=pIndex[i2]; } for(i2=0; i2<(*m_PartIt)->GetNumIndices(); i2++) { pIndices[i2]+=(unsigned short)iTempNumIndices; } iTempNumIndices+=(*m_PartIt)->GetNumVertices(); |
Quellcode |
|
1 |
pIndices[i2]+=(unsigned short)iTempNumIndices; |
Quellcode |
|
1 2 3 4 5 6 |
m_PartIt=m_Partliste.begin(); for(i=0; i<m_Partliste.size(); i++) { // Mache was m_PartIt++; } |
Quellcode |
|
1 2 3 4 |
for(m_PartIt = m_Partlist.begin(); m_PartIt != m_Partlist.end(); ++m_PartIt) { // Mache was } |
Quellcode |
|
1 |
pIndices[i2]=pIndex[i2]+(unsigned short)iTempnumIndices; |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 |
unsigned short offset = 0; // Offset für die Index-Werte for(m_PartIt = m_Partlist.begin(); m_PartIt != m_Partlist.end(); ++m_PartIt) { for(int c = 0; c < (*m_PartIt)->GetNumIndices(); ++c) { unsigned short index = (*m_PartIt)->GetIndices()[c] + offset; fwrite(&index, sizeof(unsigned short), 1, Datei); } offset += (*m_PartIt)->GetNumIndices(); } |
Quellcode |
|
1 |
offdset+=(*m_PartIt)->GetNumVertices(); |
Ja klar ein 16Bit Wert reicht für genau 65.536 Index-Werte. Das sollte im Normalfall reichen. Wenn man allerdings mehrere Modell zusammenkopiert sollte man möglichst darauf achten das man diesen Wert nicht überschreitet. Denn tatsächlich fängt er dann wieder bei NULL an zu Zählen. Aber nicht D3D sondern nur der Wert der IndizesZitat
Das mit dere Indexgröße: Also wenn ich zu viele hab, fängt er dann wieder vorne an zu zählen? Naja, ich könnte noch ne Abfrage reinbauen, die dann notfalls ne Fehlermeldung ausgibt,. Außerdem könnte ich in das Modellformat noch einen Eintrag für Index, bzw. Vertexformat machen. Allerdings reichen 16 Bit doch glaub ich schon für 64.000 Indices aus, oder?
Quellcode |
|
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 |
case CT_INDICES://Die Indices laden dwChunkSizeTest+=fread(&iNumIndices, sizeof(int), 1, Datei)*sizeof(int); dwChunkSizeTest+=fread(&dwIndexFormat, sizeof(DWORD), 1, Datei)*sizeof(DWORD); if(dwIndexFormat==sizeof(unsigned short))//Testen ob die Indices dads richtigeFormat haben! { Indices=new unsigned short[iNumIndices]; dwChunkSizeTest+=fread(Indices, sizeof(unsigned short), iNumIndices, Datei)*sizeof(unsigned short); } else { Error("Modell::Laden"); Error(Dateiname); Error("CT_INDICES speichert Indices im falschen Format!"); } //ChunkSizeTest if(dwChunkSizeTest!=ChunkHeader.dwChunkSize) { Error("Falsche Chunkgröße: CT_INDICES"); Error("angegeben:"); Error(ChunkHeader.dwChunkSize); Error("gelesen:"); Error(dwChunkSizeTest); Error("Anzahl Indices angegeben:"); Error(iNumIndices); } break; |
Quellcode |
|
1 2 3 4 5 6 7 |
Falsche Chunkgröße: CT_INDICES angegeben: 104.000000 gelesen: 98.000000 Anzahl Indices angegeben: 48.000000 |
Quellcode |
|
1 |
if(ferror(datei) |
Werbeanzeige