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

Pau*_*eno 0 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);
Run Code Online (Sandbox Code Playgroud)

但是........输出如下(从firebug控制台):

Object { x=0, y=0, z=10, more... }
Object { x=0, y=0, z=0, more... }
Run Code Online (Sandbox Code Playgroud)

来自three.js docs

.add ( v ) this
Run Code Online (Sandbox Code Playgroud)

向此向量加v。

这里

add: function ( v1, v2 ) {

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

    return this;

},
Run Code Online (Sandbox Code Playgroud)

怎么了?它是js上的整型浮点数法吗?

编辑说明:

我不知道它是否相关,但是此问题发生在我的Three.js当前版本(修订版71)中,在较旧版本(r60或更低版本)上可以正常工作。

mic*_*nil 6

您必须使用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);
Run Code Online (Sandbox Code Playgroud)

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

brush.position.copy(intPosition.clone().add(new THREE.Vector3(0.5, 0.5, 0.5));
Run Code Online (Sandbox Code Playgroud)

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

  • `brush.position.copy(intPosition).addScalar(0.5);` (3认同)