Vai al contenuto
Bruno Barabaschi

Accendere una luce quando viene intersecata da un oggetto

Recommended Posts

Ciao a tutti, sto cercando di impostare un'animazione che mi consenta di accendere una luce quando il volume di un oggetto specifico la interseca.

 

Avete idea di come potrei fare?

 

Sono riuscito a fare circa il contraio usando l'helper "EXPOSETM" e i "WIRE PARAMETERS" e lavorando sul parametro di intensità.

 

Grazie a tutti per l'aiuto.

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

@Bruno Barabaschi

 

Ho provato qualcosina in merito, ma usare un check per volume ecc mi appare troppo complicato, per via della classe "light" che non contempla alcune funzioni. Quindi prendendo il problema da un'altro lato, ho provato a utilizzare la distanza tra l'oggetto e la luce. Da qui ho creato lo script seguente:

 

/*
name: Distance Light On/Off
code: Marcelli Michele
date: 19/12/2016
*/

try (destroydialog ::t)catch()

Rollout t "Distance Light On/Off"
(
	fn obj_filt obj = Superclassof obj == GeometryClass
	fn ligh_filt lig = Superclassof lig == light
	
	
	pickbutton ob "Choose Obj" filter:obj_filt
	pickbutton ligh "Choose Light" filter:ligh_filt
	spinner dis "Distance" range:[-100000, 100000,2] type:#worldunits
	button sta "Start"
	
	on ob picked obj do ob.text = obj.name
	on ligh picked obj do ligh.text = obj.name
	
	on sta pressed do
	(
		animationrange
		animate on
		for t in animationrange.start to animationrange.end do
		(
			sliderTime = t 
			d = distance (getnodebyname ob.text ) (getnodebyname ligh.text)
			if d >=dis.value then ((getnodebyname ligh.text).on) = off else ((getnodebyname ligh.text).on) = on
		)	
	)
	
)
createdialog t 

In sostanza, lo script misura la distanza tra i due "PivotPoint" dell'Oggetto/Luce. Se esso rientra nel valore da te determinato la luce viene spenta, altrimenti no :D Per avere una maggiore efficacia, sistema il pivot dell'oggetto non luce come ti è più consono. Il cuore dello script è qui:

 

if d >=dis.value then ((getnodebyname ligh.text).on) = off else ((getnodebyname ligh.text).on) = on

In sostanza: Se d, ovvero la somma della distanza dei due oggetti, è maggiore o uguale di dis.value (il tuo valore) la luce è spenta, altrimenti la luce è accesa. Nulla di complicato. Puoi anche invertire il test "off/on" a tuo piacimento per avere l'effetto contrario. 

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

@Michele71 Grazioe mille per la risposta così celere!

 

Ho provato lo script e funziona, con un po' di accortezza posso adattarla alle mie esigenze.

 

L'unico problema che riscontro, è che posso usarlo per una sola luce, diventa molto difficile consentire di scegliere più luci contemporaneeamente?

Ho provato duplicando come "Instance" ma, ovviamente, non funziona.

 

Grazie ancora.

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

@Bruno Barabaschi Usa questo piccolo script

 

animationrange
		animate on
		for t in animationrange.start to animationrange.end do
		(
			sliderTime = t 
			for i in selection do
			(
			d = distance $Box003 i
			if d >=25 then ((getnodebyname i.name).on) = off else ((getnodebyname i.name).on) = on
			)
		)	

Per farlo funzionare, innanzitutto seleziona tutte le luci che vuoi e poi devi sostituire in d = distance "$Box003" con il nome del tuo oggetto. La distanza viene inserita in "if d >=" al posto del 25 metti il valore che vuoi.

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora


  • Navigazione recente   0 utenti

    Non ci sono utenti registrati da visualizzare in questa pagina.

×