Flash3D学习计划(三)——学习VB,IB相关,理解三角形顶点顺序;在屏幕上显示2D矩形,并实现缩放,平移,旋转...
VB:顶点缓冲
IB: 顶点索引缓冲
三角形的顶点顺序决定了三角形是顺时针还是逆时针,从而决定了三角形在背面剔除的过程中是否会被剔除掉。
相关理论知识可以在前面的文章中找到更多的说明。
实现效果
sfw下载
主要代码
1 package 2 { 3 import com.adobe.utils.AGALMiniAssembler; 4 import com.adobe.utils.PerspectiveMatrix3D; 5 6 import flash.display.Sprite; 7 import flash.display.Stage3D; 8 import flash.display3D.Context3D; 9 import flash.display3D.Context3DProgramType; 10 import flash.display3D.Context3DVertexBufferFormat; 11 import flash.display3D.IndexBuffer3D; 12 import flash.display3D.Program3D; 13 import flash.display3D.VertexBuffer3D; 14 import flash.events.Event; 15 import flash.geom.Matrix3D; 16 import flash.geom.Vector3D; 17 18 /** 19 * @author smartqi 20 * @E-mail: 21 * 创建时间:2013-6-29 上午9:36:36 22 * 23 */ 24 public class RectangleTest extends Sprite 25 { 26 27 private var context:Context3D; 28 private var vertexBuff:VertexBuffer3D; 29 private var indexBuff:IndexBuffer3D; 30 private var vertexData:Vector.<Number>; 31 private var indexData:Vector.<uint>; 32 private var shaderProgram:Program3D; 33 private var perspectiveMatrix:PerspectiveMatrix3D; 34 private var i:int; 35 private var sign:int = 1; 36 private const angleGap:Number = 20; 37 private var angle:Number = 0; 38 private var modelMatrix:Matrix3D; 39 private var viewMatrix:Matrix3D; 40 private var finalMatrix:Matrix3D; 41 42 43 public function RectangleTest() 44 { 45 var stage3d:Stage3D = stage.stage3Ds[0]; 46 stage3d.addEventListener(Event.CONTEXT3D_CREATE,onContextCreate); 47 stage3d.requestContext3D(); 48 } 49 50 private function onContextCreate(e:Event):void{ 51 context = (e.target as Stage3D).context3D; 52 if(context == null) return; 53 context.enableErrorChecking = true; //允许进行错误检测,release版本应设置 54 context.configureBackBuffer(500,500,0); //设置显示区域的大小 55 setupVertexBuff(); //设置顶点缓冲 56 setupShaderProgram(); //设置shander 57 setupPerspectiveMatrix(); //设置投影矩阵 58 initMatrix(); 59 addEventListener(Event.ENTER_FRAME,onEnterFrame); 60 } 61 62 private function setupVertexBuff():void{ 63 vertexData = Vector.<Number>([ 64 // x y z r g b 65 40, 40, -40, 1, 0, 0, 66 40, -40, -40, 0, 1, 0, 67 -40, -40, -40, 0, 0, 1, 68 -40, 40, -40, 1, 1, 1, 69 ]); 70 71 indexData = Vector.<uint>([0,1,2,0,2,3]); 72 vertexBuff = context.createVertexBuffer(4,vertexData.length/4); 73 vertexBuff.uploadFromVector(vertexData,0,4); 74 indexBuff = context.createIndexBuffer(6); 75 indexBuff.uploadFromVector(indexData,0,6); 76 context.setVertexBufferAt(0,vertexBuff,0,Context3DVertexBufferFormat.FLOAT_3); 77 context.setVertexBufferAt(1,vertexBuff,3,Context3DVertexBufferFormat.FLOAT_3); 78 } 79 80 private function setupShaderProgram():void{ 81 var vertexProgram:AGALMiniAssembler = new AGALMiniAssembler(); 82 vertexProgram.assemble(Context3DProgramType.VERTEX, 83 "m44 op,va0,vc0\n" + 84 "mov v1,va1\n"); 85 var fragmentProgram:AGALMiniAssembler = new AGALMiniAssembler(); 86 fragmentProgram.assemble(Context3DProgramType.FRAGMENT, 87 "mov oc,v1"); 88 shaderProgram = context.createProgram(); 89 shaderProgram.upload(vertexProgram.agalcode,fragmentProgram.agalcode); 90 context.setProgram(shaderProgram); 91 } 92 93 private function setupPerspectiveMatrix():void{ 94 perspectiveMatrix = new PerspectiveMatrix3D(); 95 perspectiveMatrix.perspectiveFieldOfViewRH(Math.PI*90/180,1,1,1000); //注意这里的角度使用的是弧度 96 } 97 98 private function initMatrix():void{ 99 modelMatrix = new Matrix3D(); 100 viewMatrix = new Matrix3D(); 101 finalMatrix = new Matrix3D(); 102 } 103 104 private function onEnterFrame(e:Event):void{ 105 context.clear(0,0,0); 106 angle += angleGap; 107 modelMatrix.identity(); 108 modelMatrix.prependRotation(angle,Vector3D.Z_AXIS); //绕着Z轴旋转物体,注意这里的角度使用的是角度 109 if(i>30){ 110 sign = -1; 111 } 112 if(i<0){ 113 sign = 1; 114 } 115 i += sign; 116 viewMatrix.identity(); 117 viewMatrix.prependTranslation(0,0,-30 + i); //将相机向后移,使物体看起来变小了,将相机向前移,使物体看起来变大 118 finalMatrix.identity(); 119 finalMatrix.append(modelMatrix); 120 finalMatrix.append(viewMatrix); 121 finalMatrix.append(perspectiveMatrix); 122 context.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX,0,finalMatrix,true); //上传最终的顶点转换矩阵,注意这里最后一个参数为true 123 context.drawTriangles(indexBuff,0,2); 124 context.present(); 125 } 126 } 127 }
转载于:https://www.cnblogs.com/hisiqi/p/3162151.html
Flash3D学习计划(三)——学习VB,IB相关,理解三角形顶点顺序;在屏幕上显示2D矩形,并实现缩放,平移,旋转...相关推荐
- ROS学习08-NVIDIA JETSON TX2安装配置激光雷达-思岚RPLIDAR S1(在Rviz上显示点位图)
ROS学习08-NVIDIA JETSON TX2安装配置激光雷达-思岚RPLIDAR S1(在Rviz上显示点位图) 在前一节我们创建了ROS工作空间,这一节开始要给我们的机器人装一些感官了,这里我 ...
- ABAP屏幕上显示LIST的三种方法
屏幕上显示LIST的三种方法 在abap开发中,经常有用户提出list的需求,实现的方法很多,通常用的有以下三种总结一下供大家参考: 1:手工添加-就是根据需要把LIST要显示的内容一条一条加到LIS ...
- 【Python之pymysql库学习】三.sql语句的相关知识(保姆级图文+实现代码)
目录 实现效果 实现思路 实现代码 总结 欢迎关注 『Python之pymysql库学习』 系列,持续更新中 欢迎关注 『Python之pymysql库学习』 系列,持续更新中 实现效果 把给读取数据 ...
- html5学习计划,个人学习计划时间表2018
个人学习计划时间表2018 一.时间计划 1.早上 (1).每天6:20必起.(2).每天6:30必到教室.(3).每天7:00-7:10分吃早餐.(4).7:10分回教室直到早自习下(7:50).( ...
- java 学习计划_Java学习计划范例
Java学习计划范例 Java学习计划 好的计划是成功的一半,今天是在创新思维的第一节课,在这门课程的开始,一个有策略的.有目的性的计划是非常必要的,为了在以后的学习中能够达到最好的.效果," ...
- mysql学习计划_MySQL学习计划
2019.1.15更新 没有按照既定计划执行,借口当然是一大堆,耐心得读完了这本书,受益匪浅,解决了我日报和周报中的很多问题,虽然离目标还有很大的距离,但是这本书让我看到了希望,科技改变世界,这一行行 ...
- Linux学习(三):管道相关命令
学习目标 熟练掌握以下命令 1.cut 2.sort 3.wc 4.uniq 5.tee 6.tr 7.split 8.awk 9.sed / grep 熟练掌握以下命令 1.cut 准备工作 成绩表 ...
- Android学习计划 Android学习总结
********************************2011/07/01********** 之前自己曾参与了一个简单的Android应用项目(简单的拍照功能,利用socket与PC 端服 ...
- anki怎么设置学习计划_新媒体企业品牌营销策划公众号运营规划线上推广内容管理sop工作流程计划方案表格模板新手小白零基础怎么学习写作软文涨粉技巧攻略下载...
新媒体运营工作总结(共10篇) - 大文斗范文网 ...策划方案(总监级的推广方案) | 秦志强笔记_网络新媒体... 月薪30K新媒体运营在用的线上内容管理营销推广计划sop方案... 教你怎么写好 ...
最新文章
- laravel 文件上传
- 图像处理与计算机视觉:基础,经典以及最近发展(5)计算机视觉
- Exchange 2010 Mailtip 功能
- 正式发布!鸿蒙,来了!
- 程序员面试——C++工程师面试大全第一部分
- Firefox 97.0.2 修复两个已遭利用的0day
- 【跟着我们学Golang】基础结构
- 神经网络之BP神经网络
- python求解LeetCode习题Fraction to Recurring Decimal
- 打外星生物的塔防java_《异形防御者》测评:外星人也玩塔防游戏
- 员工激励格言之《士气与斗志的激励》
- requires_grad,grad_fn,grad的含义及使用
- python+OpenCv笔记(八):图像噪声(椒盐噪声、高斯噪声)
- 约瑟夫环问题(丢手绢)
- 最全的浏览器User-Agent
- 物理木板过河问题java_抖音捡木板过河游戏
- rgb色带python实现opencv
- 基于JAVA银杏湖景区旅游管理信息平台计算机毕业设计源码+系统+lw文档+部署
- Java全栈系列笔记
- MATLAB学习笔记#001 获取矩阵大小