away3d 4.0学习(6) SkyBox
/**
* A SkyBox class is used to render a sky in the scene. It's always considered static and 'at infinity', and as
* such it's always centered at the camera's position and sized to exactly fit within the camera's frustum, ensuring
* the sky box is always as large as possible without being clipped.
*/Skybox类用来渲染场景的天空。他永远被认为是静态的与“无限的”,得益于此,它永远是以相机的位置和尺寸为中心的圆台,保证了天空盒永远大得你无法触摸。
以上这是Skybox类的说明信息,翻译得差,贱笑了。
可以从SkyBox的定义看出来,Skybox主要用来渲染天空的。
SkyBox(cubeMap:CubeTextureBase)Create a new SkyBox object.
以上是Skybox的构造器,里面需要传入一个CubeTextureBase类型的纹理,CubeTextureBase,顾名思义,基本方体纹理,天空盒是个四四方方的东西,所以需要这么特殊的一个纹理,不知道这个纹理是否可以传到Mesh创建直接创建一个方形盒子呢。
Package away3d.textures Class public class CubeTextureBase Inheritance CubeTextureBase TextureProxyBase
NamedAssetBase
flash.events.EventDispatcher
Subclasses BitmapCubeTexture, RenderCubeTexture
以上是这个纹理的继承树,他包含了两个实现类,在这里我们使用的是BitmapCubeTexture,问我为啥要用这个?因为我看到后面那个名字的时候,感觉他就挺复杂的,所以用比较熟悉的名字,当然,后续还是会检查一下他们之间的区别的。
public function BitmapCubeTexture(posX : BitmapData, negX : BitmapData, posY : BitmapData, negY : BitmapData, posZ : BitmapData, negZ : BitmapData)
以上是BitmapCubeTexture的构造器,里面需要传入6个BitmapData作为盒子6个面的纹理之用,pos代表正,nag代表负,这个是参考(0,0,0)的.
额,都跑了,我也下班找老婆去。
代码附上:
package samples { import assets.Resource; import away3d.controllers.FirstPersonController; import away3d.primitives.SkyBox; import away3d.textures.BitmapCubeTexture; import flash.display3D.textures.CubeTexture; import flash.geom.Vector3D; import template.AwayTemplate; [SWF(width=1000,height=600,frameRate=30)] public class SkyboxTest extends AwayTemplate { private var skyBox:SkyBox; private var cubeTexture:BitmapCubeTexture public function SkyboxTest() { super(); } override protected function initView():void { super.initView(); cubeTexture = new BitmapCubeTexture( new Resource.SKY_RIGHT().bitmapData, new Resource.SKY_LEFT().bitmapData, new Resource.SKY_TOP().bitmapData, new Resource.SKY_BOTTOM().bitmapData, new Resource.SKY_FRONT().bitmapData, new Resource.SKY_BACK().bitmapData); skyBox = new SkyBox(cubeTexture); _view.scene.addChild(skyBox); } override protected function render():void { _view.camera.yaw(1); _view.camera.roll(1); _view.camera.pitch(1); super.render(); } } }
效果图附上: