3D星形贴图
3D星形贴图:
/**
*
* *---------------------*
* | *** 3D星形贴图 *** |
* *---------------------*
*
* 编辑修改收录:fengzi(疯子、wu341、wgq341)
*
* 不会写代码,我是代码搬运工。
*
* 联系方式:QQ(493712833)。
*
* 随 笔: https://www.cnblogs.com/fengziwu/
*
* 版权协议:请自觉遵守LGPL协议,欢迎修改、复制、转载、传播给更多需要的人。
* 免责声明:任何因使用此软件导致的纠纷与软件/程序开发者无关。
* 日 期: 2019.05.08
*
*/
package fengzi.bmd
{
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; public class StarTexture extends Sprite
{
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;//五角星中心点离较远顶点的距离(可看作五角星外接圆的半径)
private var _radius2:Number;//五角星中心点离较近顶点的距离(可看作五角星内接圆的半径)
private var _focus:Number = 400; /***
* 3D星形贴图
* @param img 图片对象
* @param _radius1 五角星中心点离较远顶点的距离(可看作五角星外接圆的半径)
* @param _radius2 五角星中心点离较近顶点的距离(可看作五角星内接圆的半径)
***/
public function StarTexture(img:*,_radius1:Number = 100,_radius2:Number = 40)
{
this._radius1=_radius1;
this._radius2=_radius2;
initViews(img);
initEventListeners();
}
private function initViews(img:*):void
{
_pointContainer = new Sprite();
_graphicContainer = new Sprite();
_pointContainer.x = _graphicContainer.x =img.width*0.5;
_pointContainer.y = _graphicContainer.y = img.height*0.5;
_bmpd = new BitmapData(img.width,img.height,false,0)
_bmpd.draw(img)
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);
}
}
}
3D星形贴图的更多相关文章
- [ActionScript 3.0] AS3 3D星形贴图
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.MovieCl ...
- 一组神奇的 3D Gif 动图
本文由 极客范 - 黄利民 翻译自 mymodernmet.欢迎加入极客翻译小组,同我们一道翻译与分享.转载请参见文章末尾处的要求. 虽然 gif 动图/动画似乎是无处不在现在了,但有些聪明人已经把 ...
- CSS3之3D轮播图
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- jQuery自适应-3D旋转轮播图
3D旋转轮播图 本例源于(站长之家实例http://sc.chinaz.com/jiaoben/170215391070.htm) 其他相似示例(https://www.cnblogs.com/inc ...
- WPF绘制深度不同颜色的3D模型填充图和线框图
原文:WPF绘制深度不同颜色的3D模型填充图和线框图 在机械测量过程中,测量的数据需要进行软件处理.通常测量一个零件之后,需要重建零件的3D模型,便于观察测量结果是否与所测工件一致. 重建的3D模型需 ...
- 基于 HTML5 Canvas 的 3D 模型贴图问题
之前注意到的一个例子,但是一直没有沉下心来看这个例子到底有什么优点,总觉得就是一个 list 列表,也不知道右边的 3d 场景放两个节点是要干嘛,今天突然想起来就仔细地看了一下这个例子的代码,实际操作 ...
- 3d轮播图(另一种方式,可以实现的功能更为强大也更为灵活,简单一句话,比酷狗优酷的炫)
前不久我做了一个3d仿酷狗的轮播图,用的技术原理就是简单的jquery遍历+css样式读写. 这次呢,我们换一种思路(呵呵其实换汤不换药),看到上次那个轮播吗?你有没有发现用jquery的animat ...
- 3d轮播图——类似酷狗的轮播
说到轮播图,其实只要是跟web开发相关的无论是前端后端应该都不陌生,各种各样的轮播图,从以前的单纯的平面山水画遮盖滑动或滚动,到Jquery的animate甚至是h5+css3,各种炫酷的轮播图更是层 ...
- Python的可视化包 – Matplotlib 2D图表(点图和线图,.柱状或饼状类型的图),3D图表(曲面图,散点图和柱状图)
Python的可视化包 – Matplotlib Matplotlib是Python中最常用的可视化工具之一,可以非常方便地创建海量类型地2D图表和一些基本的3D图表.Matplotlib最早是为了可 ...
随机推荐
- Node Addon
Node Addon as bridge between javascript and C++ #include <node.h> namespace HelloWorldDemo { u ...
- NIO 选择器 Selector
选择器提供选择执行已经就绪的任务的能力,这使得多元 I/O 成为可能.就像在第一章中描述的那样,就绪选择和多元执行使得单线程能够有效率地同时管理多个 I/O 通道(Channels).C/C++代码的 ...
- idea乱码问题
## 1. 文件中内容中文乱码 这个原因是文件的编码和项目的编码不一致导致,将项目工程和文件的编码设置成一致的(如,文件编码是GBK,那就都设置为GBK,若为UTF-8就都设置为UTF-8) ## 2 ...
- 团队作业-Alpha(3/4)
队名:软工9组 组长博客:https://www.cnblogs.com/cmlei/ 作业博客:https://edu.cnblogs.com/campus/fzu/SoftwareEngineer ...
- Python之schedule用法,类似linux下的crontab
# -*- coding: utf-8 -*- # author:baoshan import schedule import time def job(): print("I'm work ...
- Python3基础 yield 在无返回值的函数中的简单示例
Python : 3.7.3 OS : Ubuntu 18.04.2 LTS IDE : pycharm-community-2019.1.3 ...
- sqlserver表被锁了,解锁方法,删除锁的方法
-- 查询死锁select request_session_id spid, OBJECT_NAME(resource_associated_entity_id) table ...
- docker安装并运行kibana
拉镜像: [mall@VM_0_7_centos ~]$ : Pulling from library/kibana 256b176beaff: Already exists 88643bded09c ...
- 持久化机器学习模型(joblib方式)
import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression ...
- [LeetCode] 304. Range Sum Query 2D - Immutable 二维区域和检索 - 不可变
Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper lef ...