[ActionScript 3.0] AS3 3D星形贴图
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.display.TriangleCulling;
import flash.events.Event;
import flash.geom.Vector3D; /**
* @author Frost.Yen
* @E-mail 871979853@qq.com
* @create 2015-9-11 上午10:48:09
*
*/
[SWF(width="1024",height="768")]
public class StarTexture extends Sprite
{
[Embed(source="test.jpg")]
private var _img:Class;
private var _bmpd:BitmapData;
private var _pointContainer:Sprite;
private var _graphicContainer:Sprite;
private var _pointArr:Array = [];
private var _objArr:Array = [];
private var _num:int = 5;
private var _boo:Boolean;//是否是离五角星中心点较近的顶点
private var _radius1:Number = 100;//五角星中心点离较远顶点的距离(可看作五角星外接圆的半径)
private var _radius2:Number = 40;//五角星中心点离较近顶点的距离(可看作五角星内接圆的半径)
private var _focus:Number = 400;
public function StarTexture()
{
initViews();
initEventListeners();
}
private function initViews():void
{
_pointContainer = new Sprite();
_graphicContainer = new Sprite();
_pointContainer.x = _graphicContainer.x = this.stage.stageWidth*0.5;
_pointContainer.y = _graphicContainer.y = this.stage.stageHeight*0.5;
_bmpd = (new _img() as Bitmap).bitmapData;
this.addChild(_pointContainer);
this.addChild(_graphicContainer);
createStar();
}
private function initEventListeners():void
{
this.addEventListener(Event.ENTER_FRAME,onEnterFrame);
}
private function onEnterFrame(e:Event):void{
for(var i:int=0;i<_pointArr.length;i++){
_pointArr[i].Z = (_pointArr[i] as MovieClip).transform.getRelativeMatrix3D(_pointContainer).position.z;
_pointArr[i].X = (_pointArr[i] as MovieClip).transform.getRelativeMatrix3D(_pointContainer).position.x*(_focus/(_focus+_pointArr[i].Z));
_pointArr[i].Y = (_pointArr[i] as MovieClip).transform.getRelativeMatrix3D(_pointContainer).position.y*(_focus/(_focus+_pointArr[i].Z));
(_pointArr[i] as MovieClip).transform.matrix3D.appendRotation((mouseX-_pointContainer.x)/50,Vector3D.Y_AXIS);
(_pointArr[i] as MovieClip).transform.matrix3D.appendRotation((_pointContainer.y-mouseY)/50,Vector3D.X_AXIS);
}
_graphicContainer.graphics.clear();
_objArr = [];
for(i=0;i<_num*2;i++){
var vertices:Vector.<Number> = new Vector.<Number>();
vertices.push(_pointArr[_num*2].X,_pointArr[_num*2].Y,_pointArr[i].X,_pointArr[i].Y,_pointArr[(i+1)%(_num*2)].X,_pointArr[(i+1)%(_num*2)].Y,_pointArr[(i+2)%(_num*2)].X,_pointArr[(i+2)%(_num*2)].Y);
var indices:Vector.<int> = new Vector.<int>([0,1,2,0,2,3]);
var uvtData:Vector.<Number> = Vector.<Number>([0,0,1,0,1,1,0,1]);//不能new,如果new会导致运行flash.display.Graphics.drawTriangles()运行错误:ArgumentError: Error #2004: 某个参数无效。tell me why?
var Z:Number = _pointArr[i].Z + _pointArr[(i+1)%(_num*2)].Z;
_objArr.push({V:vertices,I:indices,U:uvtData,Z:Z});
}
_objArr.sortOn("Z",18);
for(i =0;i<_objArr.length;i++){
_graphicContainer.graphics.beginBitmapFill(_bmpd);
_graphicContainer.graphics.drawTriangles(_objArr[i].V,_objArr[i].I,_objArr[i].U,TriangleCulling.NONE);
_graphicContainer.graphics.endFill();
}
}
private function createStar():void
{
for(var i:int = 0;i<_num*2;i++){
var mc:MovieClip = new MovieClip();
_pointContainer.addChild(mc);
if(_boo){
mc.x=_radius2*Math.cos(2*Math.PI/(_num*2)*i);
mc.y=_radius2*Math.sin(2*Math.PI/(_num*2)*i);
}else{
mc.x=_radius1*Math.cos(2*Math.PI/(_num*2)*i);
mc.y=_radius1*Math.sin(2*Math.PI/(_num*2)*i);
}
mc.z = 0;
_pointArr.push(mc);
_boo = !_boo;
}
var centerMC:MovieClip = new MovieClip();
_pointContainer.addChild(centerMC);
centerMC.x = 0;centerMC.y = 0;centerMC.z = -60;
_pointArr.push(centerMC);
}
}
}
[ActionScript 3.0] AS3 3D星形贴图的更多相关文章
- [ActionScript 3.0] AS3 3D双圆环贴图
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.MovieCl ...
- [ActionScript 3.0] AS3 绘制星形
package { import flash.display.Sprite; import flash.events.Event; /** * @author Frost.Yen * @E-mail ...
- 3D星形贴图
3D星形贴图: /** * * *---------------------* * | *** 3D星形贴图 *** | * *---------------------* * * 编辑修改收录:fe ...
- [ActionScript 3.0] as3处理xml的功能和遍历节点
as3比as2处理xml的功能增强了N倍,获取或遍历节点非常之方便,类似于json对像的处理方式. XML 的一个强大功能是它能够通过文本字符的线性字符串提供复杂的嵌套数据.将数据加载到 XML 对象 ...
- [ActionScript 3.0] AS3.0 动态加载显示内容
可以将下列任何外部显示资源加载到 ActionScript 3.0 应用程序中: 在 ActionScript 3.0 中创作的 SWF 文件 — 此文件可以是 Sprite.MovieClip 或扩 ...
- [ActionScript 3.0] AS3实现3D旋转
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Display ...
- [ActionScript 3.0] AS3.0和AS2.0的相互通信
AS3和AS2之间的通信,最好的方式可能就是LocalConnection了. AS2向AS3发送数据,即AS2调用AS3的函数: as2.0代码(按钮上写的发送信息代码): on (release) ...
- [ActionScript 3.0] AS3.0 本机鼠标指针
Flash Player 10.2添加了内置的本机鼠标指针(native mouse cursor)支持,虽然在之前的版本里我们可以侦听MouseEvent事件来模拟鼠标指针,但是在有了原生的本机鼠标 ...
- [ActionScript 3.0] AS3 深入理解Flash的安全沙箱Security Domains
简介 如果你还没有与复杂的的安全域(security domain)和应用程序域(application domain)问题打过交道,那么你真是个幸运的家伙.当你在加载外部内容(然后他们开始播放)的时 ...
随机推荐
- form表单回车提交问题,JS监听回车事件
我们有时候希望回车键敲在文本框(input element)里来提交表单(form),但有时候又不希望如此.比如搜索行为,希望输入完关键词之后直接按回车键立即提交表单,而有些复杂表单,可能要避免回车键 ...
- HTML,XML中的转义字符
HTML中的转义字符 HTML中<, >,&等有特别含义,(前两个字符用于链接签,&用于转义),不能直接使用.使用这三个字符时,应使用他们的转义序列,如下所示: & ...
- unity shader random number
http://gamedev.stackexchange.com/questions/32681/random-number-hlsl
- OpenJudge计算概论-求特殊自然数【枚举法】【将整数转成字符串】
/*======================================================================== 求特殊自然数 总时间限制: 1000ms 内存限制 ...
- Elasticsearch安装和使用
Elasticsearch安装和使用 Elasticsearch 是开源搜索平台的新成员,实时数据分析的神器,发展迅猛,基于 Lucene.RESTful.分布式.面向云计算设计.实时搜索.全文搜索. ...
- 深入理解ThreadLocal
ThreadLocal是什么 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简洁地 ...
- Window下SVN命令的使用总结
1 地址:http://subversion.apache.org/packages.html#windows 找到windows下的svn客户端工具.选择Win32Svn 进行安装. 一般环境变量会 ...
- Redis 宣言(Redis Manifesto)
Redis 的作者 antirez(Salvatore Sanfilippo)曾经发表了一篇名为 Redis 宣言(Redis Manifesto)的文章,文中列举了 Redis 的七个原则,以向大家 ...
- label标签的用法
label 标签for属性 <h1>显式指定通过for(for的值就是对应radio的id的值)</h1> <form> <label for="m ...
- Func系列4:其他功能
非Python API接口支持 Func通过非Python API实现远程调用,目的是为第三方工具提供调用及返回接口.Func使用func-transmit命令来实现,支持YAML.JSON格式,实现 ...