bueno pos voy a sacar tiempo para aprender c++ y crear un exportador para gamestudio.
Y necesito de nuevo hacer unas preguntas
El maya puede ser salvado en asciii, asi que:
Lo que quiero a aprender es a:
1 / Hago un programa que habra el fichero....ok
2 / Busco la informacion que me interesa....¿?
3 / la muestro en pantalla pa decirme a mi mismo lo Güeno que soy....ok
el punto 1 y 3 son faciles y no creo que necesite ayuda.
pero me gustaria que me comentarias el punto 2
¿que instruciones se usan?
¿Algun prototipo de funcionaminto?
Gracias. :)
Si usas maya, por dios, no intentes hacerte tu propio parser del formato. Usa la maya API, hacerte un exportador del formato no es dificil, en
RobTheBloke tienes una referencia excelente. Sobre el gamestudio no tengo ni idea de lo que es.
Tu no sabes C++? verdad... ?
Bueno, suponiendo que solo necesites ayuda en la 2/ , quiza lo mejor seria cargar el texto en memoria y usar las funciones str*(strcmp, y demas....) para ir "leyendo" el texto e interpretarlo, y las ato* (atoi,atol,atof) para pasar los numeros de texto a una variable adecuada para ellos.
La 3/ es mas dificil de lo que parece, nunca sacaras suficiente informacion que te diga lo bueno que eres.
Saludos, y suerte con el programilla.
:) no, se programar y todo lo que tiene que ver con gramatica (if´s, variables y demas), pero no se lexico de c++.
los pasos 1 y 3 me refiero a que seguro que lo puedo encontar en cualquier libro o tutorarial.
gracias por los datos.
gracias shash
Estuve googleando y encontre la pagina pero para hacer eso necesito saber mucho mas de lo que se.
Este objetivo es mas sencillo para mi nivel.
Si usas std::string en vez de char*.
size_type find (const string& str, size_type pos=0) const;
size_type find (char ch, size_type pos=0) const;
size_type rfind (const string& str, size_type pos=npos) const;
size_type rfind (char ch, size_type pos=npos) const;
size_type find_first_of (const string& str, size_type pos=0) const;
size_type find_first_not_of (const string& str, size_type pos=0) const;
size_type find_last_of (const string& str, size_type pos=npos) const;
size_type find_last_not_of (const string& str, size_type pos=npos) const;
string substr (size_type pos, size_type n) const;
suelen ser útiles para buscar en cadenas (como los strcmp). [
http://www.msoe.edu/eecs/cese/resources/stl/string.htm ]
En realidad no entiendo qué tipo de fichero ascii genera el exportador, pero si son numéricos entonces usaría algo como:
int sscanf ( char * buffer, const char * format [ , argument , ...] );
de stdio, y que suele ser harto útil. [
http://www.cplusplus.com/ref/cstdio/sscanf.html ]
En definitiva:
http://www.cplusplus.com/ref/cstdio/http://www.cplusplus.com/ref/cstring/index.htmlhttp://www.msoe.edu/eecs/cese/resources/stl/string.htm
Pega tu código y te comentamos donde y como tocar y añadir o acabaremos confundiendote más aun. Aunque solo tengas un esqueleto que no hace mucho.
De lo contrario te mezclaremos comentarios sobre FILE * con iostreams, strtoks con clases C++, std:string con char * y demás pijadas. En serio, pega lo que tengas :)
No estoy nada puesto en Maya, pero me imagino que con MEL también podrás hacer exporters. Lo digo porque si es tan flexible como MAXScript, te resultará más sencillo que C++.
Saludos.
@Warchief
gracias por la info
@BeRSeRKeR
bueno ceo que me explique mal, lo que quiero crear es un importador, coger el fichero de maya y pasarlo a gamestudio mdl7, sin pasos intermedios y sin tener que abriri el maya e incluso poder importar en lotes. Como maya puede manejar sus ficheros en ascii sin perder ningun dato lo que pretendo en integralo
@wappo
pues esta es la parte que me interesa
el node trasform indica la posicion en el espacio global .t es trasform (xyz) .s scale y rotate no esta por que los valores estan a cero que es el defalut
y el node mesh es el modelo en si pero aun no se lo que es cada cosa
createNode transform -n "pared_mesh";
setAttr ".ove" yes;
setAttr ".t" -type "double3" 0.0023866 2.2226856503891854 9.7757461820287492;
setAttr ".s" -type "double3" 1 1 2.5722478715230173;
setAttr ".rp" -type "double3" -5.2351042479276657 4.4390540719032288 7.7286330052477119;
setAttr ".sp" -type "double3" -5.2351042479276657 4.4390540719032288 3.1463029384613037;
setAttr ".spt" -type "double3" 0 0 4.5823300667864082;
createNode mesh -n "pared_meshShape" -p "pared_mesh";
setAttr -k off ".v";
setAttr ".ove" yes;
setAttr ".vir" yes;
setAttr ".vif" yes;
setAttr ".uvst[0].uvsn" -type "string" "map1";
setAttr -s 24 ".uvst[0].uvsp[0:23]" -type "float2" 0 0 1.0000001 0
0 0.99999923 1 0.99999994 0 0 0 0.99999988 0 0 0 0.99999982 0 0 0 0.99999988 0 0
0 0.99999988 1 0 1 0.99999988 0 0.99999988 0 0 1 0 1 0.99999923 1 0 1 0.99999988
1 0 1 0.99999982 1 0 1 0.99999988;
setAttr ".cuvs" -type "string" "map1";
setAttr ".dcc" -type "string" "Ambient+Diffuse";
setAttr -s 8 ".pt";
setAttr ".pt[1:3]" -type "float3" 0 4.6229687e-013 2.0490085e-009 -0.24358584
-0.33333319 1.1701701e-007 -0.26303813 -0.3333331 2.049005e-009;
setAttr ".pt[5]" -type "float3" -0.24669236 -0.3333331 0;
setAttr ".pt[7]" -type "float3" -0.046738088 -0.3333331 0;
setAttr ".pt[9]" -type "float3" -0.050039291 -0.3333331 -8.8817842e-016;
setAttr ".pt[11]" -type "float3" -0.053270996 -0.3333331 8.8817842e-016;
setAttr ".pt[13]" -type "float3" -0.25979292 -0.3333331 0;
setAttr -s 14 ".vt[0:13]" 0 -2.2226853 8.7793427 0 -2.2226853 -3.6611395
0.24358584 3.1106474 8.7793427 0.26303813 3.1106474 -3.6611395 0 -2.2226853 6.7059278
0.24669236 3.1106474 6.7059278 0 -2.2226853 4.6325145 0.046738088 3.1106474 4.6325145
0 -2.2226853 2.5591009 0.050039291 3.1106474 2.5591009 0 -2.2226853 0.4856874 0.053270996
3.1106474 0.4856874 0 -2.2226853 -1.5877261 0.25979292 3.1106474 -1.5877261;
setAttr -s 19 ".ed[0:18]" 0 2 0 1 12 0
3 1 0 3 13 0 4 0 0 5 2 0
5 4 1 6 4 0 7 5 0 7 6 1
8 6 0 9 7 0 9 8 1 10 8 0
11 9 0 11 10 1 12 10 0 13 11 0
13 12 1;
setAttr -s 6 ".fc[0:5]" -type "polyFaces"
f 4 3 18 -2 -3
mu 0 4 3 14 15 1
f 4 -7 5 -1 -5
mu 0 4 16 17 2 0
f 4 -10 8 6 -8
mu 0 4 18 19 5 4
f 4 -13 11 9 -11
mu 0 4 20 21 7 6
f 4 -16 14 12 -14
mu 0 4 22 23 9 8
f 4 -19 17 15 -17
mu 0 4 12 13 11 10;
setAttr ".cd" -type "dataPolyComponent" Index_Data Edge 0;
setAttr ".bck" 3;
gracias a tos (ole)
bueno pues hice caso a BeRSeRKeR y he creado un mel to txt para usar el formato de milkshape ASCII, para ir breandome en esto de exportar, y despues de acabarlo y ver que fucnionaba me e dado cuenta que las uv hcian cosas raras, he me e dado cuenta que el formato solo deja un uv por vertice.
a ver si me explico bien.
un vertice puede tener mas de un UV cuando quieres crear un uvwraping en condiciones, pero el ASCII solo me permite un UV por vertice.
aqui esta el File Format Specification
// vertex: flags, x, y, z, u, v, bone index
asi que mi pregunta, la cual me la imagino, es que ¿no es posible usar este formato para pasar el uv correctamente.?
Es que quiero asegurarme antes de hacer le capullo de mas.