Как рассчитать масштаб объектов, используя матрицу перспективной проекции? - PullRequest
0 голосов
/ 31 мая 2011

Я сейчас создаю небольшой движок 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», используя матрицу перспективной проекции, которая будет тузом

спасибо!

1 Ответ

0 голосов
/ 01 июня 2011

Я уверен, что есть более краткий способ сделать это, но, поскольку вы уже знаете, как спроецировать точку, вы можете сделать это:

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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...