作业多得要命,想找时间学习flash都很难,想自己开发一个完整的flash3D引擎,但2个星期以来进展十分缓慢。
作为平面矢量图形界面环境,flash显然不具备直接部署3D应用的能力,所有关于3D的函数都需要用actionscript一行一行写出来,包括camera,视体裁减和贴图算法等,flash3D引擎的核心在于3部分:
1 贴图算法,flash现有as语言没有关于位图透视拉伸的函数,所以需要自己编写算法。我所采用的是细分表面的方法解决了flash中位图的透视拉伸问题。其关键思想来自于andre-michelle关于actionscript位图透视拉伸算法的描述( www.andre-michelle.com)
2 3D环境,简单的说,我采用了传统的空间向量法来计算每一个顶点的位置,虽然这样会有大量多余的数据,但把向量计算封装在矩阵里以后,代码会变得很直观清晰。构件一个完整的3D环境就需要把所有矩阵计算封装到一个个函数里面。而大概全部的矩阵计算公式有不下20种。这还不包括一些碰撞检测。
3 视体裁减 视觉体的裁减算法可以极大提高效率,超过屏幕和法线与视线夹角超过180度的平面可以省略。
这篇文章中的demo并不涉及视体裁减。
|