我目前正在尝试在three.js中制作一个动画,由于某些原因,我在更新功能中缩放对象时遇到了问题,但我没有不透明度、位置等问题。我不确定我是不是用错了命令,
我尝试过很多东西,比如scale、material.scale、geometry.scale等等。我只是感到困惑,我可能只是错过了明显的东西,但在谷歌搜索不同的解决方案和使用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。
提前感谢,如果这是一个显而易见的解决方案,我很抱歉。
发布于 2019-01-05 06:34:38
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)};
由prisoner849回答
https://stackoverflow.com/questions/54014226
复制相似问题