Vector 光线。摄影机(对象)正在查看的方向

Vector 光线。摄影机(对象)正在查看的方向,vector,camera,three.js,collision,direction,Vector,Camera,Three.js,Collision,Direction,我正在做简单的碰撞检测,虽然我可以用THREE.ray轻松地检测上/下物体,但当它们旋转时,我很难找到相机(或任何物体)的前面/后面是什么?我试着用投影仪投射光线,并用辅助箭头显示光线是如何射出的。一旦我开始绕Y轴旋转相机,光线就会指向相反的方向,或者只是行为怪异 ray = new THREE.Ray(); projector = new THREE.Projector(); vector = projector.projectVector( coll.getObject().matrix.g

我正在做简单的碰撞检测,虽然我可以用THREE.ray轻松地检测上/下物体,但当它们旋转时,我很难找到相机(或任何物体)的前面/后面是什么?我试着用投影仪投射光线,并用辅助箭头显示光线是如何射出的。一旦我开始绕Y轴旋转相机,光线就会指向相反的方向,或者只是行为怪异

ray = new THREE.Ray();
projector = new THREE.Projector();
vector = projector.projectVector( coll.getObject().matrix.getPosition().clone(), camera );
ray.direction = vector.normalize();
ray.origin = coll.getObject().matrix.getPosition().clone();
helper.setDirection(ray.direction.clone());
helper.position = ray.origin.clone();

最后,我在连接到相机的对象周围设置了一个立方体,并通过叠加的顶点拍摄光线,如下所示:

vertices=coll.getObject().geometry.vertices;
rad=coll.getObject().boundRadius+1;
变量方向={
“向上”:[4,1],
“向下”:[6,2],
“正面”:[3,4],
“返回”:[7,0],
“左”:[5,6],
“权利”:[1,2],
};
变量冲突={
“向上”:{},
“向下”:{},
“前线”:{},
“后退”:{},
“左”:{},
“权利”:{},
};
用于(输入方向){
(方向[key].length>1)?localVertex=顶点[directions[key][0]].clone().addSelf(顶点[directions[key][1]].clone()):localVertex=顶点[directions[key][0]].clone();
globalVertex=coll.getObject().matrix.MultiplyVector 3(localVertex);
directionVector=globalVertex.subSelf(coll.getObject().position);
ray=new THREE.ray(coll.getObject().position.clone(),directionVector.clone().normalize(),0,1000);
相交=光线。相交对象(obj,真);
如果(相交长度>0){
距离=相交[0]。距离;

如果(距离>=0&&distance,这稍微好一点,但仍取决于我的相机是否位于接近(0,0,0)的坐标处,不确定发生了什么:
var localVertex=coll.getObject().position.clone();var globalVertex=coll.getObject().matrix.multilyvector3(localVertex);var directionVector=globalVertex.subSelf(coll.getObject().position.clone());ray=new THREE.ray(coll.getObject().position.clone(),directionVector.clone().normalize());//ray.origin.addSelf(ax.clone().MultilyScalar(rad/2));helper.setDirection(ray.direction.clone());helper.position=ray.origin.clone();