仿照微软模拟飞行2004,利用Billboard实现的云。这里是一小段俺们的飞机在空中的视频。
利用gmax建模,然后写个插件将其导出为xml格式,再将其读入到程序中。
利用gmax建立billborad集而不是3ds max,是因为微软FS2004提供了gmax的工具。
微软这个工具导出的格式只能用在FS2004中,要想在自己的程序中利用这个Billboard集,需要自己写插件程序导出;另一种折中办法是将其导出为通用的obj文件,但后一种方法的缺陷是导出信息很少(只包括顶点信息、索引信息、UV坐标信息),无法为你专门导出Billboard的位置、大小、Shader属性信息。
为了防止穿云过程中跨过一个Billboard时产生的云块突变现象,在Billborad的顶点程序中根据顶点离视点的远近来调整透明alpha值,使得穿出云层时Billboard慢慢消失。
这个实现比起FS2004还差一些,还需要加入云彩24小时随太阳光照颜色的变化和云顶部底部光线的差异;另外目前的云只在16km*16km范围内,下一步还要利用Impostor将远处的云实时渲染到纹理中,来扩展云彩的范围。
Ps: 感谢宋给我提供了Virtools中的Shader程序作为参考。