0

我目前正在使用精灵在 Flash 中构建一个小的 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”,那将是王牌

谢谢!

4

1 回答 1

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));
于 2011-05-31T23:55:08.620 回答