Рассчитать горизонт изогнутой грани? - не экстремальные
Мне нужно найти 2 точки визуального горизонта, изогнутого лица.
Я имею:
- XYZ из 4 угловых точек
- XYZ из двух точек Безье изогнутой кромки
И мне нужно рассчитать либо:
- XY из 2 точек горизонта
- XYZ из 2-х точек горизонта
Примечание: я получил решение в последний раз, когда задал этот вопрос, но он нашел только экстремумы кривых, а не точки горизонта, которые меняются в зависимости от положения и поворота обеих кривых относительно друг друга.
3 ответа
Вы не говорите, как определяется ваша поверхность, только то, что она ограничена двумя квадратичными кривыми Безье. Есть много способов построить такую поверхность, и у каждого способа ее создания будет свой горизонт. Так что этот ответ будет догадкой.
Горизонт состоит из тех точек на поверхности, где вектор от камеры к точке касается поверхности, как показано здесь:
Квадратичная кривая Безье имеет параметрическое уравнение
B (t) = (1 - t)2 P0 + 2 (1 - t)t P1 + t2 P2
дифференцируя это по t, мы получаем касательную к кривой:
B ′ (t) = 2 (t - 1) P0 + 2 (1 - 2t) P1 + 2t P2
и это параллельно с вектором от камеры (в начале координат) к кривой, если
B (t) × B ′ (t) = 0
Решите это для t, и у вас будет точка на кривой на горизонте. То, как вы можете расширить это до горизонта для всей поверхности, зависит от того, как ваша поверхность построена. (Может быть, вы можете просто найти точки горизонта для кривых на каждом конце поверхности и соединить их прямой линией?)
Работает ли сначала вращение кривых так, чтобы связь между угловыми точками было горизонтальным, а затем вычисление экстремумов?
Чтобы проверить это визуально, вы можете повернуть пример изображения примерно на 150 градусов:
http://www.freeimagehosting.net/uploads/ad502509e9.png
Обратите внимание, что экстремумы этой кривой не совсем там, где вы хотите, но это может быть вызвано несколькими факторами, например, способ, которым вы отметили точки горизонта, кажется не таким точным.
То, что вы ищете, на самом деле называется силуэт, а не горизонт.
Самый простой способ сделать это - найти границу между частями поверхности, на которых нормаль направлена к камере (точечное произведение отрицательно), и частями поверхности, на которых нормаль направлена от камеры (точечное произведение положительно),
С треугольной сеткой вы можете сделать это напрямую, используя нормали. с NURBS вы, вероятно, можете найти закрытую формулу, которая делает это.