Подтвердить что ты не робот

Three.js - Как я могу динамически изменять непрозрачность объекта?

Это мой объект:

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

теперь после создания этого объекта в init(); функции, я могу напрямую перейти к объекту и изменить его положение, например:

object.position.x = 15;

Теперь вопрос в том, как изменить непрозрачность текстуры???

Спасибо: -)

4b9b3361

Ответ 1

THREE.MeshLambertMaterial extends THREE.Material, что означает, что он наследует свойство opacity, поэтому все, что вам нужно сделать, это получить доступ к материалу на вашем объекте и изменить непрозрачность материала:

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

Также обратите внимание, что материал должен иметь свойство transparent для значения true.

object.materials[0].transparent = true;

(Спасибо Дрю и Дойсу за указание на это)

Я знаю, что есть проблемы с ссылкой на three.js ', но вы можете посмотреть исходный файл для используемого вами класса и просмотреть все свойства/методы, которые он имеет, и если он расширяет что-то еще.

Ответ 2

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;

Ответ 3

Я знаю, что этот вопрос очень старый, но я хотел дать свой ответ от того, что я использовал, если кому-то это понадобится. С three.js я использовал tweening через Greensock TweenMax/TweenLite. При этом я смог обойти любое свойство любого объекта, и он прошел гладко. Ознакомьтесь с библиотекой здесь. Все, что мне нужно для анимации, было:

TweenLite.to(object, duration, properties);

где продолжительность в секундах и свойства находятся в объекте. "Gotcha" для этого, особенно при использовании функции three.js, заключается в том, чтобы убедиться, что вы задаете конкретный параметр объекта. Например, по этому вопросу, если вы изменяете непрозрачность сетки, вы не можете делать

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

скорее, вам нужно быть более конкретным и написать

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

Надеюсь, это поможет кому-то. Tweening действительно потрясающе!