Three.js Fog,最大不透明度

时间:2019-02-06 16:28:33

标签: javascript three.js

我正在尝试什么:

我正在构建一个包含地形的轻量级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%蓝色。

我的问题:

是否可以对雾应用最大不透明度?

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

1 个答案:

答案 0 :(得分:2)

无法对雾应用最大不透明度,但是您可以随时更改雾的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