Проблема с масштабированием объекта / scene.remove (); - PullRequest
0 голосов
/ 03 января 2019

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

Я пробовал разные вещи, такие как scale, material.scale, geometry.scale, ect.Я просто сбит с толку, я, вероятно, просто упускаю очевидные вещи, но после поиска в Google различных решений и использования scale.set (scalex, scaley, 0.000000000001) и просто помещаю переменную в состояния if для зацикливания и обновления scalex и scaley, но этовсе еще не обновляется.

var bpm = 124;
var ring;
var ringgeometry = new THREE.BoxGeometry( 1080/10, 1080/10 , 0 );
var ringmaterial = new THREE.MeshBasicMaterial({
 map: new THREE.TextureLoader().load("RING.png"),
 blending: THREE.screenBlending,
 transparent: true, opacity: 1
});  
var clock = new THREE.Clock;

function update() {

 if(clock.elapsedTime < 377){ ticker = clock.elapsedTime * (songBPM / 60);
 bpm = Math.round(ticker), console.log(bpm), console.log(sect) };
 clock.getDelta();

 if(bpm >= 34 && bpm <= 40){
  ring = new THREE.Mesh( ringgeometry, ringmaterial);
  if(bpm == 34){ scene.add(ring) };
  /////////////////////////////////
  if(bpm >= 34 && bpm <= 40){ ringgeometry.scale.x += 0.1, ringgeometry.scale.y += 0.1 }
  ring.position.set(0, 0, 0);
  ////////////////////////////////
  if(bpm >= (32 + 1) && bpm <= (32 + 10)){ ringmaterial.opacity -= 0.01 };
 }
 if(bpm == 40 && bpm <= 42){ scene.remove(ring) };
}

renderer.setAnimationLoop(() => {
 update();
 composer.render(scene, camera);
});

function render(){ composer.render() };

Этот код только помещает кольцо в сцену в масштабе по умолчанию и не удаляет его из композиции, не уменьшает непрозрачность и не масштабирует ее.

Мне также приходилось находить неловкие решения для удаления объектов из сцен, потому что scene.remove (), похоже, не работает половину времени и в конечном итоге отстает от моей сцены, если позже я вручную не установлю непрозрачность на 0.

Заранее спасибо и извините, если это очевидное решение.

1 Ответ

0 голосов
/ 05 января 2019

threejs.org / docs / index.html # api / en / core / Geometry.scale - это решение.

if(bpm >= 33 && bpm <= (33+6)){
  if(bpm == 33){ ring = new THREE.Mesh( ringgeometry, ringmaterial), scene.add(ring) };
  if(bpm >= 33 && bpm < 33+9){ ringgeometry.scale(1.01,1.01,1), ringmaterial.opacity -=0.008 }
  ring.position.set(0, 0, -70)};
if(bpm == (33+4)){ringgeometry.scale(-10000,-10000,1)};

ответ тюрьмы849

...