如何在three.js上添加两个向量?

时间:2015-04-08 17:07:43

标签: javascript three.js

无法找出我遗失的内容......

展开示例代码我发现这些行并将其转储到控制台以了解出现了什么问题:

        var intPosition = new THREE.Vector3( Math.floor(result.point.x), 0, Math.floor(result.point.z) );
        console.log(intPosition);
        brush.position = intPosition.clone().add(new THREE.Vector3(0.5, 0.5, 0.5) );
        console.log(brush.position);

但..........输出如下(来自firebug控制台):

Object { x=0, y=0, z=10, more... }
Object { x=0, y=0, z=0, more... }

来自three.js docs

.add ( v ) this

向此向量添加v。

here

add: function ( v1, v2 ) {

    this.x = v1.x + v2.x;
    this.y = v1.y + v2.y;
    this.z = v1.z + v2.z;

    return this;

},

出了什么问题?它是js上的整数+浮点运算吗?

编辑注:

我不知道它是否相关但是这个问题出现在我当前的Three.js版本(修订版71)上,在旧版本(r60或更低版本)上正常工作。

1 个答案:

答案 0 :(得分:4)

您必须使用Vector3类的.set()方法。

var brushPosition = intPosition.clone().add(new THREE.Vector3(0.5, 0.5, 0.5) );
brush.position.set(brushPosition.x, brushPosition.y, brushPosition.z);

您也可以使用Vector3类的复制功能。

brush.position.copy(intPosition.clone().add(new THREE.Vector3(0.5, 0.5, 0.5));

编辑: 原因是object3D的position属性是不可写的。它可能没有使用赋值运算符设置。