three.js如何给外置模型添加点击事件啊

发布网友 发布时间:2022-04-24 08:38

我来回答

3个回答

热心网友 时间:2022-04-23 02:48

我说一下我的实现场景。

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。希望能帮助到你。

热心网友 时间:2022-04-23 04:06

 假设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 );

是这样一个思路。。

热心网友 时间:2022-04-23 05:40

这个实现了吗 我也遇到了这个问题 希望你能帮我一下 谢谢

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com