Krita: чотирьохточкові перспективні трансформації

    
Приблизно місяць тому проект Криту успішно завершив кампанію по збору коштів на кікстартер (див. минулий пост ), тепер розробники повністю занурені в процес написання обіцяних булочок. Першою реалізованої метою стали чотирьохточкові перспективні трансформації. У цій статті я розповім про їх реалізацію та застосуванні.
 
Взагалі, «виглядають тривимірними» перетворення існували в Криті досить давно, проте користуватися ними було незручно. Справа в тому, що стандартний інструмент трансформацій дозволяв лише обертати об'єкт навколо трьох осей. Що дуже погано підходить для самого затребуваного користувальницького сценарію: додати текстуру на об'єкт намальований з урахуванням перспективи. Найпростіший приклад — помістити вікна на стіни будівлі.
 
Найбільш простим рішенням цього завдання є завдання перспективи по чотирьох точках: виділяємо вікно, перетягуємо його кути в потрібну позицію і готово! Цей метод і був реалізований.
 
 
 
 

Математика перетворення

Як відомо, перспективна трансформація на площині задається матрицею перетворення однорідних координат.
 
 
 
Ця матриця складається з восьми значущих елементів (масштаби-повороти (), зміщення (), перспектива ()) і одного масштабного коефіцієнта. Таким чином, щоб однозначно задати перетворення, нам потрібно мати 8 рівнянь, що зв'язують ці значення. Чотири точки, кожна з двома координатами, якраз і зададуть ці рівняння, за умови, що будь-які три з них не лежать на одній прямій.
 
Нехай є чотири точки (x1, y1)… (x4, y4) в координатах початкового зображення. Висловимо четверту точку через лінійну комбінацію перших трьох:
 
 
 
Вирішимо систему і запишемо матрицю перетворення, яка буде переводити (1,0,0) в кратне (x1, y1, 1), (0,1,0) в кратне (x2, y2, 1), (0,0,1 ) в (x3, y3, 1) і (1,1,1) в (x4, y4, 1)
 
 
 
Тепер повторимо ці кроки для координат точок в кінцевому просторі і отримаємо матрицю B в штрихованих координатах.
 
 
 
Тоді шукана матриця перетворення буде мати вигляд
 
 
 
Матриця буде перетворювати вихідні координати точок в проміжні фіктивні точки (1,0,0), (0,1,0), (0,0,1) і (1,1,1), а матриця , в свою чергу, перетворює їх до бажаних значень.
 
Шукана матриця отримана!
 
 

Перетворення точок сходу

Точкою сходу називається точка, в якій сходяться на перспективному зображенні паралельні лінії предмета. Однією з вимог художників була можливість перетягувати ці точки безпосередньо. Спочатку було не зовсім зрозуміло, як реалізувати такий функціонал, однак незабаром з'ясувалося, що в однорідних координатах точки сходу виражаються елементарно:
 
 
 
Подальші перетворення ніяк не змінюються.
 
 

Замість висновку

Описаний функціонал доступний в останній збірках Криту під Windows і в репозитаріях Krita Lime для Ubuntu. Можна оновлюватися і малювати!
 
Наостанок відео від Павла Гераськіна, яке демонструє можливості нового інструмента:
 
     
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.