Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Formatos 3d

Iniciado por sés, 13 de Abril de 2004, 03:30:33 PM

« anterior - próximo »

sés

 Según tengo entendido (yo no lo uso) con el 3D Studio Max se pueden hacer objetos y luego colocar referencias a ese objeto en distintas partes, de forma que si se modifica el original, se modifican todas sus copias.

Hasta aquí bien, ¿pero cómo puedo obtener esa información?

El formato ASE no refleja eso, en su lugar repite cada objeto N veces, lo que no me soluciona mucho.
El formato 3DS no recuerdo que lo tuviera (hace mucho que lo usé).
Supongo que en el formato MAX tiene que venir la escena de esa forma (un solo objeto y referencias a el), pero no encuentro información sobre este formato.

¿Alguien sabe dónde encontrar información del formato MAX o de cómo hacer lo que quiero sin tener que hacer un minieditor de escenarios?
Soy indeciso... ¿o no?

Astat

 Yo uso mi expotador para sacar la info de los XRefs, si te sirve de algo, ahi va el codigo que identifica si un nodo de 3dsmax es un XRef:


IXRefObject *cExport::GetXRef(INode *pNode)
{
 Object *pObj = pNode->GetObjectRef()->FindBaseObject();

 if (pObj->SuperClassID()==SYSTEM_CLASS_ID && pObj->ClassID()==Class_ID(XREFOBJ_CLASS_ID, 0))
   return (IXRefObject*)pObj;

 return NULL;
}

sés

 Supongo que eso es parte del código de un plugin. Esa es otra opción, pero nunca he hecho ninguno y no sé si tardaría mucho en hacer un exportador sencillito.

¿Es muy complicado hacer uno? Lo único que quiero es generar un fichero en un formato propio (y bastante sencillo, al menos de momento).

¿Hay algún ejemplo sencillito?


...*buscando en google*
Soy indeciso... ¿o no?

Astat

 Casualmente el ultimo articulo que escribi para Edevi versa sobre eso, hechale un ojo:

http://edevi.manuelfl.com/  (el nº5)

Solo es la primera parte, pero inlcuye el esqueleto para comenzar a hacer tu propio exportador. Aqui puedes ver la primera version del formato de fichero:


http://www.martinbr.com/misc/format.txt


Un saludo

Lord Trancos 2

 Otra opcion seria usar MaxScript.
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

sés

 
Cita de: "Lord Trancos 2"Otra opcion seria usar MaxScript.
¿Y qué es más rápido o sencillo?

*cotilleando los enlaces de Astat*
Soy indeciso... ¿o no?

Lord Trancos 2

 Hombre... al principio cuesta un poco cogerle el tranquilo al MaxScript.... pero una vez sabes mas o menos como funciona, resulta facil y rapido.

Aqui te pongo un script de ejemplo que me hice para guardar todas las esferas de una escena. Lo usaba para tener información para despues detectar colisiones. Como puedes ver es corto, sencillo y no es necesario compilar.


-- This script will save position and radius of all spheres
-- in the scene inside a binary file.
--
-- by Lord Trancos

-- Count number of spheres
_numSph = 0
if (objects.count > 0) then
(
 for _cnt = 1 to objects.count do
 (
   if iskindof objects[_cnt] sphere do _numSph = _numSph + 1
 )
)

-- Any sphere ?
if (_numSph > 0) then
(

 -- Open save dialog
 _fn = getSaveFileName types:"SPH files|*.sph"
 format "%" _fn

 -- if user choosed a file...
 if _fn != undefined then
 (

   -- Open then file
   _f = fopen _fn "wb"
   if _f != undefined then
   (
     -- Write header
     WriteString _f "SPH"   -- File ID
     WriteLong   _f 1       -- File version
     WriteLong   _f _numSph -- # of spheres
   
     -- Now write sphere array
     for _cnt = 1 to objects.count do
     (
       if iskindof objects[_cnt] sphere do
       (
         WriteFloat _f -objects[_cnt].position.x  -- WARNING! invert X
         WriteFloat _f  objects[_cnt].position.z  -- WARNING! swap Y and Z
         WriteFloat _f  objects[_cnt].position.y  -- WARNING! swap Y and Z
         WriteFloat _f  objects[_cnt].radius
         WriteFloat _f (objects[_cnt].radius * objects[_cnt].radius)
       )
     )

     -- Close the file
     fclose _f
     messageBox "Work finished."
   )
 )
)
else
(
 messageBox "ERROR: 0 sphere(s) found."
)


Todo depende de lo que quieras hacer. Si es muy complejo te recomiendo que uses C que seguro q lo controlas. Si es una chorradita prueba con MaxScript.
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

Lord Trancos 2

 Para saber si un objeto es xRef (el codigo de Astat) en lugar de una esfera seria algo asin:


       if ClassOf objects[_cnt] == XRefObject then
...


Lo que pasa es que algo me dice que tu no te refieres a los objetos proxy (xRefs) si no a simples objetos que han sido clonados usando la opcion de Instancia/Referencia.... en ese caso no se como seria :P
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

Lord Trancos 2

Cita de: "sés"¿Alguien sabe dónde encontrar información del formato MAX o de cómo hacer lo que quiero sin tener que hacer un minieditor de escenarios?
Ni se te ocurra meterle mano a ese formato o acabaras loco :P
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

AK47

 O podrias guardar las fases en .3ds, usar los Pulsar LM Tools de Lord Trancos y leerte sus ficheros que tiene un formato sencillo. Aunque luego estaria el tema de colocar los items, etc... Yo para eso pienso usar un editor in-game  :)  (No muy complicado, claro)

seryu

 una recomendación, busca exportadores de motores/juegos y métete en su código fuente, es la mejor forma de aprender.

el sdk del max también trae ejemplos útiles, aunque personalmente me parecen peores que los de maya.

sés

 Creo que me decidiré por el plugin. Con el código de Astat me podré guiar bastante bien.
A ver si este finde me puedo poner a trastear con un poco de tiempo.

--- Para Astat ---
Algo que estaría muuuy bien para tu tutorial, como base para un exportador sería un plugin MÍNIMO, o sea, vértices, materiales y, como mucho, luces. Incluso se podrían eliminar los materiales.

Creo que lo ideal (hablo como alguien que busca algo de lo que partir) sería ese plugin mínimo, limitándose a mostrar por pantalla (o por donde sea) lo que va leyendo, sin preocuparse de inventar ningún formato.
Soy indeciso... ¿o no?

BeRSeRKeR

 Hey.

En el SDK de MAX te viene un exportador al formato ASCII (el ASE) que es el que suele utilizar todo el mundo para empezar en esto de los plugins. Sí es cierto que también tiene exportación de las keys de animación y demás, pero creo que viene todo bastante separado de forma que resulte más sencillo de entender.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Zaelsius

 Por cierto, ¿el SDK de 3DS Max 6 ya es compatible con Visual Studio .NET 2002 o 2003? El último que probé fue el 4 pero pedia VC++ 6.0  :angry:  

Astat

 
CitarAlgo que estaría muuuy bien para tu tutorial, como base para un exportador sería un plugin MÍNIMO, o sea, vértices, materiales y, como mucho, luces. Incluso se podrían eliminar los materiales.

Para cuando este el Edevi nº6 (espero que no tarde otros 6 meses en salir, como el nº5.. jeje) mi intencion era tener un exportador de mallas estaticas (con materiales) y un pequeño visor para ver los modelos. Al final de esa serie de tutoriales me gustaria hacer un exportador de escenas (modelos, animaciones, luces, objetos definidos en MaxScript, etc).

Offtopic: No viene mucho a cuento, pero este mes sale la revista "VideoJuegos" una entrevista que me hizieron el mes pasado, si quereis escuchar las tonterias que digo, pues ya sabeis... (nooo)  






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.