Ecco fatto, si è mosso qualcosa.
Ho caricato in un file .txt con un intero modello al suo interno, eccolo numeri qui
Attenzione è grosso, 1,4 mega circa
Il file è formato da svariati numeri, ogni 9 numeri è un vertice completo (3 numeri per la posizione, 3 per la normale, 3 per le coordinate di texture).
Dovete semplicemente caricarlo in un grosso array di float, e poi provare questo codice
D3DVector è una struttura che contiene 3 float: x y z.codice:#include <vector> const unsigned int Indici = 13992; UINT *Indices = new UINT[Indici]; //Creazione IndexBuffer if (Epsilon != 0.0f) { std::vector<float> OrigVertices; std::vector<float> NewVertices; std::vector<unsigned int> OptIndices; for (UINT i = 0; i < Indici;i++) { Indices[i] = i; } OptIndices.insert(OptIndices.begin(),Indices,Indices + this->ColladaBuffer.Indici); OrigVertices.insert(OrigVertices.begin(),buffer,buffer + bufsize); NewVertices.insert(NewVertices.begin(),OrigVertices.begin(),OrigVertices.begin() + 9); { D3DVECTOR Vx,Nx,Tx; D3DVECTOR VxN,NxN,TxN; int OrigVertIdx, NewVertIdx; bool DuplicateV; for (int i = 9; i < (OrigVertices.size());i += 9) { OrigVertIdx = i/9; Vx.x = OrigVertices[i]; Vx.y = OrigVertices[i+1]; Vx.z = OrigVertices[i+2]; Nx.x = OrigVertices[i+3]; Nx.y = OrigVertices[i+4]; Nx.z = OrigVertices[i+5]; Tx.x = OrigVertices[i+6]; Tx.y = OrigVertices[i+7]; Tx.z = OrigVertices[i+8]; DuplicateV = false; for (int j = 0; j < (NewVertices.size());j +=9 ) { VxN.x = NewVertices[j]; VxN.y = NewVertices[j+1]; VxN.z = NewVertices[j+2]; NxN.x = NewVertices[j+3]; NxN.y = NewVertices[j+4]; NxN.z = NewVertices[j+5]; TxN.x = NewVertices[j+6]; TxN.y = NewVertices[j+7]; TxN.z = NewVertices[j+8]; if (fabs(Vx.x-VxN.x) < Epsilon && fabs(Vx.y-VxN.y) < Epsilon && fabs(Vx.z-VxN.z) < Epsilon) { NewVertIdx = j/9; OptIndices[OrigVertIdx] = NewVertIdx; DuplicateV = true; break; } } if (!DuplicateV) { NewVertIdx = (NewVertices.size())/9; NewVertices.push_back(Vx.x); NewVertices.push_back(Vx.y); NewVertices.push_back(Vx.z); NewVertices.push_back(Nx.x); NewVertices.push_back(Nx.y); NewVertices.push_back(Nx.z); NewVertices.push_back(Tx.x); NewVertices.push_back(Tx.y); NewVertices.push_back(Tx.z); OptIndices[OrigVertIdx] = NewVertIdx ; } } } delete[] buffer; bufsize = NewVertices.size(); buffer = new float[bufsize]; for (int i = 0; i < bufsize;i++) buffer[i] = NewVertices[i]; for ( int h = 0; h < Indici;h++) Indices[h] = OptIndices[h];
Vedo se il mio amico mi da la sua implementazione del problema...grazie!

Rispondi quotando