установка фрагмента ролика по 4 координатам

Я очень близок к сценарию действия, но у меня проблема с видеоклипом.

У меня есть 4 координаты, и мне нужно подогнать под них подходящий фрагмент ролика, поэтому каждый угол фрагмента ролика находится в одной координате.

Единственное, что я мог найти, это преобразовать его с помощью матрицы и углов (см. Пример), но это не может быть лучшим решением моей проблемы, чтобы вычислить все углы и т. Д.

var degX:Number = 0;
var degY:Number = 0.3;

//Get the transform matrix for the object to skew
var m:Matrix = bild.transform.matrix;
m.b = Math.tan(degY *(Math.PI/180));
m.c = Math.tan(degX *(Math.PI/180));

//Apply the matrix to the transform object
var t:Transform = new Transform(bild);
t.matrix = m;

//Apply the skew
bild.transform = t;

Надеюсь, вы понимаете мою проблему и знаете решение.

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

var PointUR:Point = new Point();
PointUR.x = values1[0];
PointUR.y = values1[1];

var PointUL:Point = new Point();
PointUL.x = values2[0];
PointUL.y = values2[1];

var PointBR:Point = new Point();
PointBR.x = values3[0];
PointBR.y = values3[1];

var PointBL:Point = new Point();
PointBL.x = values4[0];
PointBL.y = values4[1];


[Embed(source='MyImage.jpg')]
var MyImage:Class;
var shape:Shape = new Shape();
var bitmap:Bitmap = new MyImage();
var showGrid:Boolean = true;
var myColorTransform = new ColorTransform();
/*myColorTransform.color = 0xFFFFFF;
shape.transform.colorTransform = myColorTransform;
shape.graphics.beginFill(0x000000,1);
addChild(shape);*/
var distortion:DistortImage = new DistortImage(267, 400, 3, 3);
if (showGrid){
            shape.graphics.lineStyle(1, 0x00FF00);
}    
distortion.setTransform(shape.graphics, 
                        bitmap.bitmapData, 
                        PointUR, 
                        PointUL, 
                        PointBR, 
                        PointBL);

person Frederick Behrends    schedule 04.04.2012    source источник
comment
4 точки образуют прямоугольник, параллелограмм или трапецию?   -  person Daniel    schedule 04.04.2012
comment
они трапециевидные, но они меняют время, так что они тоже могут быть параллелограммами в какое-то время.   -  person Frederick Behrends    schedule 04.04.2012


Ответы (1)


Преобразование movieClip или Sprite в трапецию с использованием матрицы невозможно в as3. Просмотрите эту ссылку, которая объясняет степень возможностей

короче:

введите описание изображения здесь

Это было достигнуто путем разбиения DisplayObject на более мелкие треугольники и применения к каждому из них разной матрицы перевода. Конечный результат заставляет треугольники немного выступать, но если вы увеличиваете количество треугольников, этот эффект уменьшается.

вот ссылка для блога с демонстрацией и исходным кодом

Намного проще сделать это с помощью 3D-классов или five3d Матье Бадимона, в любом случае, с искажением. Не знаю, как бы вы это сделали, чтобы сопоставить набор контрольных точек.

person Daniel    schedule 04.04.2012
comment
спасибо, для вашего сообщения это, кажется, именно то, что мне нужно, но я не могу заставить его работать, пожалуйста, взгляните на мой код, который я добавил выше. - person Frederick Behrends; 05.04.2012