【问题标题】:Using a 4x4 3DMatrix in AS3 to skew images在 AS3 中使用 4x4 3DMatrix 倾斜图像
【发布时间】:2012-06-30 13:21:30
【问题描述】:

我有一个 AS3 位图图像,我想像这样倾斜:

我只想歪斜图像的底部,而不理会顶部。根据我迄今为止所做的研究,看起来我想使用 Matrix3D 类,但我不太确定如何有效地实现它。

感谢下面的回答,这篇文章是了解具有 3x3 矩阵的 Matrix3D 类的绝佳资源: http://www.senocular.com/flash/tutorials/transformmatrix/ 然而,尽管该教程很棒,但它并没有提供扭曲上述图像的能力。我正在寻找的是关于如何使用 4x4 矩阵的类似教程。我只想知道将数字放在矩阵中的哪个位置,我应该能够弄清楚其他所有内容。

这里有一些示例代码,说明我的用途:

var tempLoader:Loader=new Loader();
var tempBitmap:Bitmap;
var fattenTheBottom:Number;
tempLoader.load(new URLRequest("image.png"));
tempLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,castBitmap);
function castBitmap(e:Event):void
{
    tempLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE,castBitmap);
    tempBitmap = Bitmap(tempLoader.content);
    // Make the image into a trapezoid here using fattenTheBottom
    addChild(tempBitmap);
}

任何建议将不胜感激!

【问题讨论】:

  • 也许使用 3D 旋转使底部更靠近观察者会更容易?不确定 3D 旋转工具是否带有等效的 AS3,但如果没有,您可以尝试实现基本的 3D 引擎。
  • 您希望能够控制什么样的约束,即您是否关心能够显式定义梯形底部的宽度。如果不像 Marty 建议的那样,您应该能够只使用rotationX help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/… 否则我认为使用 3DMatrix 会起作用 help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/… translate 围绕 X translate 旋转然后 tempBitmap.transform.matrix3D = your3DMatrix。
  • 如果您关心对位图大小的任何约束的严格控制,这些约束需要更精确而不是目测,这可能需要更多的数学运算。
  • 这个问题被问了一遍又一遍。 stackoverflow.com/questions/772822/…
  • 这些很好,但没有一个解释如何使用 4x4 矩阵。我发现的所有研究都导致了如何使用 3x3 矩阵,它没有我正在寻找的倾斜功能。

标签: actionscript-3 flash flash-cs5


【解决方案1】:

如果您想快速使用 Matrix3D,以下是您应该使用的值类型的示例:

var m3d:Matrix3D = new Matrix3D(Vector.<Number>([
    1, 0,    0,    0, 
    0, 1.15, 0.25, 0.00005,
    0, 0,    1,    0,
    0, 0,    0,    1
]));
tempBitmap.transform.matrix3D = m3d;

但很快您就会注意到这种方法会以您不希望的方式扭曲图像。例如,它会水平在一侧挤压您的图像(如您所愿),但图像的内容也会被垂直拉伸。很难解释,但是一旦你尝试了上面的方法,你就会注意到图像是如何被垂直拉伸的。

rotationX结合PerspectiveProjectionscaleY可以得到同样的效果。

如果您想要更优雅的解决方案,无论是代码还是图像结果,请尝试DistortImage。那里的方法不是直截了当的(使用子图像的网格),但效果很好。

【讨论】:

    【解决方案2】:

    我只能建议您阅读我所找到的关于此的最佳信息:
    Understanding the Transformation Matrix

    读到这里,我想,你可以真正理解关于变换矩阵的一切。它来自 Flash 8(AS2),但它的理论信息也适用于 AS3。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-21
      • 2013-07-19
      • 2016-08-17
      • 2014-03-05
      • 2011-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多