- 浏览: 1064767 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (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 1059本帖最后由 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 2058http://bbs.9ria.com/viewthread. ... -
[转] [Flash/Flex] 支持 Molehill版本的Flare3D 应用示范
2011-04-16 02:30 1232http://bbs.9ria.com/thread-7953 ... -
[转]自制flash3D变换类
2011-04-15 16:09 996http://hi.baidu.com/boycy/blog/ ... -
[转] [Flash/Flex] native3d flash 3d引擎发布molehill版
2011-04-13 22:46 1071http://bbs.9ria.com/viewth ... -
[转] [Flash/Flex] 轻量级flash3d引擎native3d rev19使用教程
2011-04-10 06:00 1079资讯类型: 原创 来 ... -
[转] 缠绕规则在drawpath中的应用
2011-04-10 05:40 1371使用as3的绘图API绘制填充区域时,经常会涉及到相交区域的颜 ... -
[转]2011RIA天地行主题之3D Flash3D引擎简介
2011-03-31 22:34 1787http://bbs.9ria.com/viewthread. ... -
[转]Flash Player 10' s new 3D effects(三)
2011-03-23 17:34 1568http://sjkgxf7191.iteye.com/blo ... -
[转]Flash Player 10' s new 3D effects(二)
2011-03-23 15:50 1518http://sjkgxf7191.iteye.com/blo ... -
[转]Flash Player 10' s new 3D effects(一)
2011-03-23 14:55 1342http://sjkgxf7191.iteye.com/ ... -
[转]使用Flare3D在FB中搭建第一个Molehill项目
2011-03-22 20:52 1931http://www.adobe.com/cn/devnet/ ... -
[转]M2D的介绍——针对Flash ‘Molehill’ API的GPU加速2D框架
2011-03-22 14:37 1728http://bbs.9ria.com/viewth ... -
[转]使用Away3D引擎的Flash3D推箱子游戏原型 - 最终版本
2011-03-18 22:06 1348http://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 1560http://code.google.com/p/jiglib ... -
[转]使用CS4的新增类实现全景图效果
2011-03-08 15:32 1746http://uh.9ria.com/space-12147- ...
相关推荐
位图转数据(bmp图片转dat数据)源码; //bmp图片(位图)转换为dat数据,并存入到指定文件中; //若需将.dat数据在转换回位图.bmp文件,可以下载参考我的另外一个文档"data_bmp.c" //运行参考:./main infile.bmp outfile...
易语言转换八位256色位图源码,转换八位256色位图,到24位图,到八位位图256色,到八位256色彩,生成八位位图头彩,生成八位位图头,累加三,取首点24位,取首点8位,值加1,值加2,值加3,值减1
android 多位图转化为单色位图。32位深图转1位深图。24位深转1位
可以指定某个目录下的所有24位BMP转成16位图,但需要注意的是保存的图片无文件头。
Flash as3基于位图的碰撞检测实例,自己写的,有兴趣的话可以看看
VB 翻转放大位图 VB 翻转放大位图 VB 翻转放大位图
VC下彩色位图转单色位图,可实现截图,生成位图数据文件。
将24位位图转换成16位位图的源码,包括555和565格式
16进制dat数据转.bmp位图文件图片 源码: //dat数据转换为bmp图片(位图),并存入到指定名称的图片; //dat数据(my.dat)与当前程序文件在同一文件夹,"my.dat"为包含文件头的完整的位图数据,可以下载参考我的另外一个...
实测好用,是我用过的最好用的一款转矢量图工具,就算不是很高清的位图也是可以转成节点很少的位图且型状不变。 找到就是赚到了…… 恭喜你找到这个资源 :~)
チクワしか持ってねえ 位图转3D工具是一款由日本程序员开发的绿色小巧且非常有意思的小软件。它允许你使用位图图像转换为伪 3D 图像,当然生成的图像文件格式是 Gif 格式。非常有意思。 软件使用方法非常简单,只是...
位图转矢量图
使用C# 生成单色位图,并且为图片添加信息头
易语言位图句柄和位图数据转换源码,位图句柄和位图数据转换,NotifySys,运行时错误,取执行的文件名,位图句柄取数据,数据取位图句柄
3)将位图转化为坐标文件,供其他应用使用。 用途: 1)无特殊作用,写着玩。就是想用程序在坐标层次控制位图。 2)可用C++在源码级别生成位图,画个小画;读入位图数据,转换位图格式。 3)将图片转化为单片机开发...
可以把位图转成失量图,一些标志的JPG图片转成可填色的失量图
位图转矢量化(把线条图转成dxf格式)---CAD插件.rar
将ddb的位图转换成DIB的位图 用VS2005,C++
可以编辑制作位图 可控制位图大小 绘画位图 合成位图
24位彩图转为8位灰度图的C++代码,通过修改位图文件信息头来实现位图转换。