zerO

纪念我所怀念的一切.

« zerO3d第一个Demo放出zerO3d v1.1 发布! »
2009-2-18 13:51:53 | 发布:linfuqing | 分类:zerO3d | 评论:0 | 引用:0 | 浏览:

关于3D

有好多天没更新了... 因为最近正在对引擎做比较全面的修改.

为表歉意,下面介绍一些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世界中...(待续)

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最近发表

最新评论及回复

友情链接

[Top] Powered By Z-Blog 1.8 Arwen Build 81206. Theme FormerDays Design By haphic

[-Do U rmAmb al _LEAVEs_ Missing UnderTheTree-]
All by 怀念从前.