Ray.intersectObjects()总是没有命中

时间:2014-08-07 19:54:35

标签: three.js

我创建了一个球体,球体的中心位于0,0,0。

球体的半径为9.

我创建了一个位于球体表面/面上方的立方体。

当我点击立方体然后继续点击球体表面上的任何点时,我的立方体将旋转它相对于点击球体的点的相对位置(以查看点的方向所以说)然后它将沿着球体的表面朝着点击的点移动。旋转和移动都发生在渲染循环中。

我想要做的是从相对于立方体位置的点投射光线,但距离球体中心的距离更远。因此,例如,如果到我的球体的任何给定面上的任何给定点的距离是~8.8 - 9(当然顶点将在9的距离处,并且任何面的中心将是~8.8 - 8.9)距离我从球体中心的立方体是9.1。我想从大约12圈的距离向我的球体中心投射一条射线。

所以,如果我的立方体位于0,0,9.1,那么我想要投射一条光线,它的起源是0,0,12,而目的地是0,0,0 。然后仅将球体作为要交叉的对象,确定沿任何给定面的任何给定点的距离,然后将立方体的距离设置为12 - someDistance。这样看起来好像立方体实际上沿着球体表面移动。如果我修改球体的特征,立方体似乎会沿着表面的轮廓移动。

这是我的代码,它位于循环渲染函数内部。 不幸的是,它没有任何结果。

var direction = new THREE.Vector3(0,0,0);
var origin = new THREE.Vector3(object_cubi[x-1].posiX, object_cubi[x-1].posiY, object_cubi[x-1].posiZ);
origin.normalize();
origin.x *= 12;
origin.y *= 12;
origin.z *= 12;
var disRay = new THREE.Raycaster();
disRay.ray.set(origin, direction);
var rayIntersect = disRay.intersectObjects( targetList );

document.getElementById("test7").value = rayIntersect.length;

rayIntersect.length始终为0。 我错过了什么?

要选择立方体并在曲面上选取一个点,我必须使用raycaster并且该代码可以正常工作。但它确实包含了投影仪()。

1 个答案:

答案 0 :(得分:0)

我需要做的就是从球体的中心投射射线并使球体的材质成为双面。

material.side = THREE.DoubleSide;

现在,我的立方体沿着球体的轮廓移动。