- 浏览: 1061541 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (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://uh.9ria.com/space-29516-do-blog-id-5510.html
注:网上看到了这样一篇文章写的还是很不错,拿这里给大家分享一下,感谢这位网友不辞辛苦写的这两篇文章,呵呵。本文章转于:DDM君/Furry, Flab3D.com (允许转载,转载请注明)http://hi.baidu.com/sacrtap/blog/item/242fbf516a00ad848d5430db.html
《三维图形成象的基本原理》
一个三维模型/场景要成像和运动在屏幕上,至少需要下面的要素。数学苦手或者完全没接触过的朋友不用怕,了解一下先,具体的计算法我们会在以后的教程中一一说明。
模型和贴图:
三个点连接成一个三角形,很多三角形组成一个模型。
贴图就是模型的每个点(x,y,z)对应的一个平面的(u,v),u,v也就是平面位图的x,y,只不过点用了x,y了,怕重复而已。
Flash3d里面的贴图就是根据每个三角形的不同斜度,和每个点对应的UV计算出beginBitmapFill的第二个矩阵参数(matrix)来用位图填充三角形。
运动:
对于初接触图形数学的朋友,下面的道理(二维,三维图形都是这样的道理,只不过三维多一个Z轴)一定会让你吃一惊。
所有我们以为在动的点/模型其实都没有动(相对坐标系),运动的只是坐标系而已。移动,旋转,放大,透视全是同一个原理,不过是在移动,旋转,放大,透视这些点/模型所在的坐标系而已。
所谓摄像机的各种运动根本就是浮云。摄像机绕Y顺时针拍摄,只不过是模型的坐标系在绕Y逆时针转而已。
所有点的任何变动都是一个点(x,y,z)乘以一个矩阵得到的。就这么简单。
千万不要听到这个就吓跑了,我们不需要去仔细研究什么是矩阵,我们只要知道怎么用就行了。而且也根本不需要我们自己去计算,数学算法类flash3d的引擎都是写好了的。
一个东西要动,不管是二维还是三维,就必须得要它的每个点都乘以某个矩阵,这是逃不掉的。
‘投射’在屏幕上
虽说是‘三维’,但实际上我们还是从二维平面的屏幕上观看的。所以我们必须要把三维的点(x,y,z),变成只有(x,y)的点显示在平面的电脑屏幕上。形象一点可以说三维点的显示就是这个点‘投影’在平面的画布上。
有些朋友会说,我直接把x,y,z的z值去掉不就行了。是的,直接去掉我们就能得到一个(x,y)的点,但是这样投影下来图形没有近大远小的变化,看起来稍稍有点奇怪。
于是我们就有了‘透视投影’,算法是用x,y除以某个和Z有关的值w来得到一个近大远小的透视后的(x,y),这才是我们平常看到最正常近大远小的三维图像。
图形学的原理是读懂flash3d各种引擎核心内容的基础的基础,只有了解这样的知识后,读引擎源代码才有意义,以后才能慢慢加入写引擎代码的行列,否则只会迷失在代码的海洋中(有时会吐=A=)。 让我们一起迈出这第一步吧,加油!
有任何不清楚的地方,欢迎到讨论区发言。(无需注册)
Matrix3D模型
Matrix3D 类使用一个 4x4 正方形矩阵,即一个由四行和四列数字构成的表,其中容纳了用于转换的数据。矩阵的前三行容纳每个 3D 轴 (x,y,z) 的数据。平移信息位于最后一列中。方向和缩放数据位于前三个列中。缩放因子是位于前三个列中的对角数字。以下是 Matrix3D 元素的表示形式:
空间中的某个点(x,y,z)的任何移动,旋转,缩放的变换,都是用这个点乘以某个一个矩阵而得到。那么模型是由一个个(x,y,z)的点组成,模型整个要变换,就是让每个点乘以某个矩阵。这个我们在《三维成像基本原理里》提到过。
这是三维引擎开发,和引擎代码阅读的必备的基础常识。
Flash3d的引擎里给我们提供了很丰富的运算类。(详细我们在《pv3d, sandy, away3d的三维数学运算类》介绍)
由于(x,y,z)乘以3*3矩阵可以达到旋转和缩放的目的,但是无法表示移动,所以为了统一,我们通常是采用乘以一个4行4列的矩阵。我们flash3d的引擎也都是为我们准备的4*4/4*3矩阵有关的算法。也就是说所有变换方法,都是用如下公式:
变换后点的(x’,y’,z’)=原来的(x,y,z) 乘以 4*4矩阵M
如果使用pv3d的数学类,写法如下:
var 点:number3D=new Number3D(x的值,y的值,z的值); //原来的点
var 数组:Array=[n11,n12,n13, 0,
n21,n22,n23, 0,
n31,n32,n33, 0,
nx , ny, nz, 1]; //构造矩阵内每个值,需要一个数组,我们通常都是以这种格式书写
var 矩阵: Matrix3D=new Matrix3D(数组); //构造矩阵
Matrix3D.multiplyVector4x4(矩阵,点); //点的x,y,z数据直接就更新为相乘后的数据了。
那么具体是用哪个矩阵M呢?下面我们就列出来:
(本教程的公式图,来自Skyman君的博客http://www.cnblogs.com/skyman/)
旋转
旋转在三维里应该是最麻烦的东西,因为人类对旋转的描述是很有限。光靠矩阵控制旋转很多情况是非常复杂和不形象的,所以我们还发明了优拉角和四元数这些对旋转的控制更优良的办法,这些我们以后会讲到。
角度θ表示的是延某轴旋转的角度。
下面三个矩阵分别表示了点绕x轴,y轴,z轴的旋转矩阵。
移动
从公式我们很容易能看出,第4行1,2,3列的数,分别控制着点在x,y,z方向上的移动。
缩放
从公式我们很容易能看出,对角线上的n11,n22,n33,分别控制着点在x,y,z方向上的缩放。
这些就是最简单的变换矩阵,熟悉了这些,我们就又向前迈进了一步。
图形学应该是一个很有趣的东西,并非像很多学校和学生教授的的那种痛苦不堪的东西。其实道理非常简单,如果自己再具备一点编程知识,很容易就能做出自己的成像程序。
注:我把两篇文章放一块了,这样大家理解起来方便,呵呵
注:网上看到了这样一篇文章写的还是很不错,拿这里给大家分享一下,感谢这位网友不辞辛苦写的这两篇文章,呵呵。本文章转于:DDM君/Furry, Flab3D.com (允许转载,转载请注明)http://hi.baidu.com/sacrtap/blog/item/242fbf516a00ad848d5430db.html
《三维图形成象的基本原理》
一个三维模型/场景要成像和运动在屏幕上,至少需要下面的要素。数学苦手或者完全没接触过的朋友不用怕,了解一下先,具体的计算法我们会在以后的教程中一一说明。
模型和贴图:
三个点连接成一个三角形,很多三角形组成一个模型。
贴图就是模型的每个点(x,y,z)对应的一个平面的(u,v),u,v也就是平面位图的x,y,只不过点用了x,y了,怕重复而已。
Flash3d里面的贴图就是根据每个三角形的不同斜度,和每个点对应的UV计算出beginBitmapFill的第二个矩阵参数(matrix)来用位图填充三角形。
运动:
对于初接触图形数学的朋友,下面的道理(二维,三维图形都是这样的道理,只不过三维多一个Z轴)一定会让你吃一惊。
所有我们以为在动的点/模型其实都没有动(相对坐标系),运动的只是坐标系而已。移动,旋转,放大,透视全是同一个原理,不过是在移动,旋转,放大,透视这些点/模型所在的坐标系而已。
所谓摄像机的各种运动根本就是浮云。摄像机绕Y顺时针拍摄,只不过是模型的坐标系在绕Y逆时针转而已。
所有点的任何变动都是一个点(x,y,z)乘以一个矩阵得到的。就这么简单。
千万不要听到这个就吓跑了,我们不需要去仔细研究什么是矩阵,我们只要知道怎么用就行了。而且也根本不需要我们自己去计算,数学算法类flash3d的引擎都是写好了的。
一个东西要动,不管是二维还是三维,就必须得要它的每个点都乘以某个矩阵,这是逃不掉的。
‘投射’在屏幕上
虽说是‘三维’,但实际上我们还是从二维平面的屏幕上观看的。所以我们必须要把三维的点(x,y,z),变成只有(x,y)的点显示在平面的电脑屏幕上。形象一点可以说三维点的显示就是这个点‘投影’在平面的画布上。
有些朋友会说,我直接把x,y,z的z值去掉不就行了。是的,直接去掉我们就能得到一个(x,y)的点,但是这样投影下来图形没有近大远小的变化,看起来稍稍有点奇怪。
于是我们就有了‘透视投影’,算法是用x,y除以某个和Z有关的值w来得到一个近大远小的透视后的(x,y),这才是我们平常看到最正常近大远小的三维图像。
图形学的原理是读懂flash3d各种引擎核心内容的基础的基础,只有了解这样的知识后,读引擎源代码才有意义,以后才能慢慢加入写引擎代码的行列,否则只会迷失在代码的海洋中(有时会吐=A=)。 让我们一起迈出这第一步吧,加油!
有任何不清楚的地方,欢迎到讨论区发言。(无需注册)
Matrix3D模型
Matrix3D 类使用一个 4x4 正方形矩阵,即一个由四行和四列数字构成的表,其中容纳了用于转换的数据。矩阵的前三行容纳每个 3D 轴 (x,y,z) 的数据。平移信息位于最后一列中。方向和缩放数据位于前三个列中。缩放因子是位于前三个列中的对角数字。以下是 Matrix3D 元素的表示形式:
空间中的某个点(x,y,z)的任何移动,旋转,缩放的变换,都是用这个点乘以某个一个矩阵而得到。那么模型是由一个个(x,y,z)的点组成,模型整个要变换,就是让每个点乘以某个矩阵。这个我们在《三维成像基本原理里》提到过。
这是三维引擎开发,和引擎代码阅读的必备的基础常识。
Flash3d的引擎里给我们提供了很丰富的运算类。(详细我们在《pv3d, sandy, away3d的三维数学运算类》介绍)
由于(x,y,z)乘以3*3矩阵可以达到旋转和缩放的目的,但是无法表示移动,所以为了统一,我们通常是采用乘以一个4行4列的矩阵。我们flash3d的引擎也都是为我们准备的4*4/4*3矩阵有关的算法。也就是说所有变换方法,都是用如下公式:
变换后点的(x’,y’,z’)=原来的(x,y,z) 乘以 4*4矩阵M
如果使用pv3d的数学类,写法如下:
var 点:number3D=new Number3D(x的值,y的值,z的值); //原来的点
var 数组:Array=[n11,n12,n13, 0,
n21,n22,n23, 0,
n31,n32,n33, 0,
nx , ny, nz, 1]; //构造矩阵内每个值,需要一个数组,我们通常都是以这种格式书写
var 矩阵: Matrix3D=new Matrix3D(数组); //构造矩阵
Matrix3D.multiplyVector4x4(矩阵,点); //点的x,y,z数据直接就更新为相乘后的数据了。
那么具体是用哪个矩阵M呢?下面我们就列出来:
(本教程的公式图,来自Skyman君的博客http://www.cnblogs.com/skyman/)
旋转
旋转在三维里应该是最麻烦的东西,因为人类对旋转的描述是很有限。光靠矩阵控制旋转很多情况是非常复杂和不形象的,所以我们还发明了优拉角和四元数这些对旋转的控制更优良的办法,这些我们以后会讲到。
角度θ表示的是延某轴旋转的角度。
下面三个矩阵分别表示了点绕x轴,y轴,z轴的旋转矩阵。
移动
从公式我们很容易能看出,第4行1,2,3列的数,分别控制着点在x,y,z方向上的移动。
缩放
从公式我们很容易能看出,对角线上的n11,n22,n33,分别控制着点在x,y,z方向上的缩放。
这些就是最简单的变换矩阵,熟悉了这些,我们就又向前迈进了一步。
图形学应该是一个很有趣的东西,并非像很多学校和学生教授的的那种痛苦不堪的东西。其实道理非常简单,如果自己再具备一点编程知识,很容易就能做出自己的成像程序。
注:我把两篇文章放一块了,这样大家理解起来方便,呵呵
发表评论
-
AWAY3D 贴图DEMO
2011-05-14 23:16 0AWAY3D 贴图DEMO -
[转] AS3 制作3D位图方法
2011-05-04 00:34 1451http://bbs.9ria.com/viewthread. ... -
[转] MoleHill操作AGAL的Helper类之一
2011-04-29 01:46 1055本帖最后由 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 2053http://bbs.9ria.com/viewthread. ... -
[转] [Flash/Flex] 支持 Molehill版本的Flare3D 应用示范
2011-04-16 02:30 1228http://bbs.9ria.com/thread-7953 ... -
[转]自制flash3D变换类
2011-04-15 16:09 990http://hi.baidu.com/boycy/blog/ ... -
[转] [Flash/Flex] native3d flash 3d引擎发布molehill版
2011-04-13 22:46 1065http://bbs.9ria.com/viewth ... -
[转] [Flash/Flex] 轻量级flash3d引擎native3d rev19使用教程
2011-04-10 06:00 1075资讯类型: 原创 来 ... -
[转] 缠绕规则在drawpath中的应用
2011-04-10 05:40 1367使用as3的绘图API绘制填充区域时,经常会涉及到相交区域的颜 ... -
[转]2011RIA天地行主题之3D Flash3D引擎简介
2011-03-31 22:34 1783http://bbs.9ria.com/viewthread. ... -
[转]Flash Player 10' s new 3D effects(三)
2011-03-23 17:34 1562http://sjkgxf7191.iteye.com/blo ... -
[转]Flash Player 10' s new 3D effects(二)
2011-03-23 15:50 1512http://sjkgxf7191.iteye.com/blo ... -
[转]Flash Player 10' s new 3D effects(一)
2011-03-23 14:55 1334http://sjkgxf7191.iteye.com/ ... -
[转]使用Flare3D在FB中搭建第一个Molehill项目
2011-03-22 20:52 1927http://www.adobe.com/cn/devnet/ ... -
[转]M2D的介绍——针对Flash ‘Molehill’ API的GPU加速2D框架
2011-03-22 14:37 1722http://bbs.9ria.com/viewth ... -
[转]使用Away3D引擎的Flash3D推箱子游戏原型 - 最终版本
2011-03-18 22:06 1346http://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 1556http://code.google.com/p/jiglib ...
相关推荐
介绍了瞬变电磁法的基本原理,分析了传统的二维数据解释流程,提出了三维成像算法的基本步骤,根据井下三维全空间探测的特点,对瞬变电磁法测得的二维数据进行三维成像,并在北辛窑煤矿首采工作面回采前探放水中得以应用,...
共焦点显微术的三维成像原理(中文版)作者:顾敏
关于体数据以及信号处理等的一些基础知识,三维重建的一些前期储备知识
三维立体画正是利用三维成像原理原理,在水平方向上画成一系列重复的图案, 当我们调节视点,使这些图案在左右两只眼中形成的像重合时,就可以看到了立体的景象.
提出一种新型的采用天线阵模式的机载前视合成孔径雷达(SAR)系统,分析了其三维成像原理。根据前视SAR 的成像几何模型和回波信号特点给出了实现前视SAR三维成像的处理流程,详细推导了前视SAR的三维分辨率。模拟了X波段...
本文首先分析了几种真三维立体显示技术的成像原理,包括全息三维成像技术、静态体成 像技术、平移体扫描技术和旋转体扫描技术。然后从理论模型出发,采用 LED 为体素旋转屏幕, 构建了基于平面显示屏旋转的真三维...
相机成像原理,像素坐标到图像坐标,图像坐标到相机坐标,相机坐标到空间三维世界坐标的推导,仿真。
采用单点探测器扫描成像的方式, 根据同步辐射红外谱学显微共聚焦三维成像的原理及非线性特性, 建立了同步辐射红外谱学显微共聚焦三维成像模型; 根据该模型的特点建立测试样品的模型, 模拟了红外谱学共聚焦三维成像...
根据编码孔径成像的基本原理,提出了一种非相干可见光三维成像方法。这种两步成像方法的第一步采用空间位置编码的照相机阵列对物体拍照,在第二步中,首先将照相机阵列拍照得到的物体照片根据拍照时的位置关系合成为...
合成孔径雷达(Synthetic Aperture Radar ,简称SAR)是一种高分辨率成像雷达技术。它利用脉冲压缩技术获得高的距离向分辨率,利用合成孔径原理获得高的方位向分辨率,从而获得大面积高分辨率雷达图像。
从压缩感知的原理入手,阐述了基于压缩感知的三维物体成像方法。为解决压缩感知三维物体成像计算量大的问题,重点提出了一种三维信息计算的简单方法。...建立实际的三维成像系统,实验结果证明了这种方法的可行性。
多基线合成孔径雷达(SyntheticApertureRadar,SAR)通过在高度方向上的多次重复飞行形成了对目标观测的...根据多基线SAR三维成像的信号模型和基于谱估计的三维成像原理,引入MAPES算法对非均匀采样的目标高度向观测数据
基于高炉料线三维SAR成像的仿真和测试研究 ,李江莹,陈先中,为了探寻对高炉料面进行监测的有效手段,运用三维SAR成像原理对高炉料线进行了微波成像研究,详细阐述了三维SAR成像原理,并对成像
在直视合成孔径激光成像雷达(SAL)的基础上,提出了一种自干涉的产生三维成像的原理方法。首先对于交轨向正扫描和反扫描的柱面镜进行位置偏置,造成交轨向成像频谱的平移并产生相对线性相延,然后逐一对一对交轨向...
具体包括彩色条纹投影术的基本原理、彩色条纹调制和解调相关技术、三维成像系统的标定、以及未来的研究方向。接着给出几个利用彩色条纹投影术获取物体表面三维形貌和彩色纹理的实例。为彩色条纹投影术测量物体表面三...
简述激光三维成像技术的发展历程及其技术特点,介绍当前不同搭载平台的典型激光三维成像系统;重点在林业、数字城市、地形测绘、洪水制图、公路、管线与电力输送线路设计和维护、浅海海底地形测绘以及矿山采空区调查和...
主动式光学三维成像技术具有非接触、快速、精确等特点,其主要成像方法可分为三角形测量法(包括结构光法和相位莫尔法)、基于被动式的主动式成像法和飞行时间测量法三种。分别介绍了这些方法的基本原理和特点,并在最后...
三维成像技术已经在许多行业得到了广泛的应用。介绍了Inspeck公司的三维成像扫描仪,从三维成像原理、深度和颜色信息获取方面详细介绍了三维成像技术。
分析了扫描式、推帚式两种机载激光三维成像技术的基本原理,对两种技术的总体特点进行了比较。列出了当前典型的机载激光三维成像系统参量,对较先进的ALTM-1210,SHOALS-1000T,ASLRIS以及中国的“863推帚式”四个...