![]() |
Alchemy3D - Flash 3D Engine |
Index | Contact Us | GuestBook | Search | Tags | Rss |
| 专注基于web 3D engine的开发和研究 |
![]() |


开发过程遇到重重困难,本身缺乏硬件支持的flash,让渲染速度受到严重限制.引擎的光栅化函数没有用到浮点数,用速度更快的定点数取而代之.但却换来溢出的结果.两周时间,都在测试纹理坐标的溢出问题.但始终无法解决根本问题.现在只能将就一下,限制纹理坐标的最大范围来换取速度.
引擎目前只支持warp寻址模式,放出两个demo,稍后会加上mirror等寻址模式.
Demo1:alchemy3d.cn/p/alchemy3d/texTransform/Test8X.html
Demo2:alchemy3d.cn/p/alchemy3d/texTransform/flex_alchemy3d.html
相信大部分引擎开发者也碰到这样一个大问题——使用了alpha混合后出现某些面片的混合颜色不正确,请先让我解释一下问题的原因。
当绘制一个3D场景时, 对图形进行深度排序是非常重要的, 这样离镜头近才画在远处物体的前面. 我们不会希望看到远处的山把近在眼前的建筑给挡住了!
如今有如下排序方法得到了广泛的应用:
深度缓冲 (也叫做 z-buffering)
画家算法
不幸的是, 每种都有其局限性. 为了达到好的结果, 大多数引擎是把三种方法结合起来使用的.而这里只讨论本引擎使用的深度缓冲.
Alchemy3D地形引擎并不是采用元素图元,而是单个三角形组成网格的形式,做到更精确化的地形坡度。
我们知道 ,每个三角形决定一个面,而每个面的多项式是:
ax+by+cz+d=0
其中a,b,c是平面的法向量x,y,z,d为平面的法向量与三角形第一个向量的点积的负数形式.
我们的目的就是求出a,b,c,d,然后把当前x,z代入多项式即可求出高度y.
而要求a,b,c,d关键需要知道平面的法向量,但是三角形我们已经知道,由此我们就很轻易得得到了y值.
查看全文 | 发表评论Alchemy3D是一款基于Adobe Alchemy技术的Flash 3D引擎,以下是其基本的开发环境:
一、安装Cygwin
到http://www.cygwin.cn/site/install/下载Cygwin
选择安装以下三个包
二、下载Alchemy
到http://labs.adobe.com/downloads/alchemy.html下载Alchemy Toolkit
查看全文 | 发表评论
感谢怀念从前在百忙中也写好了MD2的加载器,而本人也几乎在同一个晚上测试完成了3DS的加载器。现在Alchemy3D正式支持此两种格式的模型导入和渲染。当然,这只是一个测试,具体到模型纹理的加载,基于面的光照颜色加载还没有完成,因此以下两个Demo也只能以线框模式来渲染了。
我们一直在努力,不久的将来,一个功能完善、高效的基于Alchemy的引擎将会和各位Flash 3D爱好者见面。
Demo1 : www.alchemy3d.cn/p/alchemy3d/external/Test3DS.html
Demo2 : www.alchemy3d.cn/p/alchemy3d/external/TestMD2.html
Alchemy3D引擎暂时支持了11种光照和纹理混合渲染的模式。先发一个demo,下一篇文章将会详细讲解不同渲染模式下的分别,以及在何种情况下该如使用何种渲染模式。
Demo : alchemy3d.cn/p/alchemy3d/textured/TestRenderMode.html
查看全文 | 发表评论
由于引擎在光栅化阶段遇到一个严重问题-当多边形穿越近截面时,特别是当1/z < 0的时候,出现无法估计的错误(可以想象一下当物体在你眼睛后面你还可以看到它的情况),在世界空间内进行了多边形的裁剪工作。最初打算在光栅化阶段进行裁剪,但难以实现,最大的困难在于1/z的函数是双曲线,这使得1/z < 0的时候出现插值错误。
目前的裁剪算法还不成熟,主要表现在裁剪后新创建的多边形法向量不正确,使得光照情况下出现错误。先发一个不太成熟的demo。
Demo : www.alchemy3d.cn/p/alchemy3d/frustumClipping/test.html
查看全文 | 发表评论