Як я можу отримати нормальний вектор для площини з набору вершин?


9

Я працюю над маленьким проектом HLSL / C ++, щоб перетворити свою графічну роботу, і я не впевнений, як мені дістати облицювальний вектор з вершинного багатокутника. Я не можу знайти формулу.

Позиції P1, P2, P3

Назвемо їх клас VertexPoint з P1.x, P1.y, P1.z, наприклад?


тісно пов'язаний з цим питання: gamedev.stackexchange.com/questions/11520 / ...
jhocking

Тільки для коректності мітка на малюнку та заголовку питання повинна бути " нормальним вектором " замість "нормалізованого вектора". Сам звичайний вектор, звичайно, може бути нормалізований (його довжина дорівнює єдності), але цього не потрібно, і перехресний добуток не дасть нормалізованого вектора за замовчуванням.
jjmontes

1
Гуглінг "звичайний векторний трикутник", що очевидно для Google, дає мільйони звернень. 1 , 2 , 3 , 4 , 5 , 6 , ...
imallett

... 7 , 8 , 9 , 10 , 11 , 12 , 13 , ...
imallett

2
... 14 , 15 , 16 , 17 ... Кожен із них (і безперечно незліченна кількість інших) відповідає на питання, а деякі насправді навіть мають бажаний код C ++ / HLSL. Серйозно. Це питання настільки побито до смерті, що називає його "дублікатом" неадекватним. "Я не можу знайти формулу" моя дупа - ви не намагалися .
imallett

Відповіді:


28

Ви можете легко знайти нормальний, обчисливши два вектори, V1 = P2-P1 і V2 = P3-P1, а потім знайти поперечний добуток N = V1 x V2. Тоді ви нормалізуєте N. Залежно від упорядкування вершин (за годинниковою або проти годинникової стрілки) ви отримаєте нормальне обличчя спереду або назад.

Ви також повинні переконатися, що три три точки не вирівняні, якщо вони є, ви повинні вибрати іншу точку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.