Advertisement
Guest User

Untitled

a guest
Dec 29th, 2015
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     package {
  2.  
  3.         import com.adobe.utils.AGALMiniAssembler;
  4.         import com.adobe.utils.PerspectiveMatrix3D;
  5.  
  6.         import flash.display.Bitmap;
  7.         import flash.display.BitmapData;
  8.  
  9.         import flash.display.Stage;
  10.         import flash.display3D.Context3D;
  11.         import flash.display3D.Context3DBlendFactor;
  12.         import flash.display3D.Context3DProgramType;
  13.         import flash.display3D.Context3DTextureFormat;
  14.         import flash.display3D.Context3DVertexBufferFormat;
  15.         import flash.display3D.IndexBuffer3D;
  16.         import flash.display3D.Program3D;
  17.         import flash.display3D.VertexBuffer3D;
  18.         import flash.events.Event;
  19.         import flash.geom.Matrix3D;
  20.         import flash.geom.Vector3D;
  21.  
  22.         public class S3dView
  23.         {
  24.             [Embed(source="texture1.png")]
  25.             private var Texture1Class:Class;
  26.             [Embed(source="texture2.png")]
  27.             private var Texture2Class:Class;
  28.             [Embed(source="screen2.png")]
  29.             private var ScreenClass:Class;
  30.  
  31.             private var stage:Stage;
  32.             private var _width:Number;
  33.             private var _height:Number;
  34.             //
  35.             private var context3D:Context3D;
  36.             public function S3dView(stage:Stage)
  37.             {
  38.                 super();
  39.                 //
  40.                 this.stage = stage;
  41.                 //
  42.                 _width = stage.stageWidth;
  43.                 _height = stage.stageHeight;
  44.                 //
  45.                 stage.stage3Ds[0].addEventListener(Event.CONTEXT3D_CREATE, createContextHandler);
  46.                 stage.stage3Ds[0].requestContext3D();
  47.             }
  48.  
  49.             private var vertexBuffer:VertexBuffer3D;
  50.             private var indexBuffer:IndexBuffer3D;
  51.             private var vertexShader:AGALMiniAssembler;
  52.             private var fragmentShader:AGALMiniAssembler;
  53.             private var program:Program3D;
  54.             private function createContextHandler(event:Event):void
  55.             {
  56.                 context3D = stage.stage3Ds[0].context3D;
  57.                 context3D.configureBackBuffer(stage.stageWidth, stage.stageHeight, 2, true);
  58.                 context3D.setBlendFactors(Context3DBlendFactor.ONE, Context3DBlendFactor.ONE_MINUS_SOURCE_ALPHA);
  59.                 //
  60.                 initTexture();
  61.                 //
  62.                 context3D.setVertexBufferAt(0, vertexBuffer, 0, Context3DVertexBufferFormat.FLOAT_3);
  63.                 context3D.setVertexBufferAt(1, vertexBuffer, 3, Context3DVertexBufferFormat.FLOAT_2);
  64.                 //
  65.                 program = context3D.createProgram();
  66.                 program.upload(vertexShader.agalcode, fragmentShader.agalcode);
  67.                 //
  68.                 context3D.setProgram(program);
  69.                 //
  70.                 projection = new PerspectiveMatrix3D();
  71.                 var fov:Number = 45;
  72.                 var zNear:int = 1;
  73.                 var zFar:int = 500;
  74.                 projection.perspectiveFieldOfViewRH(fov, stage.stageWidth/stage.stageHeight, zNear, zFar);
  75.                 model = new Matrix3D();
  76.                 model.appendTranslation(-0.5, -0.5, 0);
  77.                 view = new Matrix3D();
  78.                 view.appendTranslation(0, 0, -2);
  79.                 finalTransform = new Matrix3D();
  80.                 //
  81.                 stage.addEventListener(Event.ENTER_FRAME, onRender);
  82.             }
  83.  
  84.             private function initTexture():void
  85.             {
  86.                 var vertices:Vector.<Number> = Vector.<Number>([
  87.                     0, 0, 0, 0, 0, // x, y, z, u, v
  88.                     1, 0, 0, 2, 0,
  89.                     1, 1, 0, 2, 2,
  90.                     0, 1, 0, 0, 2
  91.                 ]);
  92.                 vertexBuffer = context3D.createVertexBuffer(4, 5);
  93.                 vertexBuffer.uploadFromVector(vertices, 0, 4);
  94.                 //
  95.                 var indices:Vector.<uint> = Vector.<uint>([0, 1, 2, 0, 2, 3]);
  96.                 indexBuffer = context3D.createIndexBuffer(indices.length);
  97.                 indexBuffer.uploadFromVector(indices, 0, indices.length);
  98.                 //
  99.                 var bitmapData:BitmapData = (new Texture1Class() as Bitmap).bitmapData;
  100.                 var texture:* = context3D.createTexture(bitmapData.width, bitmapData.height, Context3DTextureFormat.BGRA, false);
  101.                 texture.uploadFromBitmapData(bitmapData);
  102.                 context3D.setTextureAt(0, texture);
  103.                 //
  104.                 vertexShader = new AGALMiniAssembler();
  105.                 vertexShader.assemble(Context3DProgramType.VERTEX,
  106.                         "m44 op va0, vc0\n"+
  107.                         "mov v0, va1"
  108.                 );
  109.                 fragmentShader = new AGALMiniAssembler();
  110.                 fragmentShader.assemble(Context3DProgramType.FRAGMENT,
  111.                         "tex ft1, v0, fs0 <2d, repeat, linear>\n"+
  112.                         "mov oc, ft1"
  113.                 );
  114.             }
  115.  
  116.             private var model:Matrix3D;
  117.             private var view:Matrix3D;
  118.             private var projection:PerspectiveMatrix3D;
  119.             private var finalTransform:Matrix3D;
  120.  
  121.             private function onRender(event:Event):void
  122.             {
  123.                 if (!context3D) return;
  124.                 //
  125.                 model.appendRotation(2, Vector3D.Y_AXIS);
  126.                 //
  127.                 finalTransform.identity();
  128.                 finalTransform.append(model);
  129.                 finalTransform.append(view);
  130.                 finalTransform.append(projection);
  131.                 //
  132.                 context3D.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX, 0, finalTransform, true);
  133.                 //
  134.                 context3D.clear(1, 1, 1, 1);
  135.                 context3D.drawTriangles(indexBuffer);
  136.                 context3D.present();
  137.             }
  138.         }
  139.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement