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?
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;
}
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*
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.txtUn saludo
Otra opcion seria usar MaxScript.
Cita de: "Lord Trancos 2"Otra opcion seria usar MaxScript.
¿Y qué es más rápido o sencillo?
*cotilleando los enlaces de Astat*
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.
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
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
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)
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.
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.
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.
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:
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)
Rescato este post para auto-contestarme: el SDK de 3d studio max 6 es compatible con Visual Studio .Net 2002 y 2003. :)
En el artículo de Astat(edevi nº5) lo comenta pero no me habia fijado (rules)
Hablando del tema de formatos 3d, no se si sabeis que compañias como Intel, Adobe, Microsoft y otras 30 mas (agrupadas en el 3D Industry Forum, 3DIF), estan desarrollando lo que seria un formato universal para 3D (U3D). Pretenden que sea extensible y muy flexible para soportar todas las nuevas caracteristicas que vayan surguiendo.
A mi me parece una idea cojonuda, la verdad. Que el grafista use lo que quiera para modelar, que mientras soporte U3D, lo podre cargar en mi motor.
http://www.theregister.co.uk/2004/04/21/intel_u3d/
¿Teneis timings sobre U3D?
O_O u3d es el formato nativo de Ultimate unwrap...quiero decir, lo llamó así, hace mucho tiempo.
Citar¿Teneis timings sobre U3D?
Dicen que estara listo para finales de año :(
El foro donde hablan del tema esta bastante restringido, asin que solo nos queda esperar (grrr)
Citaru3d es el formato nativo de Ultimate unwrap...quiero decir, lo llamó así, hace mucho tiempo
No tiene nada que ver con eso, a pesar de coincidir en la extension.