Actionscript 3 在AS3中使用4x4 3D矩阵扭曲图像

Actionscript 3 在AS3中使用4x4 3D矩阵扭曲图像,actionscript-3,flash,flash-cs5,Actionscript 3,Flash,Flash Cs5,我有一个AS3位图图像,我想这样倾斜: 我只想扭曲图像的底部,而不去管顶部。根据我到目前为止所做的研究,看起来我想使用Matrix3D类,但我不太确定如何有效地实现它 多亏了下面的答案,本文是理解带有3x3矩阵的Matrix3D类的绝佳资源: 尽管该教程非常棒,但它并没有提供扭曲上述图像的功能。我要找的是关于如何使用4x4矩阵的类似教程。我想知道的是矩阵中的数字应该放在哪里,我应该能够计算出其他的一切 下面是一些示例代码,说明我为什么要这么做: var tempLoader:Loader=ne

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

我只想扭曲图像的底部,而不去管顶部。根据我到目前为止所做的研究,看起来我想使用Matrix3D类,但我不太确定如何有效地实现它

多亏了下面的答案,本文是理解带有3x3矩阵的Matrix3D类的绝佳资源: 尽管该教程非常棒,但它并没有提供扭曲上述图像的功能。我要找的是关于如何使用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);
}

任何建议都将不胜感激

我只能建议你阅读我所发现的关于这方面的最好的信息:


读了这篇文章,我想,你们可以真正理解关于变换矩阵的一切。它来自Flash 8(AS2),但它的理论信息将与使用AS3一样有用。

如果您想快速使用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;
var m3d:Matrix3D=新的Matrix3D(向量([
1, 0,    0,    0, 
0, 1.15, 0.25, 0.00005,
0, 0,    1,    0,
0, 0,    0,    1
]));
tempBitmap.transform.matrix3D=m3d;
但很快你就会注意到这种方法会以你不想要的方式扭曲图像。例如,它将水平挤压图像的一侧(根据需要),但图像的内容也将垂直拉伸。很难解释,但是一旦你尝试了上述方法,你就会注意到图像是如何被垂直拉伸的

使用
rotationX
结合
PerspectiveProjection
scaleY
可以获得相同的效果


如果您想要一个更优雅的解决方案,无论是在代码还是图像结果中,请尝试。那里的方法不是直接的(使用子图像的网格),而是有很好的结果

也许使用3D旋转使底部更靠近观察者会更容易?不确定3D rotate工具是否附带AS3等效工具,但如果没有,您可以尝试实现一个基本的3D引擎。您希望能够控制哪种约束,即您关心的是能够明确定义梯形底部的宽度。如果不是像Marty建议的那样,你应该能够只使用rotationX,否则我认为使用3DMatrix可以工作translate rotate Abround X translate然后tempBitmap.transform.matrix3D=你的3DMatrix。如果你关心的是严格控制位图大小的任何约束,需要更加精确,而不是目测,这将可能需要更多的数学知识。这个问题已经被问了一次又一次。这些都很好,但没有一个能解释如何使用4x4矩阵。我所发现的所有研究都导致了如何使用3x3矩阵,它没有我所寻找的倾斜功能。