2012-07-24 104 views
1

使用three.js可以将平移对象围绕其中心旋转。我创建了一个jsfiddle,http://jsfiddle.net/yKt6h/4/如何使用three.js旋转关于中心的平移对象?

当我检查控制面板中的自动旋转模式时,我可以将平移后的立方体绕其中心旋转。当我尝试用鼠标移动旋转立方体时,是否有可能产生类似的效果?

如果可能的话,请给我提供的示例代码

+0

我仍然在等待重播。有人可以解释我需要在TrackballControls.js中执行的所有修改来实现此请求吗? – 2012-07-26 06:34:34

回答

2

查看您的jsfiddle THREE is not defined然而,当我得到在控制台的错误你所要求并不困难。轨迹球相机的设计完全符合您的需求。如果您在原点渲染对象,则只需初始化轨迹球控件即可。我创建了一个简单的moon demo that uses TrackballControls。您无需在TrackballControls.js中进行任何修改。

在上面的演示中,我调用一个函数初始化轨迹球控制功能在我ThreeUtil.js文件中定义为:

function initTrackball(camera, rotate, zoom, pan, damping) { 
    var controls = new THREE.TrackballControls(camera); 
    controls.rotateSpeed = rotate || 1.0; 
    controls.zoomSpeed = zoom || 1.2; 
    controls.panSpeed = pan || 0.8; 
    controls.noZoom = false; 
    controls.noPan = false; 
    controls.staticMoving = true; 
    controls.dynamicDampingFactor = damping || 0.3; 
    return controls; 
} 

如果你不希望用户能够平移或缩放,只能够围绕您的对象旋转,然后在上面的函数中简单设置controls.noZoom = truecontrols.noPan = true

因为我的月亮对象是在我的场景原点所有我需要做的就是设置相机一定距离的由来。我们将把它放在正z轴上,因此它已经在原点处查看我们的对象。然后我们调用上面的函数来设置控件。我通过在一个自定义的转速:

controls = initTrackball(camera, 0.8); 

然后在每一帧所有你需要做的就是调用你的动画循环更新功能:

controls.update(camera); 
+0

我已经更新了jsfiddle来修复错误。链接:http://jsfiddle.net/yKt6h/4/在这里我使用了initTrackball代码,但它没有按预期工作。当我使用鼠标旋转立方体移动它的旋转w.r.t [0,0,0]。我希望立方体在立方体中心旋转。当我们检查结果页面右上角的控制面板中的旋转复选框时,可以查看预期结果。 – 2012-09-11 04:42:56

+0

http://jsfiddle.net/yKt6h/5/ – 2012-09-11 05:17:28

+0

jsfiddle.net/yKt6h/5没有提供解决问题。即使在平移之后,我也希望立方体能够在其中心旋转。这有可能实现吗? – 2012-09-12 08:38:40

相关问题