2013-10-03 2 views
4

У нас есть некоторые объекты, заполненные источником изображения. Возможно ли достичь перспективного преобразования заполненного изображения с помощью регулировки прямоугольных позиций сетки в ткани js?Перспектива Преобразование объекта, заполненного изображением в fabricjs

enter image description here

я пытаюсь добиться похож на изображении выше в ткани JS ....

+1

Не напрямую, но вы можете использовать [аффинное преобразование] (https://en.wikipedia.org/wiki/Affine_transformation) или [проекция] (https://en.wikipedia.org/wiki/3D_projection) в буфер пикселей. – K3N

+0

Также см. Этот ответ http://stackoverflow.com/questions/3836036/mode7-like-perspective-transform-in-canvas?rq=1 – K3N

+0

См. Https://groups.google.com/forum/#!topic/ fabricjs/fKUNRYlJVAs – John

ответ

5

Истинные перспективные искажения не представляется возможным с FabricJS или других 2d библиотек холст.

Контекст Canvas 2d не будет преобразовывать перспективы.

Большинство библиотек холста, включая fabricJS, используют 2d контекста.

Существует трехмерный контекст холста - webGL, который будет хорошо имитировать перспективные преобразования.

Библиотека threeJS от mrdoob является хорошим 3d контекста библиотеки:

http://mrdoob.github.io/three.js/

[добавление: без перспективы перекос возможен (результаты всегда параллельны к оригиналу)]

В fabricJS у вас есть полный контроль над матрицей преобразования.

Вы можете использовать эту матрицу для параллельного перекоса.

Вот Фидл: http://jsfiddle.net/m1erickson/Rq7hk/

Как:

fabricObject.transformMatrix принимает массив из 6 элементов с каждым элементом, представляющим части аффинной матрицы преобразования.

В этой матрице 2-й и 3-й элементы представляют SkewY и SkewX.

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

var rect = new fabric.Rect({ 
    left: 150, 
    top: 150, 
    width: 75, 
    height: 50, 
    fill: 'green', 
    angle: 0, 
    padding: 10, 
    transformMatrix:[1,.30,0,1,0,0] 
}); 
+0

Я не ищу, чтобы реализовать 3D-перспективу, но перспектива выглядит как перекос. Я видел много ссылок, используя простой холст для эффекта перекоса. 1. http://jsbin.com/etecay/913/edit 2. http://jsfiddle.net/dTyRG/ 3. http://jsfiddle.net/UHSKL/ Можно ли реализовать аналогичный эффект перекоса с Fabric JS? – user2571818

+0

FabricJS может выполнять простые (параллельные) перекосы. В ваших примерах # 1 и # 3 используется SkewY для рисования перекошенного изображения. Я добавил код, как это сделать в fabricJS, к моему ответу выше. В вашем примере # 2 используется SkewY и срез изображения для создания эффекта перспективы. Это было бы сложнее, но не невозможно в fabricJS.Вы можете заполнить группу множеством фрагментов с искаженным одним пикселем изображения до тех пор, пока все изображение не будет представлено на «перспективном» дисплее. Вот ссылка на то, как работает обработка изображений: http://www.subshell.com/en/subshell/blog/image-manipulation-html5-canvas102.html#jumpto – markE

+0

Я пытаюсь реализовать «перспективную» функцию, как показано в моем примере 2. На данный момент я генерирую «перспективное» изображение на простом холсте (а не в одном из них), а затем я заполняю свой тканевый объект сгенерированным изображением. При таком подходе у меня есть некоторые аспекты удобства использования и производительности. Поэтому я ищу лучшее решение. Не могли бы вы описать точные шаги или алгоритм для реализации этой функции в ткани JS .. – user2571818

Смежные вопросы