from: http://blog.csdn.net/liminxin272/article/details/6969759
Alternativa3D 8 基础理论
每一个3D引擎,都有自己的三维空间坐标系,Alternativa3D 采用跟 3ds Max 相同的坐标系,即右手坐标系:
1. 坐标轴方向
右手手背朝下,中指朝上,食指朝前,拇指朝右。
则 拇指 所指方向为 x轴 正方向,食指 所指方向为 y轴 正方向,中指 所指方向为 z轴 正方向。
2. 绕轴旋转方向
右手大拇指指向轴的正方向,四指握拳的方向就指该轴旋转正方向。
二、UV坐标系
1. 什么是uv坐标
将一个三维模型沿着表面剪开,展平为一张二维平面图。
此时,三维模型表面的每一个点,都可以在平面图上找到一个与之相对应的点。
即,三维模型表面上的每个三维点坐标(x, y, z)都有一个与之相对应的二维贴图坐标(u, v)。
2. Alternativa3D 中的 uv 坐标系
u 与 v 的取值范围都为 [0, 1],在 Alternativa3D 中,贴图的uv坐标为:
左上角(0, 0),左下角(0, 1),右上角(1, 0),右下角(1, 1),其它点的 uv 根据相对位置取 0 到 1 之间的值。
三、Alternativa3D 三维空间结构
构成 Alternativa3D 三维空间的基本要素有:三维根容器、摄像头、视窗、三维对象、三维对象的材质
三维舞台(Stage3D):3D舞台,奇妙的三维世界就在这里展示。
三维根容器(Object3D):Alternativa3D 构建的三维世界,其它由 Alternativa3D 创建的三维对象都要添加进来。
摄像头(Camera3D):三维世界中的眼睛,没有它我们啥也看不到。
视窗(View):摄像头所拍摄到的画面。
三维对象(Object3D):没有它,我们看啥?
材质(Material):人靠衣装,不可裸奔,没有材质的三维对象会被警察叔叔带走的。
Alternativa3D 8 基础概念
1. 3D对象
■ Object3D
Object3D 是所有3D对象的基类,也是最简单的3D对象,它定义了一个3D对象的基本属性和方法。
Object3D可以作为容器包含其它3D对象,类似于2D中的 DisplayObjectContainer。
所有的3D对象都继承自Object3D。3D对象大体上可区分为可视对象与不可视对象:
不可视对象
● Camera3D(3D摄像机)
● Light3D(3D灯光)
● AmbientLight(环境光)
● DirectionalLight(方向性光源)
● OmniLight(点光源)
● SpotLight(聚光灯)
● Joint(骨骼关节)
可视对象
● AxisAlignedSprite(单一轴向正对摄像机的平面对象)
● Sprite3D(所有轴向正对摄像机的平面对象)
● AnimSprite(通过不断更换材质形成动画的Sprite3D)
● Mesh(空间网格)
● Decal(图案)
● Plane(平面)
● Box(立方体)
● GeoSphere(几何球体)
● SkyBox(天空盒)
● Skin(骨骼动画)
● WireFrame(线框)
Alternativa3D 8 中的3D对象
■ Mesh
Mesh 可理解为空间网格,是展示几何体(Geometry)的地方,Geometry包含描述几何体的顶点和三角面信息。
几何体在Mesh中的显示形式为表面(Surface),表面是由一个序列的三角面构成,这些三角面通过Surface的材质进行显示。或许把Surface想象成皮肤更容易理解一些。
Mesh、Geometry、Surface三者的关系是:Geometry为Mesh提供了顶点和三角面信息,Mesh根据这些信息创建Surface来显示Geometry所描述的3D对象。
所有需要显示的空间几何体都继承自Mesh类,不论是内建的基本几何体,还是自定义几何体(代码创建或者外部导入模型)都是通过Mesh进行展示的。
Alternativa3D通过扩展Mesh类为我们提供了 Decal、Plane、Box、GeoSphere、SkyBox 等基本几何体
Surface
Surface 可理解为表面或者皮肤,它由一个序列的三角面组成,具有单独材质。
每个Mesh可分割为多个Surface,当需要为Mesh中的部分三角面赋予单独的材质时,可将序号连续的三角面创建为一个Surface。
例如,Mesh中有10个三角面,需要为三角面0、1、2、5、6赋予材质m0,其它的三角面赋予材质m1,那么可以将三角面分为[0,1,2]、 [3,4]、[5,6]、[7,8,9]四个序列,创建s0、s1、s2、s3四个Surface,其中s0、s2赋予材质m0,s1、s3赋予材质 m1。
■ Skin
简单点说,Skin 就是可带骨骼动画的Mesh。通过Joint绑定顶点连接成骨骼。
■ Joint
Joint 可理解为关节,是Skin的一部分,用于骨骼动画。
2. 材质
■ Material
材质是3D对象非常重要的一部分,没有材质的3D对象只是一堆描述几何体形状外观等信息的数据,什么也看不到。我们所能见到的那些奇妙的空间几何体都是通过材质才得以显现的,材质让虚拟的3D对象变得可见。
材质分为填充材质(FillMaterial)和贴图材质(TextureMaterial、ParserMaterial)。
Material 是所有材质的基类,定义了材质的基本属性和方法。
FillMaterial 是填充材质,以单一的颜色填充整个Surface。
TextureMaterial 是贴图材质,用位图填充Surface。要正确表现贴图效果,几何体顶点UV坐标的设置十分重要。
ParserMaterial 用以储存外部加载的*.DAE或*.A3D模型的材质信息,需要通过TextureLoader(贴图加载器)来加载外部贴图。
LightMapMaterial(灯光贴图材质)、StandardMaterial(标准材质)、VertexLightTextureMaterial(动态灯光贴图材质)都是继承自TextureMaterial。
StandardMaterial 支持漫反射贴图、法线贴图、高光贴图、光泽度贴图和光泽度、高光强度设置。
LightMapMaterial 支持灯光贴图。
VertexLightTextureMaterial 支持动态灯光。
填充材质
● FillMaterial(填充材质)
贴图材质
● ParserMaterial(解析材质)
● TextureMaterial(贴图材质)
● StandardMaterial(标准材质)
● LightMapMaterial(灯光贴图材质)
● VertexLightTextureMaterial(动态灯光贴图材质)
Alternativa3D 8 中的材质
■ Resource
Resource 是GPU资源的基类,定义了资源上传与释放的相关属性和方法。
GPU资源分为2种:几何体资源和贴图资源。
几何体资源使用顶点缓存(VertexBufferResource)和索引缓存(IndexBufferResource)进行上传。
贴图资源包括位图贴图资源(BitmapTextureResource)和压缩贴图资源(ATFTextureResource)。
几何体资源
● Geometry(几何体资源)
贴图资源
● TextureResource(贴图资源)
● ATFTextureResource(压缩贴图资源)
● BitmapTextureResource(位图贴图资源)
● ExternalTextureResource(外部贴图资源)
Alternativa3D 8 中的资源
Geometry
Geometry 储存了3D对象的几何体数据,记录每个顶点的信息,这些信息将被划分为多个顶点缓存上传到GPU。
顶点信息包括3D坐标(POSITION)、贴图坐标(TEXCOORDS)、法线(NORMAL)、切线(TANGENT4)、骨骼权重(JOINTS)等。
■ TextureResource
TextureResource 是贴图资源的基类。
贴图资源包括位图贴图资源(BitmapTextureResource)和压缩贴图资源(ATFTextureResource)。
位图贴图资源以位图数据(BitmapData)上传,ATF压缩贴图资源以二进制数据(ByteArray)上传。
ExternalTextureResource 用以加载外部贴图资源,结合TextureLoader(贴图加载器)可以比较方便地加载外部模型的贴图。
4. 外部模型
Alternativa3D支持外部模型的加载与解析,支持的模型文件格式有*.DAE、*.A3D、*.3DS。
*.DAE是基于XML的Collada模型文件,*.A3D为Alternativa3D专用模型文件,*.3DS是3DS Max软件使用的格式。
Alternativa3D官方提供了相关的3DS Max插件,用以导出*.DAE和*.A3D格式的模型。
通过模型解析器,可以十分方便地解析加载的模型,获取模型中的几何体对象、贴图材质、动画、灯光等信息。
ParserCollada:*.DAE格式模型解析器,可获取模型中的几何体对象、贴图材质、动画、灯光。
ParserA3D:*.A3D格式模型解析器,可获取模型中的几何体对象、贴图材质。
Parser3DS:*.3DS格式模型解析器,可获取模型中的几何体对象、贴图材质。
此外,Alternativa3D还给出了ExporterA3D类,用以将3D对象导出保存为*.A3D格式的模型文件。