【发布时间】:2018-12-29 06:44:50
【问题描述】:
我知道当点击鼠标时如何在场景中投射物体,但现在我需要知道场景中的两个物体是否可以相互投射。
这是,我在场景中加载一个 3D 对象,例如 OBJ 对象中的两个房间,然后我在某些点添加三个网格框,例如第一个房间的两个点和第二个房间的一个点。
那么第一个房间的两个点可以互相光线投射(有直视),但是第一个房间的两个点不能光线投射到第二个房间的点。(他们没有通过房间墙壁的视觉)。
我附上了用于加载场景和点的代码,有什么建议吗?
//LOAD MAIN 3D OBJECT
var objLoader = new THREE.OBJLoader();
objLoader.setMaterials(materials);
objLoader.setPath('./asset/3d/');
objLoader.load("model01.obj", function(object){
var mesh = object.children[0];
mesh.castShadow = true;
mesh.receiveShadow = true;
mesh.rotation.x = Math.PI / 2;
var box = new THREE.Box3().setFromObject( object )
var ox = -(box.max.x + box.min.x) / 2;
var oy = -(box.max.y + box.min.y) / 2;
var oz = -(box.max.z + box.min.z) / 2;
mesh.position.set(ox, oy, oz);
_scene.add(mesh);
render();
setTimeout(render, 1000);
}
//LOAD count_points inside scene
for(var i=0;i<cta_points;i++){
var c_r = 2;
var c_geometry = new THREE.BoxBufferGeometry( c_r, c_r, c_r );
var c_material = new THREE.MeshLambertMaterial( { color: new THREE.Color("rgb("+(40 + 30)+", 0, 0)"),opacity: 0.0,
transparent: true} );
var c_mesh = new THREE.Mesh( c_geometry, c_material );
var position = get_positions(i);
c_mesh.position.copy(position);
c_mesh.name="BOX";
scene.add( c_mesh );
}
【问题讨论】:
-
THREE.Raycaster()有.set()方法。
标签: three.js raycasting