Hola, no tienes nada que agradecer, este tipo de mini desafíos me resultan sumamente entretenidos de discutir, lástima que no se dan muy a menudo.
Sin embargo, me invadió la curiosidad, y pegué el código en una ventana de Listener nueva (imagino que era eso lo que había que hacer) y me tiró el siguiente mensaje en rojo:
- Syntax error: at), expected .
In line:).
Para ejecutar un código que comprenda más que un par de líneas tendrías que ir al menú Maxscript/new script y pegar en la nueva ventana el código, para ejecutarlo basta presionar Control + e o bien ir al menú file/evaluate all.
(no tengo max al frente y los nombres puede diferir levemente, pero se entiendel concepto).
Pero en realidad esperaba que el problema se pudiera resolver con utilidades como el diálogo parameter wiring o el controlador expresión, por ejemplo. ¿tienes idea cómo se usa (n), especialmente luego de obtener la distancia entre objetos (que ya sabes usar)?
Estuve probando, con el código distance $a $b que me pasaste, y a veces no puede convertir los valores a float, y otras trunca la expresión.
La verdad es que, si se puede hacer de forma gráfica, puedes crear un helper del tipo tape y vinculando sus extremos obtener la distancia entre ellos, luego mediante un wireparameters o el tipo de conexión que más te acomode puedes usar ese valor.
La forma de usar la distancia para hacer algo útil depende absolutamente de lo que necesites, no hay automatismos en transformar distancia a color o cosas por el estilo (al menos hasta dónde entiendo).
Por ejemplo, en el script del mensaje anterior básicamente hice lo siguiente:
1.- Creo un helper del tipo point que será el control que animaremos.
2.- Creo una serie de esferas (21x21=441 esferas.) que cambiaran su color según la distancia con el helper creado anteriormente.
3.- Para cada esfera creo un material y se lo asigno (ya que es la forma de darle un color diferente a cada uno).
4.- En el canal Diffuse de cada material crea un controlador tipo point3 script que permite poner cierta lógica a la forma de obtener el color.
3.- En cada controlador point3 script escribo una expresión para obtener el color basado en la distancia, las líneas verdes son sólo comentarios descriptivos para explicar que hace cada cosa.
[code]- En la siguiente línea cálculo la distancia entre la esfera y el point.
Dist = distance self target.
- Establezco un radio de 40 unidades para el decaimiento del color.
Puede ser cualquier valor.
Fallof = 40.
- Normalización de la distancia para obtener color, esta es la parte.
Ingeniosa donde debes buscar una relación entre la distancia y un valor.
Entre 0~1 que represente cada componente del color.
Color = (fallof - Dist) / fallof.
- Valor final entregado por el controlador en formato RGB.
[/code]
Hacer esto a mano (con helpers para medir distancias y tal) es un proceso largo y tedioso, la lógica sigue siendo totalmente aplicable, pero dado que son muchos elementos se tornaría en algo sumamente repetitivo (sin mencionar que tendrías el doble de elementos en tu escena). Por eso te comenté sobre el comando de Maxscript para medir distancias en lugar del helper taper, a la larga termina siendo una opción mucho más viable para este tipo de cosas. Saludos.