Away3d之SkyBox

来源:互联网 发布:淘宝双十一大红包 编辑:程序博客网 时间:2024/05/16 10:31

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总是尽可能大而不被省略。






package {import flash.display.Sprite;import away3d.containers.View3D;import away3d.entities.Mesh;import away3d.primitives.SkyBox;import com.crawlingtosea.debug.Config;import flash.geom.Vector3D;import away3d.cameras.lenses.PerspectiveLens;import away3d.textures.BitmapCubeTexture;import away3d.utils.Cast;import away3d.materials.ColorMaterial;import away3d.materials.methods.EnvMapMethod;import away3d.primitives.TorusGeometry;import flash.events.Event;public class Main extends Sprite{[Embed(source = "skybox/snow_positive_x.jpg")]private var EnvPosX:Class;[Embed(source = "skybox/snow_positive_y.jpg")]private var EnvPosY:Class;[Embed(source = "skybox/snow_positive_z.jpg")]private var EnvPosZ:Class;[Embed(source = "skybox/snow_negative_x.jpg")]private var EnvNegX:Class;[Embed(source = "skybox/snow_negative_y.jpg")]private var EnvNegY:Class;[Embed(source = "skybox/snow_negative_z.jpg")]private var EnvNegZ:Class;private var _view:View3D;private var _torus:Mesh;private var _skybox:SkyBox;public function Main(){// constructor codeConfig.RegisterAndInitStage(this,stage);_view=new View3D();addChild(_view);_view.camera.z = -600;_view.camera.y = 0;_view.camera.lookAt(new Vector3D());_view.camera.lens = new PerspectiveLens(90);                          //正x,负x,正y,负y,正z,负zvar cubeTexture:BitmapCubeTexture=new BitmapCubeTexture(Cast.bitmapData(EnvPosX),Cast.bitmapData(EnvNegX), Cast.bitmapData(EnvPosY),Cast.bitmapData(EnvNegY), Cast.bitmapData(EnvPosZ),Cast.bitmapData(EnvNegZ));  var material:ColorMaterial=new ColorMaterial(); material.addMethod(new EnvMapMethod(cubeTexture,1));  _torus=new Mesh(new TorusGeometry(150,60,40,20),material); _view.scene.addChild(_torus);  _skybox=new SkyBox(cubeTexture); _view.scene.addChild(_skybox);  this.addEventListener(Event.ENTER_FRAME,_onEnterFrame); stage.addEventListener(Event.RESIZE,onResize); onResize();}private function _onEnterFrame(e:Event):void{_torus.rotationX+=2;_torus.rotationY+=2;_view.camera.position=new Vector3D();_view.camera.rotationY+=.5*(stage.mouseX-stage.stageWidth/2)/800;_view.camera.moveBackward(600);_view.render();}private function onResize(e:Event=null):void{_view.width=stage.stageWidth;_view.height=stage.stageHeight;}}}