2011-12-14 16 views
28

Este es mi objetivo:three.js - ¿Cómo puedo cambiar dinámicamente la opacidad del objeto?

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

ahora después de haber creado este objeto en init(); función, que puede ir directamente al objeto y cambiar su posición, de esta manera:

object.position.x = 15; 

Ahora la pregunta es ¿cómo puedo cambiar la opacidad de la textura ???

Gracias :-)

+0

Creo que es bueno tener [estos] (https://www.udacity.com/course/viewer#!/c-cs291/l-91376562/m-103530762) en cuenta cuando se utiliza la función de opacidad. Es material de un curso, por lo que es posible que necesite ver videos anteriores, pero son cortos. –

Respuesta

46

THREE.MeshLambertMaterial extiende THREE.Material lo que significa que hereda la propiedad opacity, así que todo lo que necesita hacer es acceder al material en su objeto, y cambiar la opacidad del material:

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

También tenga en cuenta que el material debe tener su propiedad transparent establecida en verdadero.

object.materials[0].transparent = true; 

(Gracias Drew y Dois por señalar esto)

Sé que hay problemas con los three.js 'referencia', pero se puede echar un vistazo al archivo de origen para la clase Usas y ves todas las propiedades/métodos que tiene y si se extiende a cualquier otra cosa.

+0

Gracias George ... supongo que eres mi three.js GURU; -) ... Encontré mi propia solución, me tomó un tiempo ... pero de nuevo es la mejor manera de entenderlo bien – BorisD

+14

Tenga en cuenta que debe establecer 'material.transparent = true', así como la' opacidad'. –

+0

'0.5 + 0.5 * Math.sin (new Date(). GetTime() * .0025);' might be better;) – 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

Sé que esta pregunta es muy antigua, pero quería dar mi respuesta de lo que utilicé en caso de que alguien lo necesitara. Con three.js, usé tweening a través de TweenMax/TweenLite de Greensock. Con eso, pude interpolar cualquier propiedad de cualquier objeto y funcionó sin problemas. Consulte la biblioteca here. Todo lo que necesitaba para interpolar las propiedades era:

TweenLite.to(object, duration, properties); 

donde la duración está en segundos y las propiedades están en un objeto. El "gotcha" para esto, especialmente cuando usas three.js, es asegurarte de ser específico con el parámetro del objeto. Por ejemplo, por esta pregunta, si va a cambiar la opacidad de una malla, no se puede hacer

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

lugar, tiene que ser más específico y escribir

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

espero que esto ayude a alguien. Tweening es realmente increíble!

Cuestiones relacionadas