2015-08-18 173 views
0

使用OrbitControls在three.js中旋转场景,我想要一个planeMesh对象始终面向相机。我正在尝试以下内容,但它只是疯狂地旋转(似乎处理器密集型),但它看起来像当我用鼠标围绕场景(移动相机)时,它会试图保持前方。我试图让它只在相机移动时慢慢重新定位。我在这里做错了什么?three.js:平滑地旋转与OrbitControls相反的对象camera.rotation.y

Here's a plunker

下面是相关的JS:

function animate() { 
    requestAnimationFrame(animate); 

    planeMesh.rotation.y -= Math.PI /camera.rotation.y; 

    render(); 
} 

我也试过以下(没有也行):

function animate() { 
    requestAnimationFrame(animate); 
    var a = camera.rotation.y; 
    var b = camera.rotation.y; 

    if (a == b) { 
     planeMesh.rotation.y -= Math.PI /camera.rotation.y; 
     } else {  
    } 

    render(); 
    a = camera.rotation.y; 
} 

**编辑 我想cameraplaneMesh保持目前的关系。 这里是开始旋转: planeMesh Rotation y = 3.141592653589793 camera Rotation y = -0.06894749489830237

不过,我觉得相机使用THREE.Euler,并planeMesh使用Math.PI旋转,所以......使用不同的系统,这两个旋转测量?

当然,如果我能得到起点的差异,那么只有当差异更大,并且差异比起始差异更大时才更改planeMesh rotation.y,那么我将完成我的目标。但我该怎么做?我是否必须以某种方式翻译这两种测量系统?当我旋转场景时,相机确实使用了不同的测量比例。

回答

2

确保飞机始终面向相机的最简单方法是简单地将其连接到相机而不是场景,例如, camera.add(planeMesh);并将飞机相对于相机进行定位。然后他们的旋转总是自然对齐。

另外,如果两者是相同的父(通常为场景)的儿童,使用planeMesh.lookAt(camera.position);

+0

啊!辉煌!很简单。谢谢! –