自由行走的花

网站设计,flash网站设计与动画制作,web,as3

2010-12-31 14:29

【转】Flash Alternativa 3D引擎-基础理论

《本文转载自:http://www.zcool.com.cn/article/ZMTEwMzY=.html》敬请阅读,不懂的地方可以在此交流!

一. Alternativa 三维坐标系

在任何一个三维引擎中,都有自己的系统坐标系,对于Alternativa 3D也不例外。Alternativa 3D采用的是右手坐标系,绕轴旋转准侧也是采用 右手定则。(以后将Alternativa 3D 简写为A3D)

坐标系:

A3D------>          Flash 3D------>

与Flash中的坐标系的对比:

两者X轴的方向一致,为水平向右;

Y轴与Z轴截然不同;

两者都采用右手坐标系。

对于绕轴的旋转正方向:  

分开来讲:

绕X轴旋转-->,绕Y轴旋转-->,绕Z轴旋转-->

也就是说:用右手大拇指指向轴的方向,四指握拳的方向就只该轴旋转正方向。这也就是右手定则。

二. A3D 三维结构基础(重点)

A3D 的三维结构如上图。在A3D中几个基础的要素为 Scene3D,View,Camera3D,Object3D与Material。

Scene3D:
三维场景。在A3D中,Scene3D是一个基础的3D要素,也是一个三维模型存储的空间,用来储存三维模型,完成BSP树的建立,渲染机制等工作。但要
注意的是,Scene3D并不是一个Object3D显示对象,也就是说它并不继承自Object3D,只是Scene3D最重要的一个公共属性root
才是用来存放其他显示元素的Object3D对象。换句话说,Scene3D.root
才是通常意义上的三维场景。Scene3D不但拥有这个三维场景显示对象,同时还完成一些BSP树搭建,渲染,计算等工作。若想要你的三维模型
(Object3D对象)显示在场景中,就必需首先将这个模型放在场景中,即调用方
法:Scene3D.root.addChild(Object3D);另外还要讲Camera3D对象也放在同一个场景
中:Scene3D.root.addChild(Camera3D)。这里只给大家一个基本的原理与印象,后面我们将会实际的操作。

想要了解Scene3D的渲染机制与BSP树的建立,估计又要花很长时间,但是之一部分对于工程师而言,没有很大的了解意义。如果感兴趣的朋友可以去Alternativa3D的官方网站查找相关解释性的说明。

Camera3D:
维摄像机。对于利用Camera来完成三维动画的想法,我一直觉得很是高明。想象一下,我们的眼睛就是摄像机。如果我们想观察一个物体的各个侧面,我么会
拿起手转动这个物体,然后观察。我们为何不换一种思路,把物体放在那,而眼镜(自己的头)绕着物体转呢?这也就是Camera3D的作用。不但我们可以控
制场景中物体的任意动画,我们也可以控制摄像机的不同位置与角度。想想CS,不就像是自己拿着摄像机在看一个三维世界吗?这样的设计更合理,也更具与人性
的特点。那如何来控制摄像机呢?在A3D中也为我们设计了一下特定的类,后面的教程中将会给大家介绍。同时,在3D中,摄像机必须与View(视窗),相
结合使用。那什么又是视窗呢?

View:视窗。我们来想想一下,你面前有个扇门,门上有一个正方形小
孔,你想通过小孔看看门后房子里是什么东西,而你和们之间有一段距离,就如上面的那张图。为了看得更全,你可以移动自己的眼镜(Camera3D),但
是,你能看见的范围却只有那个控那么大。这就是视窗View与摄像机Camera3D之间的关系。视窗是用来观察场景(Scene3D.root)空间的
一个窗口,所以视窗不用放在场景之中。

Object3D:三维对象。A3D中显示对象不再是Flash
中的DisplayObject,而是Object3D。不过Object3D与DisplayObject的属性差不多。可想而知,A3D中的所有显示
对象都继承自Object3D这个类。A3D同时也很周到的为我们建立了一些基础的三维模型,我们可以直接用,例如立方体Box,球体Sphere,圆柱
体Cone,平面Plan等。这些类都是继承自Object3D的。

Material:材质。用
Object3D建立的显示对象往往是看不见的,应为我们还要给每个三维对象贴一层皮,这层皮就是Materal,即材质。在A3D中为大家建立了一些基
本的材质类,例如纯色,线框等,另外还有一些高级的材质,如电影剪辑,外载贴图等,用户也可以建立自己的材质。在A3D中同时支持带有UV机制的外载贴
图。这使得我们对三维模型的建立变得更加简单,那为什么更加简单呢?这就必须要了解什么是UV。

*UV坐标

详细解释,请参见维基百科(英文):http://en.wikipedia.org/wiki/UV_mapping

简单地说,UV展开就是讲一个三维模型的表面(三维坐标)展开成一个二维坐标(U坐标与V坐标)下的平面图。例如上面的例子,我们可以从三维;模型得到他
的UV图,并把它放在一个矩形中贴图(Texture贴图)。反过来,我们如果知道一个三维模型,还知道他的带有UV属性的贴图(Texture),我们
就可以重建这个三维模型。

三. 小结

     

在这里写小结,说明这一章相当的关键。这是理解A3D与应用A3D的基础,对于没有接触过三维引擎的同学而言,这也是一个从整体上认识三维引擎结构的基
础。希望大家认真的理解,特别是我那个小孔观物的例子。现在只要记住这个例子中观察事物的原理与方法就可以了,后面我们将会以实例来说明,那是大家会更深
的理解的。

Flash Alternativa 3D引擎-基础理论的更多相关文章

  1. 关于如何学好游戏3D引擎编程的一些经验[转]

    此篇文章献给那些为了游戏编程不怕困难的热血青年,它的神秘要我永远不间断的去挑战自我,超越自我,这样才能攀登到游戏技术的最高峰 ——阿哲VS自己 QQ79134054多希望大家一起交流与沟通 这篇文章是 ...

  2. 万圣节福利:红孩儿3D引擎开发课程《3ds max导出插件初步》

    ds max文件夹,插件文件夹以及3ds max的可执行程序文件夹: 位的,这里要改成x64,否则启动程序后3ds max会提示"不是有效的win32程序"之类的对话框. 然后要将 ...

  3. 来手撸一个小小小小小"3D引擎"

    开始的唠叨 说是3D引擎确实有点过于博眼球了,其实就是实现了一个透视投影,当然也不是那么简单的. 此篇文章是纯粹给小白看的 高手请勿喷 .也称之为小向带你图形学入门基础 . 哇哈哈哈哈 一说到做一个3 ...

  4. 如何学好游戏3D引擎编程

    注:本文是网上看到的一篇文章,感觉写的很好,因此收藏了下来 <如何学好游戏3D引擎编程>此篇文章献给那些为了游戏编程不怕困难的热血青年,它的神秘要我永远不间断的去挑战自我,超越自我,这样才 ...

  5. 转:典型开源3D引擎分类比较

    常见的3D引擎有:Unreal.Quake.Lithtech.OGRE.Nebula.Irrlicht.Truevision3D... 其中开源免费的有:OGRE.irrlicht.fly3d.Neo ...

  6. 转:开源3D引擎介绍

    Delta3D:Delta3D是一个功能齐全的游戏引擎,可用于游戏,模拟或其他图形应用.其模块化设计集成了其他的开源项目,如‘开放场景图’,‘开放动力学引擎’,‘人物动画库’和‘OpenAL’ .De ...

  7. 3D引擎Axiom的选择与学习.

    经过前面针对OpenGL的一些特性的学习,越发觉得要学的更多,相关如LOD,各种阴影实现,场景管理如BSP与Octree等以及还没听过的各种的实现.有感自学的进度太慢,并且在做一些小DEMO时,心中不 ...

  8. 支持Android 的几款开源3D引擎调研

    最近由于工作需要,对支持Android的一些开源3D引擎做了调研,结果如下: 1.Ogre 十分强大的一款3D引擎,号称工业级标准的开源项目,不仅可以用于游戏,还可以用于其他和3D相关的软件.大多数该 ...

  9. (转)关于如何学好游戏3D引擎编程的一些经验

    此篇文章献给那些为了游戏编程不怕困难的热血青年,它的神秘要我永远不间断的去挑战自我,超越自我,这样才能攀登到游戏技术的最高峰 ——阿哲VS自己 QQ79134054多希望大家一起交流与沟通 这篇文章是 ...

随机推荐

  1. python----常见练习题

    1. 冒泡排序 def bubble_sort(lists): len_list=len(lists) for i in range(len_list): for j in range(len_lis ...

  2. 使用Notepad++编译运行C/C++/Python程序

    对我来说,比较常用的是C/C++/Python. 使用Notepad++编译运行单个源文件的C/C++/Python,比使用复杂的IDE更加快捷. 想要让Notepad++能够做到编译运行C/C++/ ...

  3. mysql 联合表(federated)及视图

    1)验证环境 源库:192.168.8.75 centos 7.5 mysql8.3 目标库:192.168.8.68 redhat 6.8 mysql5.7 2)登录源库并创建源表 $ mysql ...

  4. Python2.X和Python3.X中Tkinter模块的文件对话框、下拉列表的不同

    Python2.X和Python3.X文件对话框.下拉列表的不同 今天初次使用Python Tkinter来做了个简单的记事本程序.发现Python2.x和Python3.x的Tkinter模块的好多 ...

  5. Mysql 了解changeBuffer 与 purge 调优

    需要删除.新增记录或更新一个数据页时,如果数据页在内存中就直接更新,而如果这个数据页还没有在内存中的话,在不影响数据一致性的前提下,InooDB 会将这些更新操作缓存在 change buffer中, ...

  6. Linux SSH登录服务器报ECDSA host key "ip地址" for has changed and you have requested strict checking错误

    错误:ECDSA host key "ip地址" for  has changed and you have requested strict checking. 解决方案:在终端 ...

  7. spring的bean创建过程

    Spring的bean创建过程 步骤 执行过程 描述 1 ThreadLocal.set bean创建之前将beanName的一些属性放进ThreadLocal,避免多线程创建bean导致问题,并发创 ...

  8. LeetCode 145 二叉树的后序遍历(非递归)

    题目: 给定一个二叉树,返回它的 后序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 解题思路: 1 ...

  9. python ---split()函数讲解

    python ---split()函数讲解 split中文翻译为分裂. 在python用于分割字符串使用. split()就是将一个字符串分裂成多个字符串组成的列表. split()可以传入参数,也可 ...

  10. 微信浏览器安卓手机video浮在最上层问题

    微信浏览器安卓手机video浮在最上层问题 //x5-video-player-type="h5" x5-video-player-fullscreen="true&qu ...