【问题标题】:Animating an object from its center with sine wave in three.js在three.js中使用正弦波从其中心为对象设置动画
【发布时间】:2014-12-02 22:56:31
【问题描述】:

我正在尝试复制这种效果:https://dribbble.com/shots/1754428-Wave?list=users&offset=5

我想为飞机的顶点设置动画,类似于我提供的链接。我知道它是使用正弦波传播实现的,但我不知道如何从平面的中心点开始运动。现在,我有这样的东西

(function drawFrame(ts){
  window.requestAnimationFrame(drawFrame);
  var vLength = plane.geometry.vertices.length;
  for (var i = 0; i < vLength; i++) {
    var v = plane.geometry.vertices[i];
    v.z = Math.sin(ts / 500 + (v.x * (vLength / 2)) * (v.y / (vLength / 2))) * 3 + 5;
  }

它的工作原理还不错,但请注意左上角和右下角的运动是如何向内的,朝向平面的中心而不是向外,因为它应该是。其他两个角的行为与我希望的完全一样。

这是我目前拥有的链接: http://codepen.io/gbnikolov/pen/QwjGPg

欢迎所有建议和想法!

【问题讨论】:

    标签: javascript animation three.js


    【解决方案1】:

    我找到了你的乐趣之后的功能!

    (function drawFrame(ts){
      var center = new THREE.Vector2(0,0);
      window.requestAnimationFrame(drawFrame);
      var vLength = plane.geometry.vertices.length;
      for (var i = 0; i < vLength; i++) {
        var v = plane.geometry.vertices[i];
        var dist = new THREE.Vector2(v.x, v.y).sub(center);
        var size = 5.0;
        var magnitude = 2.0;
        v.z = Math.sin(dist.length()/size + (ts/500)) * magnitude;
      }
      plane.geometry.verticesNeedUpdate = true;
      renderer.render(scene, camera);
    }());
    

    圆形图案是通过创建一个点来创建的,就像我在上面所做的那样,称为center。这就是波浪的发源地。我们计算到中心点的距离。然后我们sin 到中心点的距离来创建上/下。接下来我们添加时间ts 来创建运动。最后我们添加一些变量来调整波浪的大小。

    【讨论】:

    • 谢谢哥们,效果很好!你能解释一下所涉及的代码吗?
    • 更新了更多的答案
    猜你喜欢
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 2018-08-21
    • 1970-01-01
    • 2013-08-26
    相关资源
    最近更新 更多