Як зіставити квадратну текстуру на трикутник?


13

Я хочу знайти координати текстури для точки P. У мене є вершини трикутника та відповідні їм uv координати.

Цифри в маленьких квадратиках текстури представляють значення кольорів.

Назвіть етапи обчислення координат uv P?

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


Існує афінне перетворення, яке відображатиме кожен кут на його текстурну координату, ви можете використовувати це для зіставлення P на його uv.
храповик урод

@ratchetfreak Ви можете надати мені посилання PLZ?
john john

Існує хороший підправити про те , як зробити розрахунок точки перетину, а також обчислення барицентрична шнура в один йти в цій статті . Це по суті означає перетворення трикутника.
joojaa

Відповіді:


14

Це досягається за допомогою барицентричної інтерполяції .

По- перше, ми знаходимо барицентричні координати . Барицентричні координати представляють, яка вага кожної вершини сприяє точці, і їх можна використовувати для інтерполяції будь-якого значення, яке відоме у вершинах по грані трикутника.P

Розглянемо 3 внутрішніх трикутника , та .ABPPBCPCA

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

Можна сказати, що барицентрична координата, або вага вершини в точці пропорційна відношенню площі внутрішнього трикутника до площі цілого трикутника .APPBCABC

Це інтуїтивно очевидним , якщо врахувати , що , як наближається трикутник стає все більше , а два інших стають менше.PAPBC

Інтуїтивно зрозуміло також, що сума барицентричних координат точки всередині трикутника завжди дорівнює . Отже, для знаходження 3-ї достатньо знайти лише дві координати.1

Метод обчислення барицентричних координат:

BaryA=(ByCy)(PxCx)+(CxBx)(PyCy)(ByCy)(AxCx)+(CxBx)(AyCy)BaryB=(CyAy)(PxCx)+(AxCx)(PyCy)(ByCy)(AxCx)+(CxBx)(AyCy)BaryC=1BaryABaryB

Виведення та міркування пояснюються у статті вікіпедії .

Після того, як у вас є координати, ви можете визначити координати текстури , інтерполюючи значення у вершинах, використовуючи барицентричні координати як ваги:P

Puv=BaryAAuv+BaryBBuv+BaryCCuv

Міркування також дуже добре пояснені в цій презентації.

Також дивіться це питання щодо ефективних методів обчислення.


Я помилку в ? Чи повинен перший термін бути чи я помиляюся? ( A y - C y )BaryB(AyCy)
joojaa

@joojaa Я так не думаю. Це те саме в статті у Вікіпедії, і це здається правильним з тестового розрахунку, який я зробив.
Ротем

ах, так це , може бути добре вказати, як ви попередньо обчислили . A C y = ( A y - C y )(AyCy)ACy=(AyCy)
joojaa

1
@joojaa Всього знаменник , і деякі з доданків у чисельнику може бути попередньо обчислені для кожного трикутника, лише деякі з членів залежать від . Я додав посилання на питання, що стосується методів обчислення. У цій формулі я подумав, що краще зробити нотацію простою та рівномірною, а не ефективною. P
Ротем
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.