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星形贴图的更多相关文章

  1. [ActionScript 3.0] AS3 3D双圆环贴图

    package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.MovieCl ...

  2. [ActionScript 3.0] AS3 绘制星形

    package { import flash.display.Sprite; import flash.events.Event; /** * @author Frost.Yen * @E-mail ...

  3. 3D星形贴图

    3D星形贴图: /** * * *---------------------* * | *** 3D星形贴图 *** | * *---------------------* * * 编辑修改收录:fe ...

  4. [ActionScript 3.0] as3处理xml的功能和遍历节点

    as3比as2处理xml的功能增强了N倍,获取或遍历节点非常之方便,类似于json对像的处理方式. XML 的一个强大功能是它能够通过文本字符的线性字符串提供复杂的嵌套数据.将数据加载到 XML 对象 ...

  5. [ActionScript 3.0] AS3.0 动态加载显示内容

    可以将下列任何外部显示资源加载到 ActionScript 3.0 应用程序中: 在 ActionScript 3.0 中创作的 SWF 文件 — 此文件可以是 Sprite.MovieClip 或扩 ...

  6. [ActionScript 3.0] AS3实现3D旋转

    package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Display ...

  7. [ActionScript 3.0] AS3.0和AS2.0的相互通信

    AS3和AS2之间的通信,最好的方式可能就是LocalConnection了. AS2向AS3发送数据,即AS2调用AS3的函数: as2.0代码(按钮上写的发送信息代码): on (release) ...

  8. [ActionScript 3.0] AS3.0 本机鼠标指针

    Flash Player 10.2添加了内置的本机鼠标指针(native mouse cursor)支持,虽然在之前的版本里我们可以侦听MouseEvent事件来模拟鼠标指针,但是在有了原生的本机鼠标 ...

  9. [ActionScript 3.0] AS3 深入理解Flash的安全沙箱Security Domains

    简介 如果你还没有与复杂的的安全域(security domain)和应用程序域(application domain)问题打过交道,那么你真是个幸运的家伙.当你在加载外部内容(然后他们开始播放)的时 ...

随机推荐

  1. 将n阶方阵左下半三角中的元素值置0.

    /*===================================== 将n阶方阵左下半三角中的元素值置0. 0<n<10. =========================== ...

  2. event.srcElement兼容处理

    在IE下,event对象有srcElement属性,但是没有target属性:Firefox下,even对象有target属性,但是没有srcElement属性.. 解决方法:使用obj(obj = ...

  3. ExtJs学习笔记之ComboBox组件

    ComboBox组件 (1)ComboBox控件支持自动完成.远程加载.和许多其他特性. (2)ComboBox就像是传统的HTML文本 <input> 域和 <select> ...

  4. Oracle序列使用:建立、删除

    转自:http://www.cnblogs.com/WangPB/archive/2010/07/13/1776766.html 在开始讲解Oracle序列使用方法之前,先加一点关于Oracle cl ...

  5. 无需添加引用执行JS,发布无需带DLL、例子:QQMD5 QQGTK 13位时间戳 取随机数

    javascriptDemo.rar 本人写POST经常会遇到用JS来加密的一些网站,然后又不想用C#重写.在百度和论坛里找的JS执行不是64位不支持就是要带个DLL神马的.很讨厌.然后自己就写了个不 ...

  6. Redis集群方案介绍

    由于Redis出众的性能,其在众多的移动互联网企业中得到广泛的应用.Redis在3.0版本前只支持单实例模式,虽然现在的服务器内存可以到100GB.200GB的规模,但是单实例模式限制了Redis没法 ...

  7. 14款经典的MySQL客户端软件

    1. EMS MySQL Manager 强大的mysql管理工具,允许用户通过图形界面创建或编辑数据库对象,并提供通过sql语句管理用户和权限,通过图形界面建立sql语句,自动生成html格式的数据 ...

  8. DNS查询指令host

    描述: Host指令提供一个简单的DNS解析的功能.正常地使用名称到IP的解析,当指令没有任何参数和选项的时候,它将输出简单的带命令行参数和选项的概要. 名称是可以被解析的域名,也可以是点分十进制的I ...

  9. 就Double、Decimal来说数据计算异常

    场景: 客户提示发料时提示库存不足,可肉眼比对发料数量与库存数量没有一点问题. 但调度跟踪却发现出现“不可思议”的异常. 简单分析: 1.转Decimal再计算没问题.精度较高,存储方法也不一样,所以 ...

  10. [系统开发] Squid 认证系统

    一.用途 用过 Squid 的用户认证模块的同事一定知道,它有个很麻烦的问题:每过一段时间就会跳出一个重新输入密码的窗口,用户不胜其烦,我查了网上的各种配置资料,始终没有找到一个圆满的解决方法,所以编 ...