codice:
unsigned int i0, i1, i2;
unsigned int j0, j1, j2;
for(unsigned int i=0; i<this->MeshData.ColladaBuffer.Indici/3; i++)
{
i0 = this->MeshData.Indices[i*3+0];
i1 = this->MeshData.Indices[i*3+1];
i2 = this->MeshData.Indices[i*3+2];
pAdj[i*6+0] = i0;
pAdj[i*6+1] = 0xffffffff;
pAdj[i*6+2] = i1;
pAdj[i*6+3] = 0xffffffff;
pAdj[i*6+4] = i2;
pAdj[i*6+5] = 0xffffffff;
for(unsigned int j=0; j<this->MeshData.ColladaBuffer.Indici/3; j++)
{
if( j != i ) // don't check a triangle against itself
{
j0 = this->MeshData.Indices[j*3+0];
j1 = this->MeshData.Indices[j*3+1];
j2 = this->MeshData.Indices[j*3+2];
// check for i0 and i1
if( j0 == i0 )
{
if(j1==i1) pAdj[i*6+1] = j2;
else if(j2==i1) pAdj[i*6+1] = j1;
} else if( j1==j0 )
{
if(j0==i1) pAdj[i*6+1] = j2;
else if(j2==i1) pAdj[i*6+1] = j0;
} else if( j2==i0 )
{
if(j0==i1) pAdj[i*6+1] = j1;
else if(j1==i1) pAdj[i*6+1] = j0;
}
// check for i1 and i2
if( j0 == i1 )
{
if(j1==i2) pAdj[i*6+3] = j2;
else if(j2==i2) pAdj[i*6+3] = j1;
} else if( j1==i1 )
{
if(j0==i2) pAdj[i*6+3] = j2;
else if(j2==i2) pAdj[i*6+3] = j0;
} else if( j2==i1 )
{
if(j0==i2) pAdj[i*6+3] = j1;
else if(j1==i2) pAdj[i*6+3] = j0;
}
// check for i2 and i0
if( j0 == i2 )
{
if(j1==i0) pAdj[i*6+5] = j2;
else if(j2==i0) pAdj[i*6+5] = j1;
} else if( j1==i2 )
{
if(j0==i0) pAdj[i*6+5] = j2;
else if(j2==i0) pAdj[i*6+5] = j0;
} else if( j2==i2 )
{
if(j0==i0) pAdj[i*6+5] = j1;
else if(j1==i0) pAdj[i*6+5] = j0;
}
}
}
}
this->MeshData.ColladaBuffer.Indici *= 2;
Ma non sembra ancora funzionare bene.
La tua soluzione invece è interessante.
Come faresti poi, per mettere nell'elemento 5 l'indice di adiacenza tra 0 e 2 e cosi via?