¿conoceis algun exportador para 3dsmax que exporte archivos en xml?
saludos
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.
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
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.
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