Three.js - 需要有关静态声明和动态ArrowHelper的帮助

时间:2016-10-15 20:29:41

标签: javascript dynamic three.js

我有一个关于2个不同代码片段的问题,用于沿directionVectorLocal向量定义的方向绘制矢量。

第一个:

var transportedVector = {
    coordLocal,
    arrowHelper,
    directionVectorLocal,
    directionVector
};

var arrowHelperTest = new THREE.ArrowHelper(transportedVector.directionVectorLocal.normalize(), originLocalBasis, 100);
camera.add(arrowHelperTest);

在这种情况下,箭头arrowHelperTest很好地显示在场景中。

现在,第二个:

var arrowHelper;
var transportedVector = {
    coordLocal,
    arrowHelper,
    directionVectorLocal,
    directionVector
};

transportedVector.arrowHelper = new THREE.ArrowHelper(transportedVector.directionVectorLocal.normalize(), originLocalBasis, 100);
camera.add(transportedVector.arrowHelper);

在这种情况下,不显示箭头transportedVector.arrowHelper

在这里,我必须声明" var arrowHelper;"就在定义transportedVector对象之前,因为如果没有,我会得到一个" ReferenceError: arrowHelper is not defined"错误。

我想将动态transportedVector.arrowHelper声明定义到transportedVector对象中,并能够将其绘制到场景中。解决方案可能很简单,但我不是Javascript的专家。

如果有人能看出错误,那就太好了。

由于

1 个答案:

答案 0 :(得分:0)

查看我对您原始帖子的评论。在我的情况下,此代码似乎正常工作:

var directionVectorLocal = new THREE.Vector3(0,0,-1);
var originLocalBasis = new THREE.Vector3(0,0,0);
var transportedVector = {
    arrowHelper: null,
    directionVectorLocal: directionVectorLocal
};

transportedVector.arrowHelper = new THREE.ArrowHelper(transportedVector.directionVectorLocal.normalize(), originLocalBasis, 100); // <-- Note the length of the arrow must be greater than the zNear value of the camera, otherwise it won't be visible.
camera.add(transportedVector.arrowHelper);
scene.add(camera);