2014-09-03 112 views
3

想象一下,您有一个非常大的THREE.PlaneGeometry模拟地板的场景,并且您有一个相机随机添加到场景中。Three.js可以将雾应用于区域而不是距离相机的距离?

如果我手动调整雾的近远值,我可以以某种方式隐藏飞机的外部,使无限的印象。 到目前为止,这么好。

问题是,如果我让我的相机在现场飞到飞机内的任意位置怎么办?如果随机点足够接近飞机外部,则雾不会掩盖飞机的末端,因为雾始终基于相机位置。

所以我的问题是,只有当你接近飞机的极限时,我们如何才能达到雾效果?

+0

这里是一个[的jsfiddle](http://jsfiddle.net/andrevenancio/t3mtb8wv/)来说明我的主意。 – andrevenancio 2014-09-03 11:13:59

+0

用相机移动飞机怎么样,所以相机总是在飞机的中心? – WestLangley 2014-09-03 15:02:00

+0

如果我这样做,虽然相机和飞机正在移动,这是因为没有发生正确的事情?它的目的是使它看起来像你在地形上飞行,但如果你超出界限,你只需进入一个“雾”区。我想要创建一个PointCloud粒子系统,在离场景越远的地方,粒子系统的密度越高......但是这对GPU来说太多了吧? – andrevenancio 2014-09-03 15:57:37

回答

2

我对雾系统的工作原理没有足够的深入了解,所以如果有人能纠正我,那将是惊人的。

我猜雾只在相机上渲染,你不能将它应用到,比方说,一个对象,或者既不可以创建一个雾对象(例如由雾制成的立方体),除非你使用可以使对象看起来的着色器像“雾”,但是如果你进入的对象,你就无法看到了雾(或它不会呈现如预期)

什么,但是你可以做的是动态的雾渲染基于改变您的相机位置,远离中心的距离越远,雾气越接近相机。通过做一个简单的减法(距离平面中心的X距离),X等于相机可以达到的最大距离,这很容易实现。

如果将平面的中心定位在0,0处,则会自动获取相机所在的X和Y坐标,因此距离XY平面中心的距离也很容易。然后你可以计算相对于X轴和Y轴的斜边(参见下面我的gif)。

Hypotenuse on XY