three.js如何给外置模型添加点击事件啊 10
我说一下我的实现场景。
1.引入了一个obj的模型(引入相应的loader.js。我这里用的MTL,OBJ,DDSloader)
THREE.Loader.Handlers.add( /\.dds$/i, new THREE.DDSLoader() );
var mtlLoader = new THREE.MTLLoader();
mtlLoader.load('model/gaoda/file.mtl',function(materials){
materials.preload();
var loader = new THREE.OBJLoader();
loader.setMaterials(materials);
loader.load( 'model/gaoda/file.obj', function ( obj ) {
_this.cube = obj;
_this.cube.position.set(0,1,0);
_this.scene.add( _this.cube );
}, onProgress, onError );
});
2.在three的raysects为模型添加事件
var raycaster = new THREE.Raycaster();
var mouse = new THREE.Vector2();
mouse.x = ( event.clientX / window.innerWidth )*2 - 1;
mouse.y = -( event.clientY / window.innerHeight )*2 + 1;
raycaster.setFromCamera( mouse, _this.camera );
var intersects = raycaster.intersectObjects( _this.cube.children );
_this.initMessage(intersects,event.clientX,event.clientY);
3.最后监听该点击事件就行了。
window.addEventListener('click',this.clickModel,false);
效果图如下:
我也是才开始学习THREE。希望能帮助到你。
2016-05-11 · 知道合伙人互联网行家
假设dae_scene从ColladaLoader一个COLLADA现场回来,这里是你可以做什么检查交集:var toIntersect = [];
THREE.SceneUtils.traverseHierarchy(dae_scene, function (child) {
if (child instanceof THREE.Mesh) {
toIntersect.push(child);
}
});
这得到了COLLADA场景内的所有网格对象。您可以在数组中寻找射线相交,像这样:var ray = new THREE.Ray( camera.position,
vector.subSelf( camera.position ).normalize() );
var intersects = ray.intersectObjects( toIntersect );是这样一个思路。。