javascript - Three.js 场景剧烈抖动

标签 javascript graphics three.js webgl

我目前正在从事一个项目,该项目涉及使用 three.js 处理非常大和非常小的距离

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

起初我认为这是 Z-Buffer 的问题,所以我编写了一个小片段,每次进入新区域时都会更改相机的 near 和 far 属性。这有助于解决我之前遇到的“闪烁”问题,但是场景仍然在小距离内剧烈移动。

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

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位),场景仍然在剧烈晃动

有什么我想不到的原因会让场景这样做吗?

如果我可以/应该提供更多信息,请告诉我,提前感谢您抽出时间。

最佳答案

我可以建议您使用不是那么小的 nearfar 值吗? (专门针对near)

Near 在内部用作分隔符,因此如果您使用较小的数字 (<1),您可能会失去精度并以那些剧烈的运动结束,因为您的值范围与使用较大的 near 和 far 值相比,四处移动要小得多。

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

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

此外,在视觉问题上寻求帮助时,在线示例总是好的 :-)

关于javascript - Three.js 场景剧烈抖动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14839859/

相关文章:

javascript - 通过单击按钮在另一个网页上播放声音

c# - 将文本编码为 JavaScript 函数

java - 如何获取图形对象的默认alpha规则?

javascript - 如何在 MeshPhongMaterial 上动态设置纹理?

javascript - 指令内的 Angular 调用 Controller 函数

javascript - 尝试在我的 html 文档中播放声音。按一个按钮

javascript - 将顶点法线转换为面法线

graphics - 如何按百分比计算渐变颜色

javascript - 根据给定的相机旋转和位置计算轨道控制的相机目标

geometry - Three.js 在 render() 上未缩放或旋转网格