A3D的材质贴图很简单。几行代码就可以搞定。源码如下:
主程序
- package cn.com.xy50 {
-
- /*
- * A3D 贴图演示源码
- * @author Johndai80o
- * @datas 06/07/08
- */
-
- import alternativa.engine3d.controllers.CameraController;
- import alternativa.engine3d.core.Camera3D;
- import alternativa.engine3d.core.Object3D;
- import alternativa.engine3d.core.Scene3D;
- import alternativa.engine3d.display.View;
- import alternativa.utils.FPS;
- import alternativa.engine3d.primitives.*;
- import alternativa.engine3d.materials.TextureMaterial; // 纹理材质类
- import alternativa.types.Texture; // 贴图需要使用的材质原型
-
- import flash.display.Sprite;
- import flash.display.StageAlign;
- import flash.display.StageScaleMode;
- import flash.events.Event;
- import flash.events.ProgressEvent;
- import flash.display.Loader;
- import flash.net.URLRequest;
- import flash.display.Bitmap;
- import flash.display.BitmapData;
- import flash.text.TextField;
- import flash.text.TextFormat;
-
- import org.aswing.AsWingManager;
-
- [SWF(backgroundColor="#000000", frameRate="100")]
-
- public class Test4 extends Sprite {
-
- private var scene:Scene3D;
- private var view:View;
- private var camera:Camera3D;
- private var cameraController:CameraController;
-
- //private var loader:Loader;
- private var bitmapData:BitmapData;
- private var photoNumber:int=15;
- private var textureList:Array=new Array();
- private var label:TextField;
- private var _Progressbar:progressPanel;
-
- public function Test4() {
- AsWingManager.initAsStandard(this);
- stage.scaleMode = StageScaleMode.NO_SCALE;
- stage.align = StageAlign.TOP_LEFT;
-
- label = new TextField();
-
- var format:TextFormat = new TextFormat();
- format.font = "Verdana";
- format.color = 0xFFFFFF;
- format.size = 18;
- format.underline = true;
- label.defaultTextFormat = format;
- addChild(label);
-
- addEventListener(Event.ADDED_TO_STAGE, loadPhoto);
- _Progressbar=progressPanel.getInstance();
- _Progressbar.showBar(true);
- }
-
- private function loadPhoto(e:Event):void
- {
- label.text=(15-photoNumber+1)+"/15";
- var loader:Loader = new Loader();
- loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
- loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
- var request:URLRequest = new URLRequest("photos/"+photoNumber+".jpg");
- loader.load(request);
- }
-
- private function completeHandler(e:Event):void
- {
- if (photoNumber>0){
- var loader:Loader = Loader(e.target.loader);
- var image:Bitmap = Bitmap(loader.content);
-
- bitmapData = image.bitmapData;
- textureList.push(new Texture(bitmapData)); // 存入贴图材质进 Array
- loadPhoto(new Event(Event.ADDED_TO_STAGE));
- photoNumber--;
- }else{
- removeChild(label);
- _Progressbar.hideBar();
- init();
- }
- }
-
- private function progressHandler(e:ProgressEvent):void
- {
- _Progressbar._Progressbar.setValue(int(e.bytesLoaded/e.bytesTotal*100));
- }
-
- private function init():void {
-
- removeEventListener(Event.ADDED_TO_STAGE, loadPhoto);
-
- // Create scene
- scene = new Scene3D();
- scene.root = new Object3D();
-
- for(var i:int=0;i<=15;i++){
- var _plane:Plane=new Plane(400,300,1,1); // 建立一个面片
- _plane.setMaterialToAllSurfaces(new TextureMaterial(textureList[i],1,false,false)); // 进行贴图设置 -- 参数:材质,贴图透明度,是否重复贴图,贴图平滑度
- _plane.x=Math.random()*4000-1000;
- _plane.z=Math.random()*4000;
- scene.root.addChild(_plane);
- }
-
- // Add camera and view
- camera = new Camera3D();
- camera.x = 0;
- camera.y = 0;
- camera.z = 0;
- scene.root.addChild(camera);
-
- view = new View();
- addChild(view);
- view.camera = camera;
-
- // Add camera controller
- cameraController = new CameraController(stage);
- cameraController.camera = camera;
- cameraController.setDefaultBindings();
- cameraController.speed = 1000;
- cameraController.controlsEnabled = true;
-
- // FPS counter init
- FPS.init(stage);
-
- stage.addEventListener(Event.RESIZE, onResize);
- stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
- onResize(null);
- }
-
- private function onResize(e:Event):void {
- view.width = stage.stageWidth;
- view.height = stage.stageHeight;
- }
-
- private function onEnterFrame(e:Event):void {
- cameraController.processInput();
- scene.calculate();
- }
- }
- }
------------------------------- 端午节的分割线 ---------------------------------
Bar:
- package cn.com.xy50 {
-
- import org.aswing.*;
- import org.aswing.geom.*;
- import flash.events.Event;
-
- /**
- * @author djwolf
- */
- public class progressPanel extends JWindow {
- private var stageWidth:int=550;
- private var stageHeight:int=400;
- private const bgWidth:int=200;
- private const bgHeight:int=12;
- private var progressPoint:int;
- private static var _instance:progressPanel;
- public var _Progressbar:JProgressBar;
-
-
- public function progressPanel() {
- var _Container:Container=this.getContentPane();
- _Progressbar = new JProgressBar();
- _Progressbar.setSizeWH(bgWidth,bgHeight);
- _Progressbar.setLocation(new IntPoint(0,0));
- _Progressbar.setValue(0);
- _Progressbar.setMinimum(0);
- _Progressbar.setMaximum(100);
-
- var _fl:EmptyLayout=new EmptyLayout();
- var _jp:JPanel=new JPanel(_fl); // create panel
- _Container.append(_jp);
- _jp.append(_Progressbar);
- this.setSizeWH(bgWidth, bgHeight);
- this.setLocationXY(stageWidth/2-bgWidth/2,stageHeight/2-bgHeight/2-40);
- // _Progressbar.setIndeterminate(true);
- }
- private function efHandler(evt:Event):void
- {
- progressPoint++;
- if (progressPoint==100)
- {
- progressPoint=0;
- }
- _Progressbar.setValue(progressPoint);
- }
- public static function getInstance():progressPanel
- {
- if (_instance == null)
- {
- _instance=new progressPanel();
- }
- return _instance;
- }
- public function showBar(haveValue:Boolean):void
- {
- if (!haveValue)
- {
- progressPoint=0;
- _Progressbar.setValue(progressPoint);
- _Progressbar.addEventListener(Event.ENTER_FRAME, efHandler);
- }
- this.show();
- }
- public function hideBar():void
- {
- progressPoint=0;;
- _Progressbar.removeEventListener(Event.ENTER_FRAME, efHandler);
- this.hide();
- }
- }
- }
-------------------------- : ) ------------------------------
测试地址:
http://www.xy50.com.cn/myblog/swfs/test4.swf