如何使用透视投影矩阵计算对象比例?

时间:2011-05-31 14:49:27

标签: actionscript-3 3d projection-matrix

我目前正在使用sprite建立一个小型3D粒子引擎。

设置每个精灵的位置我正在使用下面的projectVector函数。 (viewTransform矩阵是与透视投影矩阵连接的粒子世界矩阵)

var projectedPoint:Vector3D = Utils3D.projectVector(viewTransform, point);
sprite.x = projectedPoint.x;
sprite.y =  projectedPoint.y;

这确实很好地将精灵准确地置于它们应该的位置:D 我遇到的问题是试图弄清楚如何根据与相机的距离来计算每个粒子的比例..

sprite.scaleX = sprite.scaleY = ??

如果我没有使用透视投影矩阵,我通常会做这样的事情。

var scaleRatio:Number = (focus * zoom)/(focus + particle.globalz);
particle.depth = scaleRatio;
sprite.x = particle.globalx * scaleRatio;
sprite.y = particle.globaly * scaleRatio;
// set scale..
sprite.scaleX = sprite.scaleY = scaleRatio;

如果有人能够告诉我如何使用透视投影矩阵来计算“scaleRatio”,那将是ace

谢谢!

1 个答案:

答案 0 :(得分:0)

我确信有更简洁的方法可以做到这一点,但既然你已经知道如何投射一个观点,你可以这样做:

var tl:Point = sprite.getRect(sprite.parent).topLeft;
var br:Point = sprite.getRect(sprite.parent).bottomRight;

var projectedTL:Point = Utils3D.projectVector(viewTransform, tl);
var projectedBR:Point = Utils3D.projectVector(viewTransform, br);

trace("projected width = "+(projectedBR.x - projectedTL.x));
trace("projected height = "+(projectedBR.y - projectedTL.y));