Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





materiales en Maxscript

Iniciado por solsikke, 30 de Julio de 2007, 12:08:45 PM

« anterior - próximo »

solsikke

Hola!!

Tal y como os comenté hace ya unos días, estoy implementando un exportador de escenas estáticas de 3DS Max 8 usando Maxscript, y soy muy novata en el tema.

Ya exporto bien algunas cosas, como la geometría, la información de grupos,... pero ahora tengo un problema con la exportación de los materiales de los objetos.

Para exportar el material de cada cara utilitzo la función: getFaceMatID , pero ésta me retorna un MatID que no corresponde al material que tengo aplicado a la cara.

Alguién sabe cómo lo puedo solucionar? Os adjunto un trozo de código a ver si alguien puede ver mi error...

   for nF = 1 to nF = NumFacesChannel do
   (
   local matID = getFaceMatId tmesh nF
                                        
   format "\t\t%\n" matID to:out_file
                
   )

Lo hago en cada canal para poder exportar distintas coordenadas de textura, si hay más de un canal definido.


Ya de paso, alguien puede decirme cómo acceder a los identificadores de  de los submateriales de un multimaterial?

Muchas gracias por todo!
quot;...allò essencial és invisible als nostres ulls..."

BeRSeRKeR

Hola.

El "Material ID" se refiere al índice del multi-material que tiene asignado al objeto. O sea que para acceder al material de una cara no habría más que hacer:

obj.material[matID]

De todas formas aquí tienes un pequeño ejemplo que he hecho en un momento (¡ufff, he perdido facultades!).

fn ListStandard mtl indent = (
format "%%\n" indent mtl
for map in mtl.maps do (
if map != undefined do (
format "%\t%1\n" indent map
if classOf map == Bitmaptexture do
format "%\t\t%1\n" indent map.fileName
)
)
)

fn ListMaterials obj = (

local msh = snapshotAsMesh obj

local mtl = obj.material

if classOf mtl == Standard then (
ListStandard mtl
)
else if classOf obj.material == Multimaterial then (
format "Material Multimaterial\n"

for f = 1 to msh.numFaces do (
local matID = getFaceMatID msh f

format "\tFace #%:\n" f

if classOf mtl[matID] == Standard then
ListStandard mtl[matID] "\t"
else
format "Material no soportado\n"
)
)
else (
format "Material no soportado\n"
)

delete msh
)

clearListener()

ListMaterials $


Lo que hace es que coge el objeto seleccionado, lo convierte a un "trimesh" y en el caso de tener asignado un multimaterial, lista, para cada cara, el material asignado. Adicionalmente también muestra los mapas de textura que tenga asignados (siempre que sea de tipo bitmap).

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

solsikke

Muchas gracias por todo BeRSeRKeR!

Tu código me está ayudando mucho, aúnque tengo una dudilla (que seguramente será trivial, pero bueno.... soy muy novata en el tema.... :$ )

La variable "indent", que utilitzas en la "ListStandard", qué es exactamente? :$

De verdad, muchas gracias por la ayuda, espero que no esté dando mucho la vara... :$ :$ :S :S


Saludos!
quot;...allò essencial és invisible als nostres ulls..."

BeRSeRKeR

Ni caso al parámetro indent. Es para tabular el texto (si te fijas es el carácter de tabulación '\t') de salida correctamente pero en este caso no tiene sentido ya que no estamos recorriendo recursivamente los materiales.

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

solsikke

quot;...allò essencial és invisible als nostres ulls..."






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.