- 浏览: 1084665 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (695)
- 心情日记 (14)
- AS开发工具 (12)
- 文章转载 (99)
- AIR (5)
- 问题总结 (46)
- SWF格式 (7)
- 测试总结 (10)
- 外文资料 (9)
- 算法技术 (33)
- AS3常用开源库 (43)
- 源码范例 (102)
- FLEX (72)
- FLASH 优化 (33)
- 游戏开发 (49)
- 开发技术 (11)
- 工作应用 (34)
- AS3收集 (140)
- WebBase (0)
- 开发构想 (4)
- 设计模式 (2)
- 框架和框架范例 (19)
- RED5 (3)
- java开发 (3)
- JAVA (1)
- FLASH-3D (23)
- 3D (6)
- 书籍 (10)
- 业界信息资料 (3)
- C# (1)
- JavaScript (12)
- HTML5 (6)
- Flixel (1)
- D5Power RPG网页游戏引擎 (0)
- ColorMatrixFilter - 获得相应颜色的色调 函数 (0)
- Starling (0)
最新评论
-
老顽童203:
字体
水果忍者鼠标跟随特效制作[转载] -
hairball00:
[转] 放出超多的Flash组件源代码 -
he74552775:
flash AS3 RegExp简单功能用法(转) -
hanshuai1232000:
第四点,有利也有弊,等你做了大型的aprg,你就知道了
[转]位图数据内存优化 -
yangfantao:
太感谢
[转] 放出超多的Flash组件源代码
http://bbs.9ria.com/viewthread.php?tid=82221&extra=page%3D1%26amp%3Borderby%3Ddateline%26amp%3Bfilter%3D2592000
当一张位图在空间中移动或旋转时,它在屏幕上的投影可能是任意的不规则的四边形。我们利用透视计算计算出投影到屏幕上的四边形的四个顶点的在屏幕上的坐标,用Graphics.beginBitmapFill(sourceBitmapData)、Graphics.moveTo和Graphics.lineTo,不能在不规则四边形内填充到完整的位图,这时我们会试着设置Graphics.beginBitmapFill()方法的第二个Matrix类参数,但是还是不能够填充得到完整的位图。虽然这样,但是不难发现,我们不能得到完整的位图填充,但是通过调整Graphics.beginBitmapFill()的Matrix参数,我们可以准确获得一半的位图。两个一半就是一了,而位图的一半就是一个三角形。任意的四边形都可以分成两个三角形,那么我们先画一个三角形填充一半的位图,再画另一个三角形填充另一半的位图,我们就能填充到完整的位图。向下面这样:
var triangle_a:Sprite=new Sprite
var triangle_b:Sprite=new Sprite
addChild(triangle_a)
addChild(triangle_b)
//drawTriangle 函数是用来为Sprite对象画三角形的
drawTriangle(triangle_a,sourceBitmapData, A,B,C)
drawTriangle(triangle_b,sourceBitmapData,D,E,F)
function drawTriangle(_target:Sprite,_sourceBitmapData:BitmapData,Aopint,Boint,Coint):void
{
var _matrix:Matrix=new Matrix
//……………………
//Matrix的计算后面再说
_target.graphics.clear()
//为了看得清楚,可以加上下面这句
//_target.graphics.lineStyle(1)
_target.graphics.beginBitmapFill(_sourceBitmapData,_matrix)
_target.graphics.moveTo(A.x,A.y)
_target.graphics.lineTo(B.x,B.y)
_target.graphics.lineTo(C.x,C.y)
_target.graphics.lineTo(A.x,A.y)
}
Graphics.beginBitmapFill()方法中的Matrix类参数,是位图填充方式的关键。而Matrix类参数有a,b,c,d,tx,ty六个属性,我们要做的就是要把这六个属性的值计算出来。我们并不需要知道这六个参数各自的作用,我们只需要知道这六个属性组成了这样一个矩阵:
[ a,b,tx,
c,d,ty,
0,0,1]
Matrix类有这样的一个方法Matrix.transformPoint(_point:Point):Point{//….},先说说它是怎么工作的。根据我的理解,它函数代码大体上是这样的:
public function transformPoint(_point:Point):Point
{
var _x:Number=a * _point.x + c * _point.y + tx
var _y:Number=b * _point.x + d * _point.y + ty
return new Point(_x,_y)
}
我为什么要把这个方法写出来呢?细想一下,屏幕平面上的直角三角形形通过空间旋转和移动后,它在屏幕上的投影变成了非直角三角形,那么是否存在这样一个矩阵,使得屏幕平面上的直角三角形的三个顶点分别乘以该矩阵后,则使用矩阵的上述方法赋值后(则 _point=_matrix.transformPoint(_point)),与此直角三角形经过空间旋转和移动后在屏幕上的投影(非直角三角形)的三个顶点分别对应相等?由此问题我们可以列出两组三元一次方程。如下:
设屏幕平面上的直角三角形的三个顶点分别为:A(x1,y1),B(x2,y2),C(x3,y3), 此直角三角形经过空间旋转和移动后在屏幕上的投影(非直角三角形)的三个顶点分别为:_A(_x1,_y1),_B(_x2,_y2),_C(_x3,_y3)
综上所述有:
a * x1 + c * y1 + tx = _x1
b * x1 + d * y1 + ty = _y1
a * x2 + c * y2 + tx = _x2
b * x2 + d * y2 + ty = _y2
a * x3 + c * y3 + tx = _x3
b * x3 + d * y3 + ty = _y3
不难看出这是两组三元一次方程组:① a * x1 + c * y1 + tx = _x1 ② b * x1 + d * y1 + ty = _y1
a * x2 + c * y2 + tx = _x2 b * x2 + d * y2 + ty = _y2
a * x3 + c * y3 + tx = _x3 b * x3 + d * y3 + ty = _y3
通过这两个方程出我们可以计算出这一矩阵的a、c、tx和b、d、ty。跑题太远了吧!这个矩阵与我们上面说到的位图填充有什么关系么?!Graphics.beginBitmapFill()方法的第二个参数是矩阵Matrix类型吧~。Graphics.beginBitmapFill()方法的第二个Matrix类的参数与我们上面计算出来的矩阵有什么联系么?当然有联系,上面计算出来的矩阵就是我们所要的矩阵,它就是我们能够完整填充三角形的关键!还是不太明白,为什么通过上面方程组计算出来的矩阵就可以做到完整的位图填充?
那我就依我理解简要说说吧。当你使用Graphics.beginBitmapFill(sourceBitmapData,matrix)进行位图填充时,位图上每一个像素的坐标都作出了相应的改变,而这种改变与使用matrix.transformPoint()方法后的效果一样。假定Point类p是为图上一个像素的坐标,改变Graphics.beginBitmapFill()的Matrix类参数为matrix,p的坐标变为q,而q就是使用matrix.transformPoint(p)方法赋值后的坐标,则q=matrix.transformPoint(p)。那么我们只要令改变后的坐标等于三角形的顶点就可以了。这就是两个方程组提出的依据,也是为什么我要提到Matrix.transformPoint()方法的原因。
当一张位图在空间中移动或旋转时,它在屏幕上的投影可能是任意的不规则的四边形。我们利用透视计算计算出投影到屏幕上的四边形的四个顶点的在屏幕上的坐标,用Graphics.beginBitmapFill(sourceBitmapData)、Graphics.moveTo和Graphics.lineTo,不能在不规则四边形内填充到完整的位图,这时我们会试着设置Graphics.beginBitmapFill()方法的第二个Matrix类参数,但是还是不能够填充得到完整的位图。虽然这样,但是不难发现,我们不能得到完整的位图填充,但是通过调整Graphics.beginBitmapFill()的Matrix参数,我们可以准确获得一半的位图。两个一半就是一了,而位图的一半就是一个三角形。任意的四边形都可以分成两个三角形,那么我们先画一个三角形填充一半的位图,再画另一个三角形填充另一半的位图,我们就能填充到完整的位图。向下面这样:
var triangle_a:Sprite=new Sprite
var triangle_b:Sprite=new Sprite
addChild(triangle_a)
addChild(triangle_b)
//drawTriangle 函数是用来为Sprite对象画三角形的
drawTriangle(triangle_a,sourceBitmapData, A,B,C)
drawTriangle(triangle_b,sourceBitmapData,D,E,F)
function drawTriangle(_target:Sprite,_sourceBitmapData:BitmapData,Aopint,Boint,Coint):void
{
var _matrix:Matrix=new Matrix
//……………………
//Matrix的计算后面再说
_target.graphics.clear()
//为了看得清楚,可以加上下面这句
//_target.graphics.lineStyle(1)
_target.graphics.beginBitmapFill(_sourceBitmapData,_matrix)
_target.graphics.moveTo(A.x,A.y)
_target.graphics.lineTo(B.x,B.y)
_target.graphics.lineTo(C.x,C.y)
_target.graphics.lineTo(A.x,A.y)
}
Graphics.beginBitmapFill()方法中的Matrix类参数,是位图填充方式的关键。而Matrix类参数有a,b,c,d,tx,ty六个属性,我们要做的就是要把这六个属性的值计算出来。我们并不需要知道这六个参数各自的作用,我们只需要知道这六个属性组成了这样一个矩阵:
[ a,b,tx,
c,d,ty,
0,0,1]
Matrix类有这样的一个方法Matrix.transformPoint(_point:Point):Point{//….},先说说它是怎么工作的。根据我的理解,它函数代码大体上是这样的:
public function transformPoint(_point:Point):Point
{
var _x:Number=a * _point.x + c * _point.y + tx
var _y:Number=b * _point.x + d * _point.y + ty
return new Point(_x,_y)
}
我为什么要把这个方法写出来呢?细想一下,屏幕平面上的直角三角形形通过空间旋转和移动后,它在屏幕上的投影变成了非直角三角形,那么是否存在这样一个矩阵,使得屏幕平面上的直角三角形的三个顶点分别乘以该矩阵后,则使用矩阵的上述方法赋值后(则 _point=_matrix.transformPoint(_point)),与此直角三角形经过空间旋转和移动后在屏幕上的投影(非直角三角形)的三个顶点分别对应相等?由此问题我们可以列出两组三元一次方程。如下:
设屏幕平面上的直角三角形的三个顶点分别为:A(x1,y1),B(x2,y2),C(x3,y3), 此直角三角形经过空间旋转和移动后在屏幕上的投影(非直角三角形)的三个顶点分别为:_A(_x1,_y1),_B(_x2,_y2),_C(_x3,_y3)
综上所述有:
a * x1 + c * y1 + tx = _x1
b * x1 + d * y1 + ty = _y1
a * x2 + c * y2 + tx = _x2
b * x2 + d * y2 + ty = _y2
a * x3 + c * y3 + tx = _x3
b * x3 + d * y3 + ty = _y3
不难看出这是两组三元一次方程组:① a * x1 + c * y1 + tx = _x1 ② b * x1 + d * y1 + ty = _y1
a * x2 + c * y2 + tx = _x2 b * x2 + d * y2 + ty = _y2
a * x3 + c * y3 + tx = _x3 b * x3 + d * y3 + ty = _y3
通过这两个方程出我们可以计算出这一矩阵的a、c、tx和b、d、ty。跑题太远了吧!这个矩阵与我们上面说到的位图填充有什么关系么?!Graphics.beginBitmapFill()方法的第二个参数是矩阵Matrix类型吧~。Graphics.beginBitmapFill()方法的第二个Matrix类的参数与我们上面计算出来的矩阵有什么联系么?当然有联系,上面计算出来的矩阵就是我们所要的矩阵,它就是我们能够完整填充三角形的关键!还是不太明白,为什么通过上面方程组计算出来的矩阵就可以做到完整的位图填充?
那我就依我理解简要说说吧。当你使用Graphics.beginBitmapFill(sourceBitmapData,matrix)进行位图填充时,位图上每一个像素的坐标都作出了相应的改变,而这种改变与使用matrix.transformPoint()方法后的效果一样。假定Point类p是为图上一个像素的坐标,改变Graphics.beginBitmapFill()的Matrix类参数为matrix,p的坐标变为q,而q就是使用matrix.transformPoint(p)方法赋值后的坐标,则q=matrix.transformPoint(p)。那么我们只要令改变后的坐标等于三角形的顶点就可以了。这就是两个方程组提出的依据,也是为什么我要提到Matrix.transformPoint()方法的原因。
发表评论
-
AWAY3D 贴图DEMO
2011-05-14 23:16 0AWAY3D 贴图DEMO -
[转] MoleHill操作AGAL的Helper类之一
2011-04-29 01:46 1094本帖最后由 sleep2death 于 2011-4-20 1 ... -
和场景里的物体交互要用InteractiveScene3D,examples里有个InteractiveBoxDemo的例子有很好的参考价值
2011-04-28 21:53 0和场景里的物体交互要用InteractiveScene3D,e ... -
[转] 使用Flare3D制作一款 a small game 的3d游戏!
2011-04-25 01:39 2089http://bbs.9ria.com/viewthread. ... -
[转] [Flash/Flex] 支持 Molehill版本的Flare3D 应用示范
2011-04-16 02:30 1258http://bbs.9ria.com/thread-7953 ... -
[转]自制flash3D变换类
2011-04-15 16:09 1016http://hi.baidu.com/boycy/blog/ ... -
[转] [Flash/Flex] native3d flash 3d引擎发布molehill版
2011-04-13 22:46 1103http://bbs.9ria.com/viewth ... -
[转] [Flash/Flex] 轻量级flash3d引擎native3d rev19使用教程
2011-04-10 06:00 1105资讯类型: 原创 来 ... -
[转] 缠绕规则在drawpath中的应用
2011-04-10 05:40 1410使用as3的绘图API绘制填充区域时,经常会涉及到相交区域的颜 ... -
[转]2011RIA天地行主题之3D Flash3D引擎简介
2011-03-31 22:34 1821http://bbs.9ria.com/viewthread. ... -
[转]Flash Player 10' s new 3D effects(三)
2011-03-23 17:34 1604http://sjkgxf7191.iteye.com/blo ... -
[转]Flash Player 10' s new 3D effects(二)
2011-03-23 15:50 1542http://sjkgxf7191.iteye.com/blo ... -
[转]Flash Player 10' s new 3D effects(一)
2011-03-23 14:55 1365http://sjkgxf7191.iteye.com/ ... -
[转]使用Flare3D在FB中搭建第一个Molehill项目
2011-03-22 20:52 1964http://www.adobe.com/cn/devnet/ ... -
[转]M2D的介绍——针对Flash ‘Molehill’ API的GPU加速2D框架
2011-03-22 14:37 1768http://bbs.9ria.com/viewth ... -
[转]使用Away3D引擎的Flash3D推箱子游戏原型 - 最终版本
2011-03-18 22:06 1386http://bbs.9ria.com/viewthread. ... -
3D塔防
2011-03-18 18:29 03D塔防3D塔防 -
[转]Flash ‘Molehill’ API上的GPU加速2D框架-M2D
2011-03-11 02:13 0http://bbs.9ria.com/thread-75 ... -
jiglibflash--Flash 3D physics engine
2011-03-09 13:06 1583http://code.google.com/p/jiglib ... -
[转]使用CS4的新增类实现全景图效果
2011-03-08 15:32 1770http://uh.9ria.com/space-12147- ...
相关推荐
在本文中,我们将深入探讨如何使用...总的来说,用AS3制作3D菜单是一项挑战,需要对AS3语法、3D概念以及交互设计有深入的理解。这个项目为我们提供了一个实践和学习的机会,去探索如何将这些技术应用于实际项目中。
总的来说,Flash AS3.0制作3D动态饼状图调用XML数据是一项综合性的任务,涉及了ActionScript编程、图形绘制、3D转换、XML解析和交互设计等多个方面。通过熟练掌握这些技术,你可以创建出富有表现力的数据可视化工具...
本篇将深入探讨如何利用Flash ActionScript 3(AS3)实现一个3D照片墙的制作过程,以“小鸟3D照片墙X版”为例,揭示其背后的编程原理和技术要点。 首先,我们了解3D照片墙的基本概念。3D照片墙是指在二维平面上模拟...
3. 图形优化:学习如何减少3D渲染对性能的影响,例如通过简化地球纹理或使用位图缓存等技巧。 4. 用户交互:如果源文件包含交互功能,可以研究如何添加鼠标或键盘事件来控制地球的旋转。 5. ActionScript编程:深入...
6. 测试和优化:在Flash的测试环境下进行测试,确保所有功能正常工作,然后根据需要进行性能优化,比如减少不必要的计算或使用位图缓存。 7. 发布和嵌入:最后,将Flash项目导出为SWF文件,将其嵌入到网页中,并...
在AS3D中,开发者可以利用强大的3D渲染引擎来制作复杂的交互式内容,如游戏、模拟、可视化应用等。这篇博客文章"ActionScript 3D 中文例子"可能提供了关于如何在Flash环境中使用AS3D的实例和教程。 在学习AS3D时,...
1. **图形渲染**:AS3.0引入了Stage3D API,允许开发者利用硬件加速进行高性能的2D和3D图形渲染。翻书效果可能基于这个API来创建复杂的3D页面翻转动画,使得翻页看起来更加逼真。 2. **事件处理**:用户与虚拟书籍...
【Flash 3.0 小游戏 3D 地球】是一个基于ActionScript 3.0(AS 3.0)编程语言开发的互动小游戏,它利用了Flash平台的3D渲染能力,为用户提供了独特的视觉体验。在这个项目中,开发者通过ActionScript实现了对3D模型...
除了上述的2D游戏引擎外,还有一些专门针对3D游戏开发的Flash引擎,如As3isolibj、Away3D、Alternativa3D、Flare3D、CopperCube、Sophie3D等。这些引擎支持更加复杂的3D渲染和物理效果,为开发者提供了更为广阔的...
AS3-DisplayEffect组件是基于ActionScript 3.0(AS3)开发的一款显示效果工具。这个组件主要用于在Flash环境中创建动态的视觉效果,比如淡入淡出、旋转、缩放等,为用户界面和交互设计增添活力。通过使用...
此外,还可以深入研究AS3.0的高级特性,如面向对象编程、动画制作和性能优化,从而提升自己的编程技能。对于想要在互动媒体领域发展的初学者来说,这是一个很好的实践项目,能够为他们打下坚实的基础。
它具有直观的API命名和丰富的AS3类库,开发者可以利用熟悉的概念如显示列表、事件模型和标准的AS3 API来构建应用。Starling的轻量级设计意味着其核心功能只包含大约80K的代码量,并且对Flash Player或AIR的特定版本...
在AS3中,可以使用Graphics类的beginFill()、drawRect()、endFill()方法绘制矩形,再通过mask属性为显示对象设置遮罩,结合BlurFilter类实现羽化效果。羽化遮罩可能被用作水波效果的一部分,使得水边看起来更自然。 ...
- **flash 3.0小游戏3D地球**:三维图形渲染,可能使用ActionScript 3.0的3D库。 - **flash 3.0扫雷**:数字逻辑,随机布雷,游戏界面交互。 5. **学习资源与实践**: - **教程**:网上有许多免费的AS 3.0教程...
开发者可以使用Flash CS4或更高级别的版本打开和编辑这个源码,进一步理解和学习3D动画的制作方法。"视觉创意"则暗示了这个3D立方体动画不仅仅是一个技术展示,还包含了艺术性的设计元素,可能涉及到线条的艺术处理...
ActionScript 3.0(AS3)是Adobe公司发布的一种强大的编程语言,主要用于开发Flash应用程序、游戏和复杂的交云界面。本指南详细介绍了ActionScript 3.0的基础知识以及进阶技巧,适合开发人员深入学习和实践。 首先...
由于Flash Player 11和Adobe AIR 3引入了Stage3D,开发者能够通过Starling框架开发出高性能的2D游戏。Starling框架的出现,极大地降低了Flash游戏开发者的门槛,让他们不必深入了解底层的Stage3D API,就能利用GPU的...
3. **集成3D效果**:Flash CS5支持直接在舞台上创建和编辑3D对象,结合AS3.0可以实现丰富的3D交互。 4. **视频处理**:增强了视频播放和处理能力,支持高清视频和流媒体技术,使得Flash成为多媒体应用的首选平台。 ...
BMFont 1.13是一款高效且广泛应用的位图文本制作工具,专为游戏开发者设计,以提升在各种游戏引擎中的文本渲染效率。它支持多种跨平台的游戏开发框架,如Starling、Cocos2dX以及Unity3d,使得开发者能够轻松地在他们...
3. **图形渲染**:在AS3中,GameCommon可能封装了DisplayObject的管理,包括精灵(Sprite)、位图(Bitmap)、图形(Graphics)等,提供了图形绘制、动画制作的便利接口。 4. **物理引擎**:为了模拟真实世界的物理...