在三维空间制作的文本控件,本来是与空间物体对齐的,结果客户又要说都要朝向摄像机方向,就是都是面向画面,这个在官方文档里面有一段说明,我引用一下:
toWorld(point, t=time)After Effects 中的表达式语言 (adobe.com) Dan Ebberts's Expressioneering Design Guide
返回类型:数组 [2 或 3]。
参数类型: point 是数组 [2 或 3], t 是数值。
将点从图层空间变换到与视角无关的世界空间。示例:
toWorld.effect("Bulge")("Bulge Center")
Dan Ebberts 在其 MotionScript 网站上提供了一个使用 toWorld 方法仅沿一个轴自动定向图层的表达式。例如,这可用于在保持垂直时让字符从一侧移到另一侧以跟随摄像机。
delta = toWorld(anchorPoint) - thisComp.activeCamera.toWorld([0,0,0]);
radiansToDegrees(Math.atan2(delta[0],delta[2]))
将上面这段代码贴到物体的 Y 轴,你会发现它根本不好使,正确的代码应该是下面这样子:
delta = toWorld(thisComp.activeCamera.pointOfInterest) - toWorld(thisComp.activeCamera.position));
radiansToDegrees(Math.atan2(delta[0],delta[2]))
正常情况下,在 javascript 中,数组不能直接使用加减乘除运算符,但是贴心的 AE 允许这样做,他会把上面这个运算自动转化为 AE 内置的专有矢量运算,它等效于下面的代码:
delta = sub(toWorld(thisComp.activeCamera.pointOfInterest), toWorld(thisComp.activeCamera.position));
radiansToDegrees(Math.atan2(delta[0],delta[2]))
具体要使用那种方式,随便!