我正在尝试:

我正在构建一个包含地形的轻量级GIS应用程序。我想补充的一件事是大气霾。

我当前的代码:

(请原谅我的代码,我有多个场景)

  fogColor = new THREE.Color(0x7EC0EE);
  this.scenes[name].background = fogColor;
  this.scenes[name].fog = new THREE.Fog(fogColor, 250, 2000);
  //alternatively:
  this.scenes[name].fog = new THREE.FogExp2( fogColor, .001 )


遇到的问题:

当我靠近地面时,Fog和FogExp2都适合我应用中的比例单位。但是,将相机移到更高的位置并向下看时,由于雾气设置,大地最终变成了100%蓝色。

我的问题:

有没有办法对雾应用最大不透明度?

我希望地形在远处保持朦胧,但不要完全被雾遮盖住。我本以为可以计算出视野最远的对象,并在每次相机更改时调整雾度设置,但是我不确定如何或是否考虑得太多。我想根据相机和物体之间的“空气”量来计算雾度,并且永远不要超过一定的雾度。在着色器中这样做更好吗?

最佳答案

无法将最大不透明度应用于雾,但是可以随时更改雾的near and far parameters。例如:

var origin = new THREE.Vector3(0, 0, 0);

update() {
    var dist = camera.position.distanceTo(origin);
    fog.far = 2000 + dist;
}


我不确定您要处理哪种单位,因此您可能需要使用计算dist的方式。使用这种方法,您距0, 0, 0越远,雾就越远。

使用FogExp2,您可以尝试修改.density property

08-08 03:27