Vale aprovechando que en la versión ASCII las coordenadas están igual que en un array he probado a copiarlas y pegarlas en mi programa para ver cómo queda la cosa antes de hacer un cargador y pese a intentarlo de 3 formas distintas siempre hay 3 o 4 triángulos (Es un simple cubo) que se muestran mal, ¿Qué puede ser? ¿Tengo que ordenarlos o algo así?
Con el .3DS me venían los vértices y los índices y me me cargaba la malla bien (sin normales eso si xD)
glTranslatef(0,3,0);
glDisable(GL_TEXTURE_2D);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
float vertices[108]={-3.10156011581421,-3.1333703994751,0,3.10156011581421,-3.1333703994751,0,-3.10156011581421,3.1333703994751,0,3.10156011581421
,3.1333703994751,0,-3.10156011581421,-3.1333703994751,5.31373310089111,3.10156011581421,-3.1333703994751,5.31373310089111
,-3.10156011581421,3.1333703994751,5.31373310089111,3.10156011581421,3.1333703994751,5.31373310089111,3.10156011581421
,3.1333703994751,0,-3.10156011581421,-3.1333703994751,0,3.10156011581421,3.1333703994751,5.31373310089111,-3.10156011581421
,-3.1333703994751,5.31373310089111,-3.10156011581421,-3.1333703994751,0,3.10156011581421,-3.1333703994751,0,3.10156011581421
,-3.1333703994751,5.31373310089111,3.10156011581421,-3.1333703994751,5.31373310089111,-3.10156011581421,-3.1333703994751
,5.31373310089111,-3.10156011581421,-3.1333703994751,0,3.10156011581421,-3.1333703994751,0,3.10156011581421,3.1333703994751
,0,3.10156011581421,3.1333703994751,5.31373310089111,3.10156011581421,3.1333703994751,5.31373310089111,3.10156011581421
,-3.1333703994751,5.31373310089111,3.10156011581421,-3.1333703994751,0,3.10156011581421,3.1333703994751,0,-3.10156011581421
,3.1333703994751,0,-3.10156011581421,3.1333703994751,5.31373310089111,-3.10156011581421,3.1333703994751,5.31373310089111
,3.10156011581421,3.1333703994751,5.31373310089111,3.10156011581421,3.1333703994751,0,-3.10156011581421,3.1333703994751
,0,-3.10156011581421,-3.1333703994751,0,-3.10156011581421,-3.1333703994751,5.31373310089111,-3.10156011581421,-3.1333703994751
,5.31373310089111,-3.10156011581421,3.1333703994751,5.31373310089111,-3.10156011581421,3.1333703994751,0} ;
float normales[108]={0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,1,0,0,1,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1
,0,0,-1,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0
,-1,0,0,-1,0,0};
short index[36]={0,2,-4,8,1,-10,4,5,-8,10,6,-12,12,13,-15,15,16,-18,18,19,-21,21,22,-24,24,25,-27,27,28,-30,30,31,-33,33,34,-36};
glVertexPointer(3, GL_FLOAT, 0, vertices);
glNormalPointer(GL_FLOAT, 0, normales);
glDrawArrays(GL_TRIANGLES, 0, 36);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
int i;
glTranslatef(10,0,0);
for (i=0; i<12; i++)
{
glBegin(GL_TRIANGLES);
glNormal3f(normales[index[i*3]*3],normales[index[i*3]*3+1],normales[index[i*3]*3+2]);
glVertex3f(vertices[index[i*3]*3],vertices[index[i*3]*3+1],vertices[index[i*3]*3+2]);
glNormal3f(normales[(index[i*3]+1)*3],normales[(index[i*3]+1)*3+1],normales[(index[i*3]+1)*3+2]);
glVertex3f(vertices[(index[i*3]+1)*3],vertices[(index[i*3]+1)*3+1],vertices[(index[i*3]+1)*3+2]);
glNormal3f(normales[(index[i*3]+2)*3],normales[(index[i*3]+2)*3+1],normales[(index[i*3]+2)*3+2]);
glVertex3f(vertices[(index[i*3]+2)*3],vertices[(index[i*3]+2)*3+1],vertices[(index[i*3]+2)*3+2]);
glEnd();
}
glTranslatef(10,0,0);
for (i=0; i<12; i++)
{
glBegin(GL_TRIANGLES);
glNormal3f(normales[i*9],normales[i*9+1],normales[i*9+2]);
glVertex3f(vertices[i*9],vertices[i*9+1],vertices[i*9+2]);
glNormal3f(normales[i*9+3],normales[i*9+4],normales[i*9+5]);
glVertex3f(vertices[i*9+3],vertices[i*9+4],vertices[i*9+5]);
glNormal3f(normales[i*9+6],normales[i*9+7],normales[i*9+8]);
glVertex3f(vertices[i*9+6],vertices[i*9+7],vertices[i*9+8]);
glEnd();
}
if (texturas)
glEnable(GL_TEXTURE_2D);