OK-River
Registrado: 17 Jun 2007 Mensajes: 1
| Publicado: 17/06/2007 12:52 pm | | | Título: Problemas con lib3ds (ayuda urgente...) |
| Estoy usando esta librería para cargar modelos 3DS y usarlos con OpenGL. No consigo que todos los modelos se muestren bien: un alto porcentaje de ellos me salen con las piezas descolocadas e incluso invertidas. Lo que sé es que las piezas se definen en coordenadas relativas y hay que aplicarles transformaciones para situarlas, pero las únicas transformaciones de las que tengo constancia son:
- Matriz de transformación de malla - Matriz de transformación de nodo (si lo hay, asociado a la malla) - Vector "pivote" del nodo (si hay nodo).
Lo que hago es aplicar la inversa de la matriz de la malla (no sé por qué es la inversa, sólo sé que es así, lo saqué del ejemplo de la librería), y luego la matriz del nodo (sin invertir) y una traslación basándome en el pivote. Las transformaciones las hago para cada malla, es decir, recorro mallas y aplico su transformación, la del nodo asociado si lo hay y la del pivote del nodo si lo hay; acto seguido borro estas transformaciones para la siguiente malla (glPushMatrix()/glPopMatrix()). La traslación exacta que debo hacer con el pivote tampoco la tengo clara... teniendo en cuenta que los ejes de 3DStudio son distintos a los de OpenGL y me veo obligado a introducir las coordenadas de los vértices en otro orden y/o cambiarles el signo para que concuerde con las coordenadas de mundo en OpenGL. Ahora mismo tengo esta traslación:
Lib3dsObjectData *d; d=&node->data.object; glMultMatrixf(&node->matrix[0][0]); glTranslatef(d->pivot[0], -d->pivot[1], d->pivot[2]);
simplemente porque es la que mejor resultado me ha dado colocando el modelo completo, pero tal vez no sea adecuada para la colocación de cada pieza...
Tengo entonces las dudas de... ¿exactamente cómo se debe usar el pivote? Y ¿hay alguna otra transformación que debería tener en cuenta para cada pieza?
Gracias de antemano y saludos. |
|