Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Saber la textura de un poligono en MaxScript

Iniciado por Ghost, 25 de Marzo de 2003, 06:27:49 PM

« anterior - próximo »

Ghost

                                Hola a todos.

Tengo hecho un Script en Max que saca la informacion de la malla con la que estes trabajando. Te saca la geometria, las coordenadas de textura y la lista de las texturas usadas en la escena. Pero despues de recorrerme toda la ayuda de MaxScript no consigo encontrar ninguna funcion que me diga que material esta usando cada una de las caras de la malla.

¿Alguna idea?

Gracias a todos ;)                                

MChiz

                                Hola:

Iria bien que dijeses la version de MAX que usas. En cualquier caso, te digo como se puede hacer en la 3.1:

Existe una funcion que se llama "getFaceMatId" a la cual le pasas la malla ( tiene que ser EditableMesh, evidentemente ) y el indice de la cara que quieres mirar. Esta te devuelve un integer que es el id del material que esta usando.

Di algo si te sirve :)
Un saludote!                                

Ghost

                                La version de MAX que uso es la 5. Probe esa funcion pero me daba un numero distinto por cada dos triangulos de los que sacaba los datos.

Para manejar la malla lo que hago en el script es hacer una copia( un snapshot o algo asi :P ) y trabajar con ella en lugar del original. ¿Existe algun problema al usar la funcion que dices y una copia de la malla con este metodo?.                                

MChiz

                                Pues que yo sepa no hay ningun problema en trabajar con una copia. He de decirte que no se como va lo que tu quieres; lo mire ayer para contestarte. Haz una prueba con una caja y le endosas solo un material. Una vez tengas esto, intenta utilizar la funcion que te dije.
Ahora que me acuerdo, cuando exportaba un ASE, a veces me decia que una cara estaba usando un material que no existia ( !! ) y me jode un monton. Quizas vaya por ahi la cosa, no se...
Y segui investigando sobre tu duda y tambien encontre como sacar las propiedades de un material ( si es que no lo sabes ya ).
Tienes un array global de materiales que se llama "meditMaterials". En teoria, la funcion de ayer ( getFaceMatId o algo asi ) te devuelve un indice sobre ese array. Y luego puedes acceder a las texturas del material, utilizando algo como esto: meditMaterials[ i ].maps, donde "maps" es otro array. Los indices de este ultimo array van por el orden en el que se encuentran en el editor de materiales. Es decir, el indice 2 es la textura difusa ;)
Y nada mas. Solo recordarte que yo todo esto lo hago para el MAX 3.1, no para el 5, y es muy posible que hayan cambiado muchas cosas.
Un saludote!                                

MChiz

                                Pues que yo sepa no hay ningun problema en trabajar con una copia. He de decirte que no se como va lo que tu quieres; lo mire ayer para contestarte. Haz una prueba con una caja y le endosas solo un material. Una vez tengas esto, intenta utilizar la funcion que te dije.
Ahora que me acuerdo, cuando exportaba un ASE, a veces me decia que una cara estaba usando un material que no existia ( !! ) y me jode un monton. Quizas vaya por ahi la cosa, no se...
Y segui investigando sobre tu duda y tambien encontre como sacar las propiedades de un material ( si es que no lo sabes ya ).
Tienes un array global de materiales que se llama "meditMaterials". En teoria, la funcion de ayer ( getFaceMatId o algo asi ) te devuelve un indice sobre ese array. Y luego puedes acceder a las texturas del material, utilizando algo como esto: meditMaterials[ i ].maps, donde "maps" es otro array. Los indices de este ultimo array van por el orden en el que se encuentran en el editor de materiales. Es decir, el indice 2 es la textura difusa ;)
Y nada mas. Solo recordarte que yo todo esto lo hago para el MAX 3.1, no para el 5, y es muy posible que hayan cambiado muchas cosas.
Un saludote!                                

MChiz

                                Pues que yo sepa no hay ningun problema en trabajar con una copia. He de decirte que no se como va lo que tu quieres; lo mire ayer para contestarte. Haz una prueba con una caja y le endosas solo un material. Una vez tengas esto, intenta utilizar la funcion que te dije.
Ahora que me acuerdo, cuando exportaba un ASE, a veces me decia que una cara estaba usando un material que no existia ( !! ) y me jode un monton. Quizas vaya por ahi la cosa, no se...
Y segui investigando sobre tu duda y tambien encontre como sacar las propiedades de un material ( si es que no lo sabes ya ).
Tienes un array global de materiales que se llama "meditMaterials". En teoria, la funcion de ayer ( getFaceMatId o algo asi ) te devuelve un indice sobre ese array. Y luego puedes acceder a las texturas del material, utilizando algo como esto: meditMaterials[ i ].maps, donde "maps" es otro array. Los indices de este ultimo array van por el orden en el que se encuentran en el editor de materiales. Es decir, el indice 2 es la textura difusa ;)
Y nada mas. Solo recordarte que yo todo esto lo hago para el MAX 3.1, no para el 5, y es muy posible que hayan cambiado muchas cosas.
Un saludote!                                

MChiz

                                Pues que yo sepa no hay ningun problema en trabajar con una copia. He de decirte que no se como va lo que tu quieres; lo mire ayer para contestarte. Haz una prueba con una caja y le endosas solo un material. Una vez tengas esto, intenta utilizar la funcion que te dije.
Ahora que me acuerdo, cuando exportaba un ASE, a veces me decia que una cara estaba usando un material que no existia ( !! ) y me jode un monton. Quizas vaya por ahi la cosa, no se...
Y segui investigando sobre tu duda y tambien encontre como sacar las propiedades de un material ( si es que no lo sabes ya ).
Tienes un array global de materiales que se llama "meditMaterials". En teoria, la funcion de ayer ( getFaceMatId o algo asi ) te devuelve un indice sobre ese array. Y luego puedes acceder a las texturas del material, utilizando algo como esto: meditMaterials[ i ].maps, donde "maps" es otro array. Los indices de este ultimo array van por el orden en el que se encuentran en el editor de materiales. Es decir, el indice 2 es la textura difusa ;)
Y nada mas. Solo recordarte que yo todo esto lo hago para el MAX 3.1, no para el 5, y es muy posible que hayan cambiado muchas cosas.
Un saludote!                                

Ghost

                                Ok, consultare en el array que dices. Yo hasta ahora usaba el array que te dice los materiales que has usado en la escena, no los que tienes en el editor de materiales.

Voy a probar a ver que valores me devuelve con el array que tiene los elementos del editor de materiales, a ver que me dice :P.

Cuando hice la prueba que me dices me daba algo parecido a estos:
Las 2 primeras caras: Material1
Las 2 siguientes caras: Material2
Las 2 siguientes caras: Material3
...
asi todo el rato.

No se si seria lo que te pasaba a ti.

Un saludo ;)                                

Mars Attacks

                                ¿Te has quedado dormido sobre la tecla de enviar?  :ojo:                                

MaSteR

                                Mmmm se ha rayao solo creo yo :D un poco mas y se contesta el mismo !! xD                                

MChiz

                                ei eiiiii se siente! No se que le ha pasado a esto. No puedo borrar posts, verdad? ^_^

Sobre lo del MaxScript, yo lo he probado ( por encima ) y me funciona bien lo de los materiales. Tampoco tengo mucha experiencia con MaxScript, asi que no me hagas demasiado caso.
Si consigues algo, dimelo, ya sabes :)

Un saludote!                                

Ghost

                                Lo de tantos post no pasa nada, asi parece que tiene vida este Topic :).

Esta tarde cuando termine el curro probare lo de los materiales y os informare sobre los posibles descubrimientos :P.                                

MChiz

                                0ki! Espero que lo consigas!                                

Ghost

                                He estado viendo los tutoriales de MaxScript, y he visto que en sus ejemplos la funcion getFaceMatID saca un numero identificativo de material por cada cara.

A lo mejor habia entendido mal el uso de esta funcion. Pensaba que getFaceMatID deberia devolverme siempre 1 por ejemplo si solo he usado un material.

¿Me equivoco?.                                

MChiz

                                Ah!! No no. Claro, en teoria te devuelve el identificador del material que esta usando esa cara, no cuantos materiales usas. Te devuelve directamente un indice al array que te comente el otro dia, el meditMaterials creo que se llama.
Coñ... pero ahora que lo dices... si la cara tiene 2 materiales o mas... como te enteras? x(                                






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.