【发布时间】:2011-01-12 03:39:23
【问题描述】:
我有一系列包含位图和文本的影片剪辑。 应用一些 3d 变换并在 3d 空间中移动后,我的文本和位图略微模糊。这是在我重置所有 3d 坐标之后(即 z=0,rotationX=0,rotationY=0) 有人遇到过这种情况么?有没有办法让我恢复清晰的文本和位图?
【问题讨论】:
标签: actionscript-3 bitmap flash-cs4
我有一系列包含位图和文本的影片剪辑。 应用一些 3d 变换并在 3d 空间中移动后,我的文本和位图略微模糊。这是在我重置所有 3d 坐标之后(即 z=0,rotationX=0,rotationY=0) 有人遇到过这种情况么?有没有办法让我恢复清晰的文本和位图?
【问题讨论】:
标签: actionscript-3 bitmap flash-cs4
查找有关 3d 问题的另一篇文章并找到了解决方案。 您需要通过应用新的 transfrom.matrix 来删除所有 3d 转换
var tempMatrix:Matrix = new Matrix(); this.transform.matrix = tempMatrix;
【讨论】:
您需要确保在已应用 3D 转换的任何对象上将 matrix3D 属性设置为 null。
【讨论】:
这是一个非常有趣的错误。
出现的模糊实际上是不适当的抗锯齿或平滑处理,通常通过沿边缘用精细颜色渲染字体来解决。在这种情况下,它实际上是由 3D 变换引起的,可以通过取消动画后的 matrix3D 来解决:
myTextContainer.transform.matrix3D = null;
你也可以写:
myTextContainer.transform.matrix = new Matrix();
但使用这种方法,您必须导入 flash.geom.Matrix。
这两个选项也会将x 和y 坐标以及动画显示对象的其他重要设置重置为零,因此您还必须将这些值分配给变量并在之后重新应用它们使变换矩阵无效。
似乎一旦字体被转换,它就会失去这种精细的颜色着色。未转换的字体具有这些颜色细节,而转换的字体则完全不饱和。
附加的是 12 点字体的放大细节,显示了这种颜色细节的损失。顶部字符串没有 3D 转换,而底部字符串通过 rotationY 动画到舞台上。
这是饱和度为 90% 以更清晰地显示颜色的同一图像:
这些颜色细节在灰色文本上更容易看到。
我相信自 Flash Player 9 / AVM2 首次引入以来就一直存在此错误。此外,在早期版本的 Flash 播放器中,正确渲染字体周围的精细颜色细节更加饱和,在我看来,这使字体看起来更好 - 尽管与我不同的非完美主义者认为差异可以忽略不计。
【讨论】:
更好的答案是使用此修复程序。这是我一直用的。
/**
* Fixes the slight distortion that occurs when an object has a 3D transform associated with it.
* @param di:DisplayObject The DisplayOjbect to fix.
*/
public function fix3DBlur(di:DisplayObject):void {
di.scaleX = di.width / (di.width - 1);
di.scaleY = di.height / (di.height - 1);
}
这个函数设置了一个稍微偏移的 scaleX 和 scaleY。这看起来很奇怪,但是当您使用任何 3d 属性对对象进行 3d 调整时,它们可以防止它看起来模糊。您可以随时移除 3DTransform,但有时您需要将其保留在原位。
我将此函数放在我拥有的 Utilities3D 类中。
【讨论】: