zoukankan      html  css  js  c++  java
  • 一个简单的Context3D的Demo

     1 package
     2 {
     3 import com.adobe.utils.AGALMiniAssembler;
     4 
     5 import flash.display.Sprite;
     6 import flash.display3D.Context3D;
     7 import flash.display3D.Context3DProgramType;
     8 import flash.display3D.Context3DVertexBufferFormat;
     9 import flash.display3D.IndexBuffer3D;
    10 import flash.display3D.Program3D;
    11 import flash.display3D.VertexBuffer3D;
    12 import flash.events.Event;
    13 import flash.geom.Matrix3D;
    14 import flash.geom.Vector3D;
    15 import flash.utils.getTimer;
    16 
    17 public class HelloTriangleColored extends Sprite
    18 {
    19 protected var context3D:Context3D;
    20 protected var program:Program3D;
    21 protected var vertexbuffer:VertexBuffer3D;
    22 protected var indexbuffer:IndexBuffer3D;
    23 
    24 public function HelloTriangleColored()
    25 {
    26 stage.stage3Ds[0].addEventListener( Event.CONTEXT3D_CREATE, initMolehill );
    27 stage.stage3Ds[0].requestContext3D();
    28 
    29 addEventListener(Event.ENTER_FRAME, onRender);
    30 }
    31 
    32 protected function initMolehill(e:Event):void
    33 {
    34 context3D = stage.stage3Ds[0].context3D;
    35 context3D.configureBackBuffer(800, 600, 1, true);//!!!!!!!!!挺重要的
    36 
    37 var vertices:Vector.<Number> = Vector.<Number>([
    38 -0.3,-0.3,0, 1, 0, 0, // x, y, z, r, g, b
    39 -0.3, 0.3, 0, 0, 1, 0,
    40 0.3, 0.3, 0, 0, 0, 1]);
    41 
    42 // Create VertexBuffer3D. 3 vertices, of 6 Numbers each
    43 vertexbuffer = context3D.createVertexBuffer(3, 6);
    44 // Upload VertexBuffer3D to GPU. Offset 0, 3 vertices
    45 vertexbuffer.uploadFromVector(vertices, 0, 3);
    46 
    47 var indices:Vector.<uint> = Vector.<uint>([0, 1, 2]);
    48 
    49 // Create IndexBuffer3D. Total of 3 indices. 1 triangle of 3 vertices
    50 indexbuffer = context3D.createIndexBuffer(3);
    51 // Upload IndexBuffer3D to GPU. Offset 0, count 3
    52 indexbuffer.uploadFromVector (indices, 0, 3);
    53 
    54 var vertexShaderAssembler : AGALMiniAssembler = new AGALMiniAssembler();
    55 vertexShaderAssembler.assemble( Context3DProgramType.VERTEX,
    56 "m44 op, va0, vc0
    " + // pos to clipspace
    57 "mov v0, va1" // copy color
    58 );
    59 
    60 var fragmentShaderAssembler : AGALMiniAssembler= new AGALMiniAssembler();
    61 fragmentShaderAssembler.assemble( Context3DProgramType.FRAGMENT,
    62 
    63 "mov oc, v0"
    64 );
    65 
    66 program = context3D.createProgram();
    67 program.upload( vertexShaderAssembler.agalcode, fragmentShaderAssembler.agalcode);
    68 }
    69 
    70 protected function onRender(e:Event):void
    71 {
    72 if ( !context3D )
    73 return;
    74 
    75 context3D.clear ( 1, 1, 1, 1 );
    76 
    77 // vertex position to attribute register 0
    78 context3D.setVertexBufferAt (0, vertexbuffer, 0, Context3DVertexBufferFormat.FLOAT_3);
    79 // color to attribute register 1
    80 context3D.setVertexBufferAt(1, vertexbuffer, 3, Context3DVertexBufferFormat.FLOAT_3);
    81 // assign shader program
    82 context3D.setProgram(program);
    83 
    84 var m:Matrix3D = new Matrix3D();
    85 m.appendRotation(getTimer()/40, Vector3D.Z_AXIS);
    86 context3D.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX, 0, m, true);
    87 
    88 context3D.drawTriangles(indexbuffer);
    89 
    90 context3D.present();
    91 }
    92 }
    93 }
    94   
  • 相关阅读:
    动态传参
    函数的介绍
    文件的操作
    send email with formatted table
    minimize and close window with customed winform
    python algorithm
    something important about docker
    book list
    which language is suitable for what to do
    Find Duplicate Items in list fast
  • 原文地址:https://www.cnblogs.com/Star9527/p/6809849.html
Copyright © 2011-2022 走看看