• 一个简单的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   
  • 相关阅读:
    【好用的工具】gif录屏工具
    【图文教程】WebStorm下使用Github下载以及上传代码
    【交互】几款优秀的H5输入框交互方案
    【CSS】before和:after实例——CSS3画桃心
    List字符串和数字用Collections.sort排序
    MySQL之CONCAT,CONCAT_WS,GROUP_CONCAT
    连接非本地MySQL数据库,报1130错误的解决方法
    好用的网站整理
    linux基础
    字符编码
  • 原文地址:https://www.cnblogs.com/Star9527/p/6809849.html
Copyright © 2020-2023  润新知