Three.js场景暴力摇晃

时间:2013-02-12 19:04:03

标签: javascript graphics three.js webgl

我目前正致力于一个涉及使用three.js

处理非常大和非常小的距离的项目

我在场景的较小一侧遇到问题,“场景”将开始猛烈摇晃。

起初我认为这是Z-Buffer的一个问题,所以我写了一个小片段,每次输入一个新区域时都会改变摄像机的近端和远端属性。这有助于解决我之前遇到的“闪烁”问题,但场景仍然在很短的距离内发生了显着变化。

发生这种情况的条件之一如下

camera.near = .0133333
camera.far = 12
positionToObjects = 6

这应该意味着z分辨率大约是:.0001,我觉得它应该足够好了,但发生的震动远不止于此。

对象本身的范围从“全局”位置到-200000 - 200000,但场景本身不会改变位置

我认为可能的另一件事是我一直在使用的相机控件(缩写)如下

if(mouseIsDown == true){
    if(this.movementSpeed < this.maxSpeed){
        this.movementSpeed += this.acceleration
    }else{
        this.movementSpeed = this.maxSpeed
    }

}else{
    if(this.movementSpeed > this.minSpeed){
        this.movementSpeed = this.movementSpeed/this.deceleration
    }else{
        this.movementSpeed = this.minSpeed  
    }

}

其中this.minSpeed = 0,而this.movementSpeed用于移动相机,如下所示:

var actualSpeed = delta * this.movementSpeed;
this.object.translateZ( -actualSpeed * forwardOrAuto );
this.object.translateX( actualSpeed * sideSpeed );
this.object.translateY( actualSpeed * upSpeed );

然而,即使相机没有移动(最多8位小数),场景仍然剧烈震动

有什么理由让我无法想到会让场景这样做吗?

如果有任何我可以/应该提供的信息,请告诉我,并提前感谢您的时间。

1 个答案:

答案 0 :(得分:1)

我建议您使用 near far 的值,这些值不是很小吗? (特别是附近)

Near 在内部被用作分隔符,所以如果你使用的是一个小数字(&lt; 1),你可能会失去精确度并以那些剧烈的动作结束,就像你的价值范围一样。重新移动的方式比使用较大的近和远值时要小。

这就是为什么你会发现附近的默认值是0.1: https://github.com/mrdoob/three.js/blob/r55/src/cameras/PerspectiveCamera.js#L13

...虽然我个人总是在附近使用1。

此外,在视觉方面寻求帮助时,在线示例总是很好: - )