0

在场景中添加了 3D collada (.dae) 文件。“DAE”文件包含名称为“monster”的几何图形,ID 为“monster-mesh-skin”。我试图将鼠标单击事件应用于几何“怪物”。喜欢,

var monster = dae.getChildByName("monster"); // get geometry
monster.addEventListener("click", meshClickHandler);

点击事件不起作用。我试过THREE.Vector3()并且THREE.Ray喜欢,

var mouse3D = new THREE.Vector3();
mouse3D.x = event.clientX;
mouse3D.y = event.clientY;
mouse3D.z = 0.5;

var ray = new THREE.Ray(mouse3D);

var intersects = ray.intersectObjects(monster);
console.dir(intersects);

在文档点击处理程序上。在 intersects 变量中不包含任何值。

是否有任何解决方案可以为 3D 模型应用鼠标事件并对其进行控制?

4

1 回答 1

1

看来您需要重新考虑一下这种方法。场景中的任何 3D 对象仅作为对象的 2D“绘图”而存在,并且其本身不能附加标准 DOM 事件处理程序。

您想要的是文档本身的通用事件侦听器来捕获鼠标点击,如下所示:

document.addEventListener( 'click', detectIntersect, false );

现在,Three.js 示例目录中有大量示例可以准确地向您展示如何“单击您的对象”,但在 3D 术语中,它被称为对象拾取光线投射对象。在搜索示例/帮助时,这些术语可能会有所帮助。看看这些例子:

http://threejs.org/examples/webgl_interactive_cubes.html http://threejs.org/examples/canvas_interactive_cubes_tween.html

最后一点,您似乎使用的是 Three.js 库的 r57 或更早版本。我建议升级到最新版本,因为当所有人都在同一页面上时,更容易获得社区的支持 :)

希望有帮助,保重。

于 2013-09-30T12:36:58.193 回答