Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





3dsmax (max A Xml)

Iniciado por zupervaca, 01 de Julio de 2005, 10:47:05 PM

« anterior - próximo »

zupervaca

 ¿conoceis algun exportador para 3dsmax que exporte archivos en xml?

saludos

Zaelsius

 La distribución de Ogre3D para Windows incluye un exportador para 3DS Max. Ogre soporta un formato propio que puede estar bien en XML o en binario.

Si mal no recuerdo, el exportador guarda los modelos en XML por defecto, para luego ser convertidos a binario con otra utilidad.

zupervaca

 gracias, atraves de ejemplos y demas milongas he llegado a hacer un mini exportador de objetos, vertices y caras

filename="c:\pruebas.xml"
xmlFile = createFile filename
-- Cabecera del xml
format "%" "<xml>\r\n" to: xmlFile
-- Exportar toda la geometria
for obj in geometry do
(
-- Exportar atributos generales del modelo
format "<mesh name=\"%\" px=\"%\" py=\"%\" pz=\"%\" rx=\"%\" ry=\"%\" rz=\"%\" sx=\"%\" sy=\"%\" sz=\"%\">\r\n" obj.name obj.pos.x obj.pos.z obj.pos.y obj.rotation.x obj.rotation.z obj.rotation.y obj.scale.x obj.scale.z obj.scale.y to: xmlFile
-- Obtener la malla
local time = 0
at time time mesh = snapShotAsMesh obj
-- Exportar sus vertices
format "\t<vertexlist total=\"%\">\r\n" mesh.numverts to: xmlFile
for nV = 1 to mesh.numverts do
(
 local vertex = getVert mesh nV
 local x = (vertex.x-obj.pos.x) / obj.scale.x
 local y = (vertex.z-obj.pos.z) / obj.scale.z
 local z = (vertex.y-obj.pos.y) / obj.scale.y
 local normal = getNormal mesh nV -- TODO:
 local nx = normal.x
 local ny = normal.y
 local nz = normal.z
 format "\t\t<vertex n=\"%\" x=\"%\" y=\"%\" z=\"%\" nx=\"%\" ny=\"%\" nz=\"%\"></vertex>\r\n" nV x y z nx ny nz to: xmlFile
)
format "\t</vertexlist>\r\n" to: xmlFile
-- Exportar caras
format "\t<facelist total=\"%\">\r\n" mesh.numfaces to: xmlFile
for nF = 1 to mesh.numfaces do
(
 local face = getFace mesh nF
 local i1 = face[1] as integer
 local i2 = face[2] as integer
 local i3 = face[3] as integer
 format "\t\t<face n=\"%\" i1=\"%\" i2=\"%\" i3=\"%\"></face>\r\n" nF i1 i2 i3 to: xmlFile
)
format "\t</facelist>\r\n" to: xmlFile
-- Final de la exportacion del modelo
format "</mesh>\r\n" to: xmlFile
)
-- Pie del archivo
format "%" "</xml>\r\n" to: xmlFile
close xmlFile

es este enjendro, es mi primer script con lo que no creo que este muy bien hecho, lo que me falta ahora mismo es poder obtener los vertices sin rotacion alguna ya que esta se guarda en rx, ry y rz, ¿sabes las funciones que puedo usar para destransformar la rotacion de los vertices? como veis posicion y escalado ya lo tengo hecho

saludos

Lord Trancos 2

 En fins... no se si servira de mucho, pero:
- Antes de exportar el objeto colapsa el stack.
- Respecto a la rotacion de los vertices... ¿¿??... tal vez tu problema sea que no tienes correctamente puesto el gizmo del objeto. (deberias de tenerlo alineado a los ejes del mundo).
- En obj.transform tienes la matriz que se aplica a los vertices.
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

zupervaca

 bueno poco a poco voy haciendo el exportador, os pongo el codigo a ver que os va parenciendo, recordar que al mismo tiempo que hago el exportador estoy aprendiendo maxscript con lo que no os espereis gran cosa  :lol:
-- MaxToXml.ms
-- Fichero para escenas max a xml
-- Por David Inclán

-- Valores globales
global xmlFile

-- Exportar la escena
-- path : ruta del archivo en el que se exportaran los datos
-- node : nodo del 3dsmax desde el que empezar a exportar
-- thisincluded : 0 = no se incluye el "node", 1 = se incluye el "node"
fn MaxToXML path node thisincluded =
(
-- Crear el archivo
xmlFile = createFile path
format "<?xml version=\"1.0\"?>\r\n" to: xmlFile
if thisincluded == 0 then
(
 -- Exportar solo los hijos del indicado
 nodeCreate "node"
  nodeCreateClose "node"
  exportChildrens node
 nodeClose "node"
)
else
(
 -- Exportar este y todos sus hijos
 exportNode node
)
-- Cerrar el archivo y dar por finalizada la exportacion
close xmlFile
)

-- Exportar el nodo
fn exportNode node =
(
nodeCreate "node" -- Crear nodo
 nodeVar "classID" node.classID -- Identificador unico de este nodo
 nodeVar "name" node.name -- Nombre
 nodeVar "pos.x" node.pos.x -- Posicion
 nodeVar "pos.y" node.pos.y
 nodeVar "pos.z" node.pos.z
 nodeVar "rotation.x" node.rotation.x -- Rotacion
 nodeVar "rotation.y" node.rotation.y
 nodeVar "rotation.z" node.rotation.z
 nodeVar "scale.x" node.scale.x -- Escala
 nodeVar "scale.y" node.scale.y
 nodeVar "scale.z" node.scale.z
 nodeCreateClose "node"
 -- Guardar datos de la malla
 exportMesh 0 node
 -- Guardar todos sus hijos
 exportChildrens node
nodeClose "node"
)

-- Exportar todos sus hijos
fn exportChildrens node =
(
-- Solo exportarlos si tiene
if node.children.count > 0 then
(
 nodeCreate "children" -- Crear nodo de los hijos
  nodeVar "count" node.children.count -- Número de hijos de este nodo
  nodeCreateClose "children"
  for child in node.children do -- Exportar los hijos
  (
   exportNode child
  )
 nodeClose "children"
)
)

-- Guardar datos de la malla
fn exportMesh time node =
(
-- Memorizar transformacion antigua de este nodo e indicar una nueva para destransformar los vertices
local old_transform = node.transform
local old_parent = node.parent
node.parent = $rootNode
node.transform = identity node.transform
-- Procesar
at time time mesh = snapShotAsMesh node
nodeCreate "mesh" -- Crear nodo de la malla
 nodeCreateclose "mesh"
 nodeCreate "verts" -- Crear nodo de los vertices
  nodeVar "count" mesh.numverts -- Número de vertices
  nodeCreateClose "verts"
  -- Exportar todos los vertices de esta malla
  for n = 1 to mesh.numverts do
  (
   nodeCreate "vertex"
    nodeCreateClose "vertex"
    nodeCreate "pos" -- Posicion
     local vertex = getVert mesh n
     nodeVar "x" vertex.x
     nodeVar "y" vertex.y
     nodeVar "z" vertex.z
     nodeCreateClose "pos"
    nodeClose "pos"
   nodeClose "vertex"
  )
 nodeClose "verts"
 nodeCreate "faces" -- Crear nodo de las caras
  nodeVar "count" mesh.faces.count -- Número de caras
  nodeCreateClose "faces"
  -- Exportar todas las caras
  for n = 1 to mesh.numfaces do
  (
   local face = getFace mesh n
   nodeCreate "face"
    nodeCreateClose "face"
    nodeCreate "index"
     nodeVar "a" (face[1] as integer)
     nodeVar "b" (face[2] as integer)
     nodeVar "c" (face[3] as integer)
     nodeCreateClose "index"
    nodeClose "index"
    nodeCreate "normal" -- Normal de la cara
     local normal = getFaceNormal mesh n
     nodeVar "x" normal.x
     nodeVar "y" normal.y
     nodeVar "z" normal.z
     nodeCreateClose "normal"
    nodeClose "normal"
   nodeClose "face"
  )
 nodeClose "faces"  
nodeClose "mesh"
-- Restaurar la transformacion de este nodo
node.parent = old_parent
node.transform = old_transform
)

-- Abrir un nodo
fn nodeCreate tag =
(
format "<%" tag to: xmlFile
)

-- Guardar un nombre y valor del nodo
fn nodeVar name value =
(
format " %=\"%\"" name value to: xmlFile
)

-- Cerrar la apertura del nodo
fn nodeCreateClose tag =
(
format ">\r\n" to: xmlFile
)

-- Agregar tags como variables
fn nodeTagVar name value =
(
format "<%>%</%>\r\n" name value name to: xmlFile
)

-- Cerrar el nodo por completo
fn nodeClose tag =
(
format "</%>\r\n" tag to: xmlFile
)


-- Exportar toda la escena
MaxToXML "c:\pruebas.xml" rootNode 0


ahora mismo exporta jerarquias, vertices y caras y he logrado de forma "chapucilla" detransformar los vertices

saludos






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.