0

我在这里使用先前回答的问题中的一个示例:Three Js Object3D Button Group Detect Single Object Click While Mouse Movement Causes Object3D Button Group Zoomi

我进行了一些更改以使其按我想要的方式工作,但遇到了一些我无法解决的问题。

这是我的 jsbin:http: //jsbin.com/agadiw/1/

1)我将对象从 CubeGeometry 切换到 SphereGeometry 并且碰撞不太准确,似乎我只能点击球体的某些部分来触发碰撞。球体的大小与立方体的大小相同,有时当我在球体外部单击时也会触发碰撞。我在碰撞时提醒球体独有的数字。是否有某种设置或位置我错了?

2)当一个球体被点击时,我尝试将其颜色更改为红色,但是所有球体的颜色都变为红色,而不仅仅是点击的那个。我查看了单击球体时的相交数组是什么,它只返回单击的那个,我不知道为什么它会改变所有这些。

3)最后,我一直在寻找好的资源、教程、示例,它们是最新的或对事情的工作方式有很好的解释,但我还没有真正找到任何我尝试过的官方文档,但是很多部分只需说“待办事项”。我只是想知道是否有人有任何公正的资源可以引导我帮助我学习这些东西。

谢谢你的帮助。

4

2 回答 2

1

您正在使用 intersectObjects() 来检查交点。然而,交叉点因此包括所有这些对象。要修复它,您需要使用 intersectObject() 循环遍历对象

 for (var i=0; i<=(objects.length-1); i++) {
     var intersect = raycaster.intersectObject(objects[i]);
     if (intersect.length > 0) {
         //change the color here
         break; //important to break the loop
     }
 }

至于文件;这些都是很好的例子。但目前主要是通过源代码和github挖掘来找到你需要的东西

于 2013-07-03T10:00:54.253 回答
1

1)在您的情况下,CSSmargin必须为零。

body { background: black; margin: 0; overflow: hidden }

或者,您可以查看此问题的答案。

2)所有对象的颜色都会发生变化,因为所有对象都共享相同的材质。改为这样做:

ButtonsMesh = new THREE.Mesh( ButtonsGeometry, new THREE.MeshBasicMaterial() );

3) 你将不得不通过学习示例和阅读留言板来学习three.js。另请查看此答案以获取其他提示。

于 2013-07-06T00:47:06.817 回答