Ciao,
prova con questo codice:
codice:
(*tris) = new NmRawTriangle [(numTris)];
	if ((*tris) == NULL)
	{
		cerr << "Unable to allocate space for " << (*tris) << " triangles\n";
		return false;
	}
	printf("numtris=%d\n",numTris);
        NmRawTriangle *tmp_tris = (*tris); // Ora tmp_tris è in effetti l'array
	for(int i=0;i<numtris;i++){
		int a,b,c;
		fscanf(fp,"%d %d %d",&a,&b,&c);
		
		printf("%d %d %d %d\n",i,a,b,c);
		//tris[i]=new NmRawTriangle; sbagliato
                tmp_tris->vert[0].x=vertex[a][0];
		tmp_tris->vert[0].y=vertex[a][1];
		tmp_tris->vert[0].z=vertex[a][2];
		tmp_tris->vert[1].x=vertex[b][0];
		tmp_tris->vert[1].y=vertex[b][1];
		tmp_tris->vert[1].z=vertex[b][2];
		tmp_tris->vert[2].x=vertex[c][0];
		tmp_tris->vert[2].y=vertex[c][1];
		tmp_tris->vert[2].z=vertex[c][2];
                tmp_tris++; // Punto al successivo triangolo nell'array.
}
La riga (*tris) = new NmRawTriangle [(numTris)]; già crea numTris triangoli...non è necessario creare un triangolo per ogni nuovo elemento. Forse ti sei confusa perchè tris è un doppio
puntatore (necessario per allocare l'array internamente alla funzione e poi passarlo al chiamante) e quindi non puoi usare tris[i] ma devi prima dereferenziare tris per ottenere l'effettivo array di triangoli che ha allocato con la new.
Comunque ricordati che la memoria la devi liberare dopo che l'hai usata.