加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

actionscript-3 – ActionScript 3中的逐渐减少效果

发布时间:2020-12-15 07:23:02 所属栏目:百科 来源:网络整理
导读:我需要在影片剪辑上实现逐渐变细的效果,同时保持它与某些引导线对齐.例如,如果我的影片剪辑看起来像这样 转型之后它应该是这样的 这样影片剪辑的形状保持对称,高度不会改变.顶边的长度保持不变.也可以很好地控制两侧的角度,但首先我希望它像上面的图像一样45
我需要在影片剪辑上实现逐渐变细的效果,同时保持它与某些引导线对齐.例如,如果我的影片剪辑看起来像这样

转型之后它应该是这样的

这样影片剪辑的形状保持对称,高度不会改变.顶边的长度保持不变.也可以很好地控制两侧的角度,但首先我希望它像上面的图像一样45度.

到目前为止我尝试过的是这个

var m3D:Matrix3D = new Matrix3D();
m3D.appendRotation(-45,Vector3D.X_AXIS);
myMC.transform.matrix3D = m3D;

我玩了很长时间,来回添加翻译,但没有结果.这也不起作用

var mcX:Number = myMC.x;
var mcY:Number = myMC.y;
var mcW:Number = myMC.width;
var mcH:Number = myMC.height;
m3D.appendTranslation(-(mcX + mcW/2),-mcY,0);
m3D.appendRotation(-45,Vector3D.X_AXIS);
m3D.appendTranslation(mcX + mcW/2,mcY,0);

我确实找到了DistortImage类,但许可证是用于非商业用途的,它似乎不适用于本机的电影剪辑. similar class看起来很有希望,但与源头的联系已经死亡.

解决方法

Flash使用简单的平截头体模型,其具有视点,投影平面和焦距,即从视点到投影平面的距离.

还有fieldOfView但它应该没有重要意义,因为它的含义似乎被focalLength覆盖.

矩形图形块位于投影平面上,使其顶边的中点位于投影中心.为了达到该效果,矩形旋转一定角度.

问题是,焦距和角度的值应该是多少,以便新的高度和新的底部宽度满足效果所需的某些给定值?或者以数学方式说:

鉴于:

>焦距的平截头体
>一个宽度和高度的矩形,固定在投影平面(z = 0)上,使矩形顶边的中点位于平截头体的投影中心
>在旋转并投影到投影平面上之后,矩形所需的新高度和新底部宽度

找到未知物并将其应用于透视投影,以获得所需的新高度和新的底部宽度:

>截锥体的焦距
>旋转角度

拿起一支铅笔,一张纸和Maple(数学软件)并自己解决.

var newBottomWidth:Number = 1000; // or any other value
var newHeight:Number = myMC.height; // or any other value

// the computational part
var oldWidth:Number = myMC.width;
var oldHeight:Number = myMC.height;
var eqRoot:Number = -Math.sqrt(newBottomWidth*newBottomWidth*oldHeight*oldHeight - newHeight*newHeight*oldWidth*oldWidth);
var focalLength:Number = Math.abs(eqRoot/(newBottomWidth - oldWidth));
var angle:Number = Math.atan2(eqRoot/(newBottomWidth*oldHeight),newHeight*oldWidth/(newBottomWidth*oldHeight));
var angleDeg:Number = angle*180/Math.PI;

myMC.parent.transform.perspectiveProjection = new PerspectiveProjection();
myMC.parent.transform.perspectiveProjection.projectionCenter = new Point(myMC.x + myMC.width/2,myMC.y);
myMC.parent.transform.perspectiveProjection.focalLength = focalLength;

var m3D:Matrix3D = new Matrix3D();
m3D.appendRotation(angleDeg,Vector3D.X_AXIS);
myMC.transform.matrix3D = m3D;

更多信息:

> PerspectiveProjection – AS3
> Projecting 3D objects onto a 2D view

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读