【问题标题】:How do i calculate an objects scale using a perspective projection matrix?如何使用透视投影矩阵计算对象比例?
【发布时间】:2011-09-05 13:45:53
【问题描述】:

我目前正在使用精灵在 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”,那就是 ace

谢谢!

【问题讨论】:

  • 为什么不根据projectedPoint.z计算scaleRatio?

标签: actionscript-3 3d projection-matrix


【解决方案1】:

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

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));

【讨论】:

    猜你喜欢
    • 2021-04-09
    • 1970-01-01
    • 2015-08-06
    • 2013-04-17
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多