首页 > 代码库 > [原创]ActionScript3游戏中的图像编程(连载三十一)
[原创]ActionScript3游戏中的图像编程(连载三十一)
2.2.4 Photoshop转Flash的投影角度换算
继续往下看,Photoshop不透明度选项下面是投影角度,默认值是120°,而Flash里角度是45°,两者相差将近90°,投影角度却相近,为什么?让我们把Flash的投影滤镜也设置成120°。(图 2.20)
图 2.20 角度值等于120的Flash投影
投影跑左边去了,x方向与Photoshop里的投影位置截然相反。经观察,Flash投影的角度与ActionScript的坐标系完全一致,它等于当前方向与水平线的夹角,顺时针为正,逆时针为负。
我并非单从这两个角度的表现就得出了结论, 360度我都试验过了之后才归纳出来的,不过我不太可能把360个角度的结果都贴出来,否则100页都贴不完。读者可以自行尝试一番。
而Photoshop的角度逻辑稍显复杂,它不直接表示投影的位置,而是光照的角度,而且坐标系跟ActionScript的相反,逆时针为正,顺时针为负。而投影将落在与光照方向相反的位置上(根据光的直线传播原理得出,图 2.21),所以,投影方向与水平线的夹角等于(投影角度* (-1) + 180度 + 360度) % 360°。(+360°再取余的目的是保证角度数值在0~360的区间内)
图 2.21 光的直线传播与投影的形成原理
将120°代入上式,求得最终角度=(-120+180+360)%360=60°。
所以Flash应该将角度设置为60°才能保证效果与Photoshop的相吻合。(图 2.22)
图 2.22 角度值等于60的Flash投影
可见它们的实际角度仅相差15度,但这一微妙的差别,对美观的影响也不小,调成60度以后,由于投影和文字在y方向上的差距拉大了,因此视觉上会显得文字更凸出,立体感更强。
由于Photoshop有多种样式用于创建立体效果(比如投影,斜面浮雕,光泽等),它们最终输出的颜色均与灯光方向有关,所以Photoshop投影样式设置的右侧还有个“使用全局光”的复选框。当该框被勾上,这些样式就会共用同一个角度的光照(随便修改其中一个,其它的都会自动跟着调整过来),从而确保多个样式之间有更好的融合度。