Cambio de textura mediante script
Cambio de textura mediante script
Hola a todos.
Me interesaria saber si es posible mediante script configurar si un objeto lee una textura u otra, es decir, por ejemplo, tenemos dos texturas a mostrar y apretando un boton en cabina, cambie la textura de un objeto por medio de renombrar las texturas con LUA y que el simulador lo lea en el acto sin necesidad de reiniciar.
Si existe algun metodo efectivo, seria de gran utilidad, ya que no puedo hacer el clonar el objeto y con animacion lo oculto y muestro otro identico con la otra textura.
Gracias de antemano.
Un saludo,
Alberto
function ControlLibrea( Librea )
engine_1 = 0
engine_2 = 0
engine_3 = 0
if (Librea == 1) then
engine_1 = 1
end
if (Librea == 2) then
engine_2 = 1
end
if (Librea == 3) then
engine_3 = 1
end
Call("*:ActivateNode", "engine_1", engine_1 )
Call("*:ActivateNode", "engine_2", engine_2 )
Call("*:ActivateNode", "engine_3", engine_3 )
end
Por supuesto que se puede, aunque es necesario que en archivo de forma IGS (GeoPcDx una vez exportado), se hayan declarado todas las texturas del vehículo con las diferentes libreas. Después habría que hacer un control en la locomotora que apuntara a la librea que quisiéramos cambiar. Con ese control ya sólo deberíamos activar las libreas como nodos del modelo.
Una teórica función de script LUA para cambiar las libreas podría ser:
function ControlLibrea( Librea )
engine_1 = 0
engine_2 = 0
engine_3 = 0
if (Librea == 1) then
engine_1 = 1
end
if (Librea == 2) then
engine_2 = 1
end
if (Librea == 3) then
engine_3 = 1
end
Call("*:ActivateNode", "engine_1", engine_1 )
Call("*:ActivateNode", "engine_2", engine_2 )
Call("*:ActivateNode", "engine_3", engine_3 )
end
el_pinchos Por supuesto que se puede, aunque es necesario que en archivo de forma IGS (GeoPcDx una vez exportado), se hayan declarado todas las texturas del vehículo con las diferentes libreas. Después habría que hacer un control en la locomotora que apuntara a la librea que quisiéramos cambiar. Con ese control ya sólo deberíamos activar las libreas como nodos del modelo.Muchiiisimas gracias el_pinchos :maestro: :maestro: En este caso, ¿el nodo sería el nombre del material o del map? por ejemplo engine_1 seria "Material #25" (de los nombres de materiales por defecto) :?:
Una teórica función de script LUA para cambiar las libreas podría ser:
Código:function ControlLibrea( Librea )
engine_1 = 0
engine_2 = 0
engine_3 = 0
if (Librea == 1) then
engine_1 = 1
end
if (Librea == 2) then
engine_2 = 1
end
if (Librea == 3) then
engine_3 = 1
end
Call("*:ActivateNode", "engine_1", engine_1 )
Call("*:ActivateNode", "engine_2", engine_2 )
Call("*:ActivateNode", "engine_3", engine_3 )
end
Cada librea debería ser un nodo del archivo de forma nombrado como "engine_x', que se activaría con la librea que hubiéramos seleccionado con el control 'Librea'.
el_pinchos Por supuesto que se puede, aunque es necesario que en archivo de forma IGS (GeoPcDx una vez exportado), se hayan declarado todas las texturas del vehículo con las diferentes libreas. Después habría que hacer un control en la locomotora que apuntara a la librea que quisiéramos cambiar. Con ese control ya sólo deberíamos activar las libreas como nodos del modelo.Muchiiisimas gracias el_pinchos :maestro: :maestro: En este caso, ¿el nodo sería el nombre del material o del map? por ejemplo engine_1 seria "Material #25" (de los nombres de materiales por defecto) :?:
Una teórica función de script LUA para cambiar las libreas podría ser:
Código:function ControlLibrea( Librea )
engine_1 = 0
engine_2 = 0
engine_3 = 0
if (Librea == 1) then
engine_1 = 1
end
if (Librea == 2) then
engine_2 = 1
end
if (Librea == 3) then
engine_3 = 1
end
Call("*:ActivateNode", "engine_1", engine_1 )
Call("*:ActivateNode", "engine_2", engine_2 )
Call("*:ActivateNode", "engine_3", engine_3 )
end
Cada librea debería ser un nodo del archivo de forma nombrado como "engine_x', que se activaría con la librea que hubiéramos seleccionado con el control 'Librea'.
Sería la malla con esa textura. El nombre que hayas dado a esa pieza. El sistema que te ha propuesto se basa en hacer varias piezas con distintas texturas, y mostrar/ocultarlas mediante script.
madroño Sería la malla con esa textura. El nombre que hayas dado a esa pieza. El sistema que te ha propuesto se basa en hacer varias piezas con distintas texturas, y mostrar/ocultarlas mediante script.Pues entonces no me sirve, porque es un velocimetro digital al que le tienen que cambiar de color los numeros (o sea cambiar la textura) y no vale el clonar porque entonces deja de funcionar el script. :oops:
madroño Sería la malla con esa textura. El nombre que hayas dado a esa pieza. El sistema que te ha propuesto se basa en hacer varias piezas con distintas texturas, y mostrar/ocultarlas mediante script.Pues entonces no me sirve, porque es un velocimetro digital al que le tienen que cambiar de color los numeros (o sea cambiar la textura) y no vale el clonar porque entonces deja de funcionar el script. :oops:
Hola de nuevo.
Aprovecho el hilo para preguntaros sobre el "*:ActivateNode".
A mi esta funcion no me funciona asi que no se si lo hago bien. Agradeceria un explicacion.
Yo pensaba que simplemente dentro de tu archivo de Max tenias un objeto llamado por ejemplo "1_0500_nombre" (en el ejemplo que pongo es para hacer aparecer en la pantalla de ordenador de abordo de una cabina un icono) y al usar:
Call("*:ActivateNode", "nombre", 0) el objeto no desaparece y se sigue viendo en el simulador tal y como se ve en Max, asi que no puedo controlar la visualizacion de 1_0500_nombre mediante el script.
Gracias de antemano.
ActivateNode lo que hace es mostra u ocultar el objeto en cuestión, habría que ver si ocultando el objeto los fotogramas aumentan, no sea que lo oculte pero siga estando ahí y se renderice.
El código está bien puesto
Call( "*:ActivateNode","nombre", 0) -- desactiva
Call( "*:ActivateNode","nombre", 1) -- activa
No se si tendrá algo que ver, pero si es para una cabina, las piezas se suelen llamar 1_0000_nombre. Ah y supongo que lo estás haciendo dentro de la función Update, ¿no?
¿Has probado a hacerlo de esta manera?
http://forums.uktrainsim.com/viewtopic.p...8&t=132520
madroño El código está bien puestoEl velocimetro funciona genial, ya que va con el SetControlValue, y los otros objetos que deseo mostrar, me gustaria ahorarme lo de escribirlos en el .xml, ya que con el SetControlValue funciona genial, aparecen y desaparecen, pero con el ActiveNode no lo consigo. Probare con lo de 1_0000_nombre, pero no se si eso hara algo.
Call( "*:ActivateNode","nombre", 0) -- desactiva
Call( "*:ActivateNode","nombre", 1) -- activa
No se si tendrá algo que ver, pero si es para una cabina, las piezas se suelen llamar 1_0000_nombre. Ah y supongo que lo estás haciendo dentro de la función Update, ¿no?
¿Has probado a hacerlo de esta manera?
http://forums.uktrainsim.com/viewtopic.p...8&t=132520
madroño El código está bien puestoEl velocimetro funciona genial, ya que va con el SetControlValue, y los otros objetos que deseo mostrar, me gustaria ahorarme lo de escribirlos en el .xml, ya que con el SetControlValue funciona genial, aparecen y desaparecen, pero con el ActiveNode no lo consigo. Probare con lo de 1_0000_nombre, pero no se si eso hara algo.
Call( "*:ActivateNode","nombre", 0) -- desactiva
Call( "*:ActivateNode","nombre", 1) -- activa
No se si tendrá algo que ver, pero si es para una cabina, las piezas se suelen llamar 1_0000_nombre. Ah y supongo que lo estás haciendo dentro de la función Update, ¿no?
¿Has probado a hacerlo de esta manera?
http://forums.uktrainsim.com/viewtopic.p...8&t=132520
No creo. A mi siempre me funciona como he puesto. ¿Has revisado el código anterior? A veces cuando hay fallos de sintaxis en líneas anteriores directamente se salta ese código, pese a no dar error.
No se si has visto la otra solución que plantean, que es crear un cilindro de 11 caras y controlar su rotación, aunque personalmente me gusta más la forma de hacerlo de Reppo, pese a ser más pesada. Creo que se basa en el principio de las texturas animadas si no recuerdo mal.
Que fácil sería con un blueprint tipo digital speedometer