PV3D里的光源似乎只有点光源,PointLight3D,而且不能直接作用于物体,必须通过接受光源的材质来传递。
点光源的创建一条代码就够,引用路径org.papervision3d.lights.PointLight3D:
var lt:PointLight3D = new PointLight3D(true);
参数true是说明光源可见。
随后是创建一种接受光照的材质,PV3D里有这些材质可选:PhongMaterial,CellMaterial,GouraudMaterial
三种材质的创建参数都一样,第一个是光源对象,第二是光源颜色,第三个是氛围颜色,第四个是反光级别,典型代码如下:
var m:GouraudMaterial = new GouraudMaterial(lt,0xFFFFFF,0x000000,1);
如果要使用贴图,也要光照,PV3D就不如Away3D灵活了,PV3D里必须创建一个着色器材质对象,同时包含贴图材质和光照材质,然后赋给模型,这样才能显示出来。三种光照材质都有对应的着色器材质:PhongShader,CellShader,GouraudShader,创建着色器材质的代码也相同。然后用ShaderMaterial对象混合两种材质即可。比如创建一个贴图材质和一个PhongMaterial,代码如下;
var mf:BitmapFileMaterial = new BitmapFileMaterial("test.jpg"); var ms:PhongShader = new PhongShader(lt); var m:ShadedMaterial = new ShadedMaterial(mf, ms);
需要说明的是,三个光照材质赋给立方体似乎有Bug,就是立方体的背光面边缘也莫名其妙地发光了,只有球体的光照效果最好。
还需要说明的是,上次的DAE模型导入方法还是不全对,Sketchup里把模型建的复杂一点,导入PV3D依然无法显示。