tommy

It's hard to tell the world we live in is either a reality or a dream
posts - 52, comments - 17, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理
package
{
    import away3d.containers.
*;
    import away3d.core.
base.*;
    import away3d.core.math.
*;
    import away3d.core.utils.Cast;
    import away3d.events.
*;
    import away3d.materials.
*;
    import away3d.primitives.
*;
    import away3d.core.render.Renderer;
    
    import com.bit101.components.
*;
    
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    
    [SWF(width
="500", height="400", frameRate="30", backgroundColor="#FFFFFF")]
    
public class Textures extends Sprite
    {
        
// "global" vars
        private var plane:Plane;
        
private var planeBorder:Plane;
        
private var planeComplexity:Number = 1;
        
private var my_material:IMaterial;
        
private var cover:Cover;
        
private var View:View3D;
        
private var panel:Panel;
        
private var toggle:Boolean = false;
        
        
// Embed texture for use in Flex
        [Embed(source="resources/chess.jpg")]
        
private var chessBitmap:Class;
        
private var chessTexture:BitmapData;
        
        
public function Textures()
        {
            super();
            
// create a 3D-viewport
            View = new View3D({x:250, y:200});
            View.renderer 
= Renderer.CORRECT_Z_ORDER;
            
            
// add viewport to the stage
            addChild(View);
            
            
// Store texture and create plane
            var bitmap:Bitmap = new chessBitmap() as Bitmap;
            chessTexture 
= bitmap.bitmapData;
            my_material 
= new BitmapMaterial(Cast.bitmap(chessTexture));
            makePlane();
            
            
// position camera
            View.camera.position = new Number3D(400500400);
            View.camera.lookAt( 
new Number3D(000) );
            
            
// add some controls
            addControls();
            
            
// Update the view and display the "cover"
            View.render();
            cover 
= new Cover(this);
            addChild(cover);
            
            
// Turn on rotation
            addEventListener(Event.ENTER_FRAME, onEnterFrame);
        }
        
// functions used
        private function onEnterFrame(e:Event):void
        {
            update();
        }
        
        
private function update(e:MouseEvent = null):void
        {
            
if(!cover.visible)
            {
                
// rerender viewport
                View.render();
                plane.rotationY 
= planeBorder.rotationY += 1;
            }
        }
        
        
private function makePlane():void
        {
            var rot:Number;
            
if(plane){
                rot 
= plane.rotationY;
                destroy();
            }
            
            
// Add new plane
            plane = new Plane({material:my_material,width:250,height:250,x:0,y:30,segmentsH:planeComplexity, segmentsW:planeComplexity});
            planeBorder 
= new Plane({material:"grey",width:265,height:265,x:0,y:28,segmentsH:1, segmentsW:1});
            
            
// add plane to the scene
            View.scene.addChild(planeBorder);
            View.scene.addChild(plane);
            
if(rot){
                plane.rotationY 
= planeBorder.rotationY = rot;
            }
        }
        
        
private function addControls():void
        {
            var pad:Number 
= 10;
            var label1:Label 
= new Label(this, pad, pad);
            label1.autoSize 
= false;
            label1.width 
= 180 -(pad*2);
            label1.text 
= "Increase/decrease complexity";
            var plusButt:PushButton 
= new PushButton(this, pad, label1.height+label1.y, "+", increaseComplexity);
            plusButt.width 
= plusButt.height = 20;
            var minButt:PushButton 
= new PushButton(this50, label1.height+label1.y, "-", decreaseComplexity);
            minButt.width 
= minButt.height = 20;
            var toggleButt:PushButton 
= new PushButton(this, pad, plusButt.height+plusButt.y+pad, "Toggle texture", wiresTextureToggle);
            toggleButt.height 
= 20;
        }
        
        
private function decreaseComplexity(e:MouseEvent):void
        {
            planeComplexity 
> 0 ? planeComplexity -= 1 : planeComplexity = 1;
            makePlane();
        }
        
        
private function increaseComplexity(e:MouseEvent):void
        {
            planeComplexity 
+= 1;
            makePlane();
        }
        
        
private function wiresTextureToggle(e:MouseEvent):void
        {
            trace(
"wiresTextureToggle"+toggle);
            
if(!toggle){
                my_material 
= new WireColorMaterial({color:"blue", lighting:true});
                toggle 
= true;
            } 
else {
                my_material 
= new BitmapMaterial(Cast.bitmap(chessTexture));
                toggle 
= false;
            }
            makePlane();
        }
        
        
private function destroy():void
        {
            
if(plane){
                plane.material 
= null;
                View.scene.removeChild(plane);
                View.scene.removeChild(planeBorder);
                plane 
= null;
                planeBorder 
= null;
            }
        }
    }
}

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理