简体   繁体   English

Three.js动画控件

[英]Three.js animation control

i have blender animation imported to three.js. 我将Blender动画导入了three.js。 I want control the animation using vertical slider bar "id=#roof_angle". 我想使用垂直滑块“ id =#roof_angle”控制动画。 So if i drag my slider up/down the animation go forward/backward. 因此,如果我向上/向下拖动滑块,动画将向前/向后移动。 All works fine on the first run.I can go up and down. 第一次运行一切正常。我可以上下移动。 If i play a bit longer my animation start to miss my bar position. 如果我播放更长的时间,我的动画就会开始错过我的杠铃位置。 How to fix this? 如何解决这个问题? What do i miss? 我想念什么? Animation has 90 frames and my bar height is 504px. 动画有90帧,我的条形高度为504px。

My code 我的密码

function onDocumentMouseDownY( event ) {
   document.addEventListener( 'mousemove', onDocumentMouseMoveY, false );
   last_positionY = event.clientY; 
}
function onDocumentMouseMoveY( event ) {
    delta_mouseY = last_positionY - event.clientY;
    roofAngle = $( "#roof_angle" ).slider( "option", "value")
if(delta_mouseY >= 1){
   if(roofAngle >= 0 && roofAngle < 90 ){
      roofAngle ++;
      animation.update(1/24*(90/504)*delta_mouseY);
   }
}
   else{            
   if(roofAngle > 0){
    animation.update(1/24*(90/504)*delta_mouseY);
    roofAngle --;
   }
   }
  last_positionY = event.clientY;

} }

So, i solve my problem with nasty way adding some conditions to "animation.currentTime", where my animation length is 3.75. 因此,我以讨厌的方式解决了我的问题,在“ animation.currentTime”中添加了一些条件,动画长度为3.75。 But it doesn't answer why my animation delta time float. 但这并不能回答为什么我的动画增量时间浮动。

function onDocumentMouseMoveY( event ) {
        delta_mouseY = last_positionY - event.clientY;
        roofAngle = $( "#roof_angle" ).slider( "option", "value")
        timeFrameDelta = 1/24*(90/504)*delta_mouseY;


        if(delta_mouseY >= 1){
            if(roofAngle >= 0 && roofAngle < 90 && animation.currentTime+timeFrameDelta < 3.75){
                roofAngle ++;
                animation.update(timeFrameDelta);
            }
        }
        if(delta_mouseY < 0){
            if (animation.currentTime < 0){
                animation.currentTime = 0;
            }
            if(roofAngle > 0){
                animation.update(timeFrameDelta);
                roofAngle --;
            }
        }

        last_positionY = event.clientY;
  }

If, some one know better way pleas give me some tips. 如果有人知道更好的方式,请给我一些提示。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM