photoshop

as real as it gets... on Flickr - Photo Sharing!. Awsome!!!

view Barcinski & Jeanjean Website (Part1)

接下来进入 Papervision3D 部分。他们开发了一个 AnaglyphView 类用于绘制立体效果。这个类包含了两个 Viewport3D(Viewport3D 是 Papervision3D 中绘制所有 DisplayObject3D 的对象,可以说是主渲染层,它是一个 Sprite 子类)。这两个对象分别用于渲染左右摄像机中看到的图像。anaglyphview

那是否也应该包含两个摄像机(Camera3D对象)呢?答案是不用,既然在成像原理中描述的摄像机位置是并排的,那么在程序中,只需要一个真正的 Camera3D,然后在每帧更新时,向左偏移渲一下,再向右偏移渲一下。如此得到的两个 Viewport3D 再用 ColorTransform 分别抽出需要的颜色通道,最后用 Screen 模式叠加在一起。

视频背景是分别加到两个 Viewport3D 的显示层级里的,对 Viewport3D 的颜色变换和叠加操作也能对其产生影响。

请注意:渲染的次数实际上增加了一倍,再加上层叠加运算,这种效果其实相当的占资源。所以不能用太复杂的3D对象,他们还将在 Blog 上继续分享优化方面的经验,一起期待吧。

在网站优化上,他们也有非常酷的Tips。注意到这样一个细节:主界面上环绕两人的纸是有前后遮挡关系的。虽然知道人像是抠像出来的,但是如何和 Papervision3D 中的对象产生遮挡呢?这是一个很有技术难度的问题。一般我们肯定会想视频要分两层,前景人像带通道。但是这是高分辨率的视频,带通道的话相当占资源。

点子来了:视频不能分层,那就把前景人像用矢量勾出来做遮罩。其实我们通常在做 media 遇到文件量限制的时候也用这种做法,关键是能减少文件量。在这里还能起到减去视频通道叠加造成的CPU运算增加的好处。方法是有了,可是144张图像要挖出来也是要吐口小血的。聪明人自然有聪明的做法:Flash 不是有 Trace Bitmap 自动转矢量的功能吗,只是勾个黑白图还是相当胜任的。他们还开发一个jsfl命令自动操作。点两下鼠标,喝两口咖啡的时间就可以搞定了,轻松惬意。遮罩问题解决,还有个遮挡问题。方法是把遮罩mc加入 Papervision3D 层级,设置它的z属性。前后关系就算出来了。接下来注意设置层叠加方式为 Erase,意思就是擦除,很明显了吧,遮挡就出来了。Erase 和 Alpha 叠加模式很有用,大家可以到 Flash 里面去试一下。

下一篇我将和大家分享一下该网站在文件量优化上的神来之笔。

Barcinski & Jeanjean Website (Part3)

HIDIHO!做了一个数字类型和循环运算的效率测试,大家可以自己测试一下结果。基本上for和while效率差不多;++和--运算比+=和-=快;--又比++快。比较倒的是int类型和uint类型在某些计算上居然比Number类型差那么多。

就我个人习惯来说,比较常用for和++。以后出于优化性能考虑,尽量多用--运算符。

此外,合理运用一些二进制运算符也能大幅改进一些计算效率,想成为ActionScript Guru,怎么也得学两手伴身,快到这里这里学习一下吧。

其他参考:ActionScript 3 optimization techniques

update:使用 a ? b : c 的判断运算也比 if 稍微快上一些(tested by Barncar.com

Powered by KevinCao.com ©2010 | Platform: WordPress | Theme: Motion
kevincao.com