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