有好多天没更新了... 因为最近正在对引擎做比较全面的修改.
为表歉意,下面介绍一些3D的原理:
可以先看看这篇文章:http://www.tjbhxs.com/blog/article.asp?id=39
其实上面的文章已经将3D在AS3上实现的方法说明得比较清楚,略过向量,矩阵,四元数不提(因为相关资料太多了),下面我要说的是一些比较有趣的(可能有少许复杂,但我相信大家都可以很快理解的)...
______________________光______________________
要了解虚拟3D里光的组成,我们先来看看物理上的光.
先从简单的说.
在真实世界中,光(先假设是白色的)照射在不规则的物体上,会形成明暗不一的景象.这里有三个因素,一个是物体各个面的慢反射因素不同,另一个是物体各面与光线方向的夹角不同.再一个是物体表面据光源的远近不同.
虚拟3D世界物体的面通常会由贴片(patch),网格(mesh),曲面(nurb)和复杂的多边形构建而成,然而这些东西最终都会简化成一系列的三角形.所以虚拟3D世界通常先通过计算三角形的法线(垂直三角形的线段)与光所在向量所成的角度来判断最简单光反射.像这样:
lightFactor = Vector3D.angleBetween( triangle.nomal,light.position );
然后再乘上光的强度:
lightFactor *= light.brightness;
需要的话再乘上面的慢反射系数:
lightFactor * = k;
好,下面我们让三角形(几何体的面)发生明暗变化:
//先把颜色分出来
red = color >> 16;
green = color >> 8 & 0xff;
blue = color &0xff;
//乘上光的强度
red *= lightFactor;
green *= lightFactor;
blue *= lightFactor;
adjustedColor = red << 16 | green <<8 | blue;
以上是最基本的.其实大体上光可以划分为环境光(接近以上说的),定向光源(无距离光,平行光线),点光源(光线强度随距离变化,但各方向均衡),聚集光源(各方向不均衡光线强度随距离变化光源),再细致些的还有颜色光(光强度后再乘上RGB).纹理光(几何体每个顶点包含颜色信息,然后线性放射)等,如果你觉得很有趣,可以继续深入专研.
_________________________________边界体___________________________
在虚拟3D世界中...(待续)