我正在使用这个:http ://leapmotion.com 开发一个 3D 网格操纵器。到目前为止,我已经能够很好地操纵这些点,通过“抓取”和移动它们,但是我现在希望能够旋转网格并在相反的面上工作。我所做的是添加一个名为“可旋转”的额外对象,如下所示:
scene=new THREE.Scene();
camera = new THREE.PerspectiveCamera(70,window.innerWidth/window.innerHeight,1,8000)
renderer=new THREE.WebGLRenderer( { clearColor: 0x000000, clearAlpha: 1, maxLights:5 } )
//This is the 'Mesh Scene'
rotatable = new THREE.Object3D()
scene.add(rotatable)
//Mesh we are altering
var material = new THREE.MeshNormalMaterial()
material.side=2
var geom = new THREE.SphereGeometry(200,10,10);
var sphere = new THREE.Mesh(geom, material)
rotatable.add(sphere)
然后我试图改变这个球体的顶点,但要这样做,我需要做一个“碰撞测试”以查看顶点是否被“抓取”这涉及检查顶点位置并查看它是否与一个重合你的手指位置(下面的伪代码)
if(finger.x == vertex.x && finger.y == vertex.y && finger.z == vertex.z){
vertex.grabbed = true
}
当可旋转对象的旋转为零时,这可以正常工作,但是当它开始旋转时,碰撞测试仍将测试未旋转的顶点位置(这是有道理的)。我的问题是如何在“场景/全局”位置找到顶点的位置。到目前为止,我能想到的唯一方法是计算“可旋转”的旋转并使用这个向量来计算新的顶点位置。
我对数学一无所知,所以这可能不是要走的路,即使是这样,我也将不得不如此努力地挣扎,以至于我永远不会知道我是否只是做错了数学,或者这不是不是我应该去计算它的方式。显然我愿意完成这项工作,但只是想确保这是这样做的方法,而不是另一种更简单的方法。
如果对代码有任何其他问题,请告诉我,并提前感谢您的宝贵时间!
艾萨克