Рассчитать горизонт изогнутой грани? - не экстремум - PullRequest
5 голосов
/ 22 февраля 2009

Мне нужно найти 2 точки визуального горизонта изогнутой грани.

У меня есть:

  • XYZ из 4 угловых точек
  • XYZ из двух точек Безье изогнутой кромки

И мне нужно вычислить либо:

  • XY 2 точек горизонта
  • XYZ из двух точек горизонта

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

Ответы [ 3 ]

2 голосов
/ 22 февраля 2009

Вы не говорите, как определяется ваша поверхность, только то, что она ограничена двумя квадратичными кривыми Безье. Есть много способов построить такую ​​поверхность, и у каждого способа ее создания будет свой горизонт. Так что этот ответ будет догадкой.

Горизонт состоит из тех точек на поверхности, где вектор от камеры к точке касается поверхности, как показано здесь:

Tangent to Bézier curve

Квадратичная кривая Безье имеет параметрическое уравнение

B ( t ) = (1 - t ) 2 P 0 + 2 (1 - t ) т П 1 + т 2 П 2

дифференцируя это по t, мы получаем касательную к кривой:

B ′ ( t ) = 2 ( t - 1) P 0 + 2 (1 - 2 t ) P 1 + 2 т P 2

и это параллельно с вектором от камеры (в начале координат) к кривой, если

B ( t ) × B ′ ( t ) = 0

Решите это для t , и у вас будет точка на кривой на горизонте. То, как вы можете расширить это до горизонта для всей поверхности, зависит от того, как ваша поверхность построена. (Может быть, вы можете просто найти точки горизонта для кривых на каждом конце поверхности и соединить их прямой линией?)

2 голосов
/ 22 февраля 2009

Работает ли сначала вращение кривых так, чтобы связь между угловыми точками было горизонтальным, а затем вычисление экстремумов?

Чтобы проверить это визуально, вы можете повернуть пример изображения примерно на 150 градусов:

Повернутое изображение http://www.freeimagehosting.net/uploads/ad502509e9.png

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

1 голос
/ 22 февраля 2009

То, что вы ищете, на самом деле называется силуэт , а не горизонт.
Самый простой способ сделать это - найти границу между частями поверхности, на которых нормаль направлена ​​к камере (точечное произведение отрицательно), и частями поверхности, на которых нормаль направлена ​​от камеры (точечное произведение положительно) ,

С треугольной сеткой вы можете сделать это напрямую, используя нормали. с NURBS вы, вероятно, можете найти закрытую формулу, которая делает это.

...