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

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];
D3DVector è una struttura che contiene 3 float: x y z.
Vedo se il mio amico mi da la sua implementazione del problema...grazie!