鉴于五一长假前应该没时间大改了(兴趣与毕业,暂时还是毕业比较重要),先放出来跟大家分享下这半个月的努力成果,4月下旬开始抽晚上的时间把剩下的mootools源码解析补完。
先说下这个所谓的engine的特点
- 结构组织上是完全的OOP, 支持链式调用,总体上类似于mootools与prototype的风格 DEMO
- 核心Vector与Matrix(或继承类)实例做变换时 ,通过restrain参数 可以主动控制破坏性变换以及非破坏性的变换(即是否影响原实例)
- 支持层级的Scene 各个Scene的transform独立 只在渲染的时候计算它们的加权变换值(通过 getCurrentTransform())DEMO
- 简单的光源类可以与粒子类结合DEMO DEMO
- 支持事件侦听(目前写了个click事件,其他事件其实原理都是一致的,下次长假时会完备这一块),创建的shape只需要添加一个如onClick方法,即自动开启对其的click事件侦听,侦听范围精确到每一个面 DEMO(可以尝试拖动视角让前一个物体遮盖后一个,看点击是否正确,点击是真正的通过3D扫描线的方式计算,而不是简单在转换为二维图形之后判断)
- 支持操作非常简单的3D贝塞尔函数的绘制DEMO 拖动查看
- 真正的js 3d engine 前900行(一共1300) 只跟js语法以及纯粹的物理数学知识有关事实上可以很方便的通过继承前面创建的类来达到对普通dom的支持,而不仅仅局限于canvas,比如这个demo Demo临时凑数的,我承认 很丑
- 支持两种层级的扩展,功能上的通过register可以异步加载js文件注册新的实例方法(不建议注册在底层的如Vector中,就跟原生js中不应该动Object一样),类型上的可以直接通过继承来达到
- canvas render在绘图时的解析与渲染步骤独立,支持缓存解析后的图形.
有人可能会问有了THREE.js了 ,你写这个还有什么意义呢?
- 首先体积 m3d压缩后15k three.js 压缩后212k
- three.js的作者是大牛…但是代码真的很难读(有人看得懂不?),用也非常难用。
- 最重要的就是为了学习 并没有那么多因为所以 我当初就是准备用canvas展示我的课题的材料生长工艺才开始写的m3d 找自己专业跟自己兴趣的交叉点真的很难(我专业光电集成微纳与制造)
接下来的目标
- 扩展压缩后体积不超过20k
- 添加一个简单的TWEEN类,估计会直接扒了mootools的Fx基类简化一下
- 完善事件系统
下载