Three.js光线对象相交

Three.js光线对象相交,three.js,collision,intersection,raycasting,Three.js,Collision,Intersection,Raycasting,朋友们。 这是我的密码。它应该找到光线和立方体的交点。但它不起作用,让我发疯。这段代码很简单,但我很难找到错误。请帮忙 var容器; 摄像机、控件、场景、渲染器; init(); 制作动画(); 函数init(){ 摄像头=新的三个透视摄像头(75,window.innerWidth/window.innerHeight,11000); 摄像机位置z=1000; 控件=新的三个轨迹球控件(摄像头); controls.rotateSpeed=1.0; controls.zoomSpeed=1

朋友们。 这是我的密码。它应该找到光线和立方体的交点。但它不起作用,让我发疯。这段代码很简单,但我很难找到错误。请帮忙


var容器;
摄像机、控件、场景、渲染器;
init();
制作动画();
函数init(){
摄像头=新的三个透视摄像头(75,window.innerWidth/window.innerHeight,11000);
摄像机位置z=1000;
控件=新的三个轨迹球控件(摄像头);
controls.rotateSpeed=1.0;
controls.zoomSpeed=1.2;
控制点速度=0.8;
controls.noZoom=false;
controls.noPan=false;
controls.staticMoving=true;
controls.dynamicDampingFactor=0.3;
controls.keys=[65,83,68];
控件。addEventListener('change',render);
//世界
场景=新的三个。场景();
var testObject_G=新的三立方测量法(100100100);
var testObject_M=new THREE.MeshBasicMaterial({color:0xBBBBBB});
var testObject\u Mesh=new THREE.Mesh(testObject\u G,testObject\u M);
testObject_Mesh.position.x=300;
添加(testObject_网格);
scene2=新的三个.Object3D();
//射线
变量方向=新的三个向量3(1,0,0);
方向。规范化();
var startPoint=新的三个向量3(0,0,0);
var ray=新的三点光线投射器(起点、方向);
var raysintersects=ray.intersectObjects(scene.children,true);
如果(光线与[0]相交){
console.log(rayIntersects[0]);
var几何=新的三立方测量法(10,10,10);
var material=new THREE.MeshBasicMaterial({color:0xff0000});
var cube=新的三个网格(几何体、材质);
cube.position=光线相交[0]。点;
场景2.添加(立方体);
}
var-ray_G=新的三点几何体();
射线顶点推(新的三向量3(0,0,0));
光线顶点推(方向倍增标度(1000));
var-ray_M=新的三线基本材质({color:0x000000});
var ray_Mesh=新的三线(ray_G,ray_M);
场景2.添加(光线网格);
场景。添加(场景2);
//渲染器
renderer=new THREE.WebGLRenderer({antialas:true});
renderer.setSize(window.innerWidth、window.innerHeight);
setClearColor(0xffffff,1);
container=document.getElementById('container');
container.appendChild(renderer.doElement);
//
addEventListener('resize',onWindowResize,false);
}
函数onWindowResize(){
camera.aspect=window.innerWidth/window.innerHeight;
camera.updateProjectMatrix();
renderer.setSize(window.innerWidth、window.innerHeight);
controls.handleResize();
render();
}
函数animate(){
请求动画帧(动画);
控件更新();
}
函数render(){
渲染器。渲染(场景、摄影机);
}


非常感谢您的回复。

在渲染循环期间,three.js会根据指定的
对象。位置
对象。旋转/四元数
对象。缩放
为您更新每个对象的变换矩阵

由于在第一次渲染调用之前调用了
Raycaster.intersectObjects()
,因此必须在光线投射之前自己更新对象矩阵

scene.updateMatrixWorld();
小提琴:


three.js r.64

在渲染循环期间,three.js会根据指定的
对象.位置
对象.旋转/四元数
对象.缩放
为您更新每个对象的变换矩阵

由于在第一次渲染调用之前调用了
Raycaster.intersectObjects()
,因此必须在光线投射之前自己更新对象矩阵

scene.updateMatrixWorld();
小提琴:


three.js r.64

太好了,谢谢你的时间、努力和好意太好了,谢谢你的时间、努力和好意