在三.js中旋转带有轨道控制的相机时奇怪的晃动
Strange shaking while rotating the camera with Orbit Controls in Three.js
我正在制作太阳系的模型。这是我目前的指标:
scale = 0.001;
// 1 unit - 1 kilometer
var AU = 149597871 * scale;
这就是我定义摄像机、渲染器和控件的方式:
camera = new THREE.PerspectiveCamera(70, window.innerWidth / window.innerHeight, 0.1 * scale, 0.1 * AU);
renderer = new THREE.WebGLRenderer({ alpha: true, antialias: true });
controls = new THREE.OrbitControls(camera, renderer.domElement);
然后我为用户提供在对象之间跳转的选项,这就是用户选择行星/月亮后设置相机的方式:
function cameraGoTo() {
for (var i = scene.children.length - 1; i >= 0 ; i--) {
var obj = scene.children[i];
if (obj.name == parameters.selected) {
controls.target = obj.position;
camera.position.copy(obj.position);
camera.position.y += obj.radius * 2;
}
}
}
问题是对于小行星/卫星(半径<= 1000公里),相机在围绕物体旋转时会晃动。我只有计算机图形学的基本知识,所以我不知道这是轨道控制的问题,或者它与渲染器本身有关......所以我试图设置logarithmicDepthBuffer = true
但没有帮助。尝试不同的scale
也没有改变任何东西。
提前感谢任何帮助/线索。
编辑:
这是小提琴:http://jsfiddle.net/twxyz/8kxcdkjj/
您可以看到,以下任何一种情况都会增加摇晃:
- 物体越小,
- 物体离原点越远,
这是什么原因造成的?显然,它似乎与相机的近/远光谱值无关,而是与物体与场景中心的距离有关。
我已经想出了解决方案。
我的问题是处理远离原点的物体时的浮点精度错误。事实证明,这是一个非常众所周知的问题,并且有多种解决方案。我用过这个:
http://answers.unity3d.com/questions/54739/any-solution-for-extreamly-large-gameworlds-single.html
基本上,我们不是移动摄像机/播放器,而是相对于始终位于原点的摄像机/播放器转换整个场景。在这种情况下,轨道控制的目标始终是原点。
相关文章:
- THREE.js轨道控制不工作
- 三.js轨道控制.js可以改变反Y轴旋转吗?
- ThreeJS轨道控制中的惯性
- 轨道控制 '三.球形不是构造函数的错误
- 放大较大网页时出现轨道控制问题
- 在三.js中旋转带有轨道控制的相机时奇怪的晃动
- 轨道控制中的三个.js极限平移
- 在三个JS中缩放相机,没有轨迹球控制或其他相机控制库
- 基础 4 + 轨道滑块:无法控制动画速度
- Three.js上的平滑相机控制开关
- three.js通过轨道控制获取相机位置
- three.js轨道控制备选方案
- 三ejs轨道相机短旋转
- 三ejs相机控制与按钮
- 3 .js轨道控制
- 帮助添加缩放到css3d_youtube演示-轨迹球控制搞乱相机的位置
- 3 .js更新光轨道控制
- 3 . js轨道控制-启用和禁用位置跳跃
- 相机旋转点联锁控制
- 轨道控制-限制平移运动