Если чисто алгебраически, вне контекста вложеных спрайтов, а на уровне абстрактной 3Д точки:
Код AS3:
var point3D:Vector3D = new Vector3D (30, 40, 50);
var center:Point = new Point (stage.StageWidth / 2, stage.stageHeight / 2); //Положение точки схода-камеры. то есть наш уровень глаз откуда расходятся лучи перспективы.
var distance:Number = 100; //расстояние до точки
rotatePoint3DAroundAxisX(point3D, Math.PI / 6);
var point2D:Point = get2DPointFrom3Dpoint (point3D, distance, center);
private function rotatePoint3DAroundAxisX(point:Vector3D , alpha:Number):void
{
var cosA:Number = Math.cos(alpha);
var sinA:Number = Math.sin(alpha);
var xx:Number = point.x;
var yy:Number = point.y * cosA - point.z * sinA;
var zz:Number = point.y * sinA + point.z * cosA;
point.x = xx;
point.y = yy;
point.z = zz;
};
private function get2DPointFrom3Dpoint(point3D:Vector3D, distance:Number, center:Point):Point
{
//В нашем случае камера перспективы совпадает с направлением Z. Мы как бы смотрим с тыльной стороны оси Z координатной системы вглубь
var distortionByZ:Number = (point3D.z / distance + 1);
var point2D:Point = new Point();
point2D.x = center.x + point3D.x / distortionByZ;
point2D.y = center.y - point3D.y / distortionByZ;
return point2D;
};
Но фактически вы не увидите ничего объемного на одной точке. Она просто изменит совю координату. Что бы заметить объем нужна гркппа точек. Ну а вообще с такмим штукаи удобнее с матрицами работать, т.к. не нужно складывать много тригонометрии при повороте, а достаточно умножить коэффициенты в матрицах. Вы можете заметить что первая функция по сутити вычисляет детерминант матрицы 2х2