【发布时间】:2013-01-28 04:34:49
【问题描述】:
我目前正在从事一个项目,该项目涉及使用 three.js 处理非常大和非常小的距离
我在场景较小的一侧遇到了问题,“场景”将开始剧烈晃动。
一开始我以为是Z-Buffer的问题,所以我写了一个小sn-p,每次进入一个新区域时都会改变相机的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 位小数),场景仍然剧烈晃动
有什么我想不出的理由会让一个场景这样做吗?
如果我可以/应该提供更多信息,请告诉我,并提前感谢您的时间。
【问题讨论】:
-
我的猜测是舍入错误,因为您在“关闭”场景中使用的有效数字太少了......
-
对于相机,即使是10^-8也不够准确?
-
另外,有没有办法添加更多的有效数字?
-
我试过设置 this.movementSpeed = 0.000000000000000000000000 ,即使这样也不行。
标签: javascript graphics three.js webgl