Ma non sembra ancora funzionare bene.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;
La tua soluzione invece è interessante.
Come faresti poi, per mettere nell'elemento 5 l'indice di adiacenza tra 0 e 2 e cosi via?

Rispondi quotando