¿Tipo de modelo 3D recomendado para el modelo de personaje del juego, cargado manualmente?

StackOverflow https://stackoverflow.com/questions/585769

  •  06-09-2019
  •  | 
  •  

Pregunta

Estoy escribiendo un juego en JOGL y necesito representar al personaje del juego.Planeo usar animación esquelética para los movimientos del personaje y, por supuesto, el personaje tendrá piel.Parece que no puedo encontrar ningún buen cargador de modelos para JOGL, así que planeo cargar el tipo de archivo yo mismo, según las especificaciones o algo así.También planeo usar Blender como mi modelador 3D, por lo que sería mejor algún tipo que exista allí.

¿Qué tipo de archivo me recomiendas usar?.¿mezcla?.x, .3ds, .md2/3/5, ...??Recuerde que me gustaría algo con un formato claro y definido para poder escribir el cargador sin tener que desofuscar algún formato de archivo aleatorio, y debe ser compatible con las funciones antes mencionadas.¡Cualquier otra información que puedas brindar sobre por qué lo elegiste y por qué es mejor también sería de gran ayuda!

¡Gracias!

EDITAR:Escribiré un exportador Blender MS3D.Cuando lo termine lo publicaré aquí.

Mientras tanto, vea mi respuesta marcada a continuación;pero desde entonces han sucedido más cosas.No voy a mantener esto actualizado con lo que estoy haciendo, pero básicamente encontré jMonkey Engine y ya tiene un importador de ms3d y otros subsistemas que había comenzado a escribir a mano.A pesar del tema del gráfico de escena (razón por la cual estaba evitando Java3D), creo que será mi mejor opción unir fuerzas con él, así que eso es lo que estoy haciendo.

¿Fue útil?

Solución 2

En primer lugar, gracias a los otros dos que respondieron.Además, basszero, tenías razón sobre el archivo de mezcla, ¡y debería haber consultado Wikipedia primero!Es un volcado binario casi inútil de la memoria de Blender.

Poco después de escribir esta pregunta, decidí seguir adelante y escribir un cargador OBJ, porque 1) me daría la experiencia de cargar un formato de archivo 3D y 2) parecía un formato agradable y de uso común pero también fácil de cargar.Terminó siendo una gran decisión, porque me hizo darme cuenta de que en realidad no sabía la diferencia entre un objeto y un grupo, y tampoco sabía mucho sobre materiales.Me ayudó a establecer el código para estas estructuras 3D.

Ambas respuestas recomiendan formatos basados ​​en XML.No quiero un formato XML.No creo que este sea el lugar adecuado para XML.Creo que esos formatos se crearon porque XML es flexible, universal y fácil de crear esquemas, pero eso no es lo que estoy buscando.Quiero un formato que se cargue rápidamente (XML no lo es, en términos relativos), que no tenga que ser flexible ni legible por humanos, y algo para lo que pueda escribir un importador, en lugar de depender de bibliotecas XML.basszero incluso dijo "a costa de ser XML", y tiene toda la razón;es un costo que no creo que valga la pena.

Mi cargador OBJ está listo.Lo separé de las clases de modelo reales y lo implementé con una interfaz MeshFactory para poder en el futuro escribir un cargador diferente si quisiera...Cual es el plan.He estado investigando más los últimos días y me decidí por el formato ms3d.

El formato ms3d admite aparejos esqueléticos (uniones) y animación esquelética de fotogramas clave y, además, admite un mapa de textura y un mapa alfa.Además, es un formato binario fácilmente legible por computadora que no desperdicia espacio (como lo hacen XML y OBJ) con etiquetas y etiquetas legibles por humanos y demás.

Blender, desafortunadamente, no tiene un script de exportación ms3d (que funcione), por lo que escribiré un script yo mismo.Afortunadamente, no es un proceso difícil y puedes leer la documentación de Blender y utilizar otros exportadores como ejemplos.Tendré que repasar mi Python, pero por lo demás parece muy sencillo, por lo que he visto en otros scripts.

El lado de Java debería ser fácil; de hecho, será incluso más fácil que el formato OBJ porque ms3d está más estructurado.encontré especificaciones para el formato ms3d en línea, en estilo C (¡genial!), por lo que se explican por sí solos y no tengo más preguntas sobre el formato.Basaré mi implementación en esta especificación, aunque es posible que más adelante implemente mis propias variaciones;Eso es lo bueno de escribir mi propio importador y exportador, puedo modificar el formato como mejor me parezca.

Considerándolo todo, he decidido que esta es la mejor solución.

Y basszero, tienes toda la razón, como he visto en mi cargador OBJ:"Una vez que lo hayas leído todo, la organización de los datos (lista de visualización, texturas, matriz de vértices, búfer de vértices, etc.) y la representación son algo completamente diferente".

Cruachan:No hay Java3D para mí, me quedo con JOGL.De hecho, soy dueño de ese libro (aunque no está disponible en este momento), aunque no recuerdo cómo cargó los modelos, pero estoy bastante seguro de que usó los cargadores de formato Java3D que lo hacen automáticamente.No es algo que esté planeando usar...¡Lo siento!

-Raquitismo

Otros consejos

Si se puede vivir con sólo la geometría, o está preparado para manejar su propia texturizado, entonces obj es probablemente el formato de archivo 3D más sencillo y ampliamente apoyado. Es básicamente el ascii de modelado 3D.

De lo contrario me inclino por VRML. Es bien definido y hay al menos algo de código en torno a empezar. He cargado con éxito modelos VRML en Java 3D utilizando el código de libre acceso. Tamaño de archivo nativo tiende a ser grande, pero que puede ser resuelto mediante el uso de un formato comprimido.

No recomendaría .3 ds. La única vez que he manejado un lector para este formato era en Delphi Pascal, y es desordenado, mal definidos, difíciles de procesar y tiende a tener un montón de 'variaciones' de tal manera que aunque he conseguido mis modelos de manejo del lector exportados desde sí 3D-MAX bien rechazó muchos modelos de otros paquetes que aseguraban estar en formato 3DS, pero no se formaron correctamente.

añadido: También me gustaría recomendar que echar un vistazo a la API Java 3D y el libro de O'Reilly Killer Juego de programación en Java ya que incluso si usted no va por el camino de Java 3D es probable que responder a muchas de sus preguntas.

Creo .blend es sobre todo una copia binaria de las estructuras de memoria de la licuadora, no te va a ayuda mucho fuera de la licuadora. Utilizar Blender a modelo, pero la exportación a un formato diferente.

Puede ser un poco más detallado, pero he oído Collada envuelve información en 3D muy bien (a costa de ser XML). La ventaja es que es posible que haya una definición de esquema hotel fenomenal que se podía pasar a través de JAXB que resulta en un analizador completo w / no trabajo de usted.

Los formatos .MD * también pueden ser una buena alternativa. Son de los motores de ID (Q1, Q2, Q3, Q4, Doom 3) y que están documentados. También contienen secuencias de animaciones.

Una vez que lo tienes todo leer en, organización de datos (lista de visualización, texturas, variedad vértice, tampón de vértice, etc) y de representación son una bestia completamente diferente.

Woah, hombre, vas a liberar el exportador MS3D al terminarla? Y si es así, ¿cómo se viene? Es realmente necesario tener en mis manos un exportador que trabaja para la animación y que utiliza fragMOTION, y parece que lo que estás haciendo es mi última esperanza.

Hay un lector de archivos .blend de código abierto que puede extraer cualquier información de un archivo .blend, incluyendo mallas, texturas, esqueleto y animación.

Vea algunos ejemplos usando ogro y Irrlicht aquí: http://gamekit.googlecode.com

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top