Рассчитать горизонт изогнутого лица? - Не экстремум

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

У меня есть:

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

И мне нужно рассчитать либо:

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

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


person Robin Rodricks    schedule 22.02.2009    source источник
comment
Известные точки XYZ вычисляются ПОСЛЕ проецирования. Так что не парься об этом.   -  person Robin Rodricks    schedule 22.02.2009
comment
Кроме того, камера 3D-мира находится в точке 0,0,0 XYZ, указывая на угол 0,0,0 XYZ. Другими словами, точки XYZ готовы к расчету, камеру можно не беспокоить.   -  person Robin Rodricks    schedule 22.02.2009
comment
Хорошая визуальная подсказка. Хотите разгласить, какое программное обеспечение использовалось для его создания?   -  person Konrad Rudolph    schedule 22.02.2009


Ответы (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, и вы получите точку на кривой на горизонте. Как вы можете расширить это до горизонта для всей поверхности, зависит от того, как построена ваша поверхность. (Может быть, вы можете просто найти точки горизонта для кривых на каждом конце поверхности и соединить их прямой линией?)

person Gareth Rees    schedule 22.02.2009

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

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

http://www.freeimagehosting.net/uploads/ad502509e9.png

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

person schnaader    schedule 22.02.2009

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

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

person shoosh    schedule 22.02.2009