2011-12-14 18 views
28

Questo è il mio oggetto:three.js - Come posso modificare dinamicamente l'opacità dell'oggetto?

var object = new THREE.Mesh(geometry, new THREE.MeshLambertMaterial({ map: THREE.ImageUtils.loadTexture("image.png") })); 
object.position.set(2, 3, 1.5); 

ora dopo che ho creato questo oggetto in init(); la funzione, posso andare direttamente l'oggetto e cambiare la sua posizione, in questo modo:

object.position.x = 15; 

Ora la domanda è come posso modificare l'opacità della texture ???

Grazie :-)

+0

Penso che sia bene tenere a mente [questi] (https://www.udacity.com/course/viewer#!/c-cs291/l-91376562/m-103530762) quando si utilizza la funzione di opacità. È materiale di un corso quindi potresti aver bisogno di guardare video precedenti ma sono brevi. –

risposta

46

THREE.MeshLambertMaterial estende THREE.Material che significa che eredita la proprietà opacity, quindi tutto quello che dovete fare è accedere al materiale sul vostro oggetto, e modificare l'opacità del materiale:

object.materials[0].opacity = 1 + Math.sin(new Date().getTime() * .0025);//or any other value you like 

Si noti inoltre che il materiale deve avere la proprietà transparent impostata su true.

object.materials[0].transparent = true; 

(Grazie Drew e Dois per la precisazione)

So che ci sono problemi con i Three.js 'di riferimento', ma si può avere uno sguardo al file sorgente per la classe tu usi e vedi tutte le proprietà/metodi che ha e se estende qualcos'altro.

+0

Grazie George ... Immagino che tu sia il mio tre.js GURU; -) ... Ho trovato la mia soluzione, mi ci è voluto un po '... ma ancora è il modo migliore per comprenderlo bene – BorisD

+14

Nota che devi impostare 'material.transparent = true' così come' opacity'. –

+0

'0.5 + 0.5 * Math.sin (new Date() getTime() * 0,0025.);' Potrebbe essere migliore;) – Hotted24

10
var map = THREE.ImageUtils.loadTexture(myJSONObject[i].url); 
var material = new THREE.MeshLambertMaterial({ map: map, transparent: true }); 
var object = new THREE.Mesh(geometry, material); 

material.opacity = 0.6; 
5

So che questa domanda è molto vecchia ma volevo dare la mia risposta da ciò che ho usato nel caso qualcuno ne avesse bisogno. Con three.js, ho usato il tweening tramite TweenMax/TweenLite di Greensock. Con ciò, sono stato in grado di interpolare qualsiasi proprietà di qualsiasi oggetto e ha funzionato senza intoppi. Controlla la libreria here. Tutto quello di cui avevo bisogno per interpellare le proprietà era:

TweenLite.to(object, duration, properties); 

dove la durata è in secondi e le proprietà sono in un oggetto. Il "gotcha" per questo, specialmente durante l'utilizzo di three.js, è quello di assicurarsi di ottenere specifici con il parametro object. Ad esempio, per questa domanda, se si modifica l'opacità di una maglia, non si può fare

TweenLite.to(mesh, 2, {material.opacity: 0}); 

piuttosto, è necessario essere più specifici e scrivere

TweenLite.to(mesh.material, 2, {opacity: 0}); 

Spero che questo aiuta qualcuno. Tweening è davvero fantastico!

Problemi correlati