Интерполирование расстояния по поверхности полигона

Тема в разделе "WASM.A&O", создана пользователем Aloner, 28 июл 2008.

  1. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
    Привет 2all!
    Сабж: имеется точка в пространстве (X0,Y0,Z0) и треугольный полигон с вершинами A,B,C; как можно интерполировать значения функции ввида (1/(расстояние от точки до точки полигона)^2) по поверхности полигона? (ослабление луча при удалении от источника освещения). Т.Е. как можно узнать значение данной функции в любой точке полигона с минимальной погрешностью?
    Я пробовал интерполировать квадрат расстояния по поверхности полигона (в сравнении с прямой формулой избавляемся от одного умножения на пиксел засчет небольшого предрасчета), затем делить 1 на это значение - это слишком медлено, так как присутствует деление.
    Пишу в алгоритмы, так под тему про ОпенГЛ и Директ не подходит, так как нужен алгоритм для досовского движка без использования собственно ОпенГЛа и Директа.
    Есть у кого нить какие нить мысли по сабжу?
     
  2. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
    Забыл уточнить: полигон плоский.
     
  3. DEEP

    DEEP Андрей

    Публикаций:
    0
    Регистрация:
    27 апр 2008
    Сообщения:
    491
    Адрес:
    г. Владимир
    А можно увидеть сам алгос?
     
  4. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
    Алогоса еще нет... сам же полигон рисуется обычными алгоритмом горизонтальных линий с расчетом коэффициентов приращения X, Z(W=1/Z) при перемещении по экранным Y и X,квадрат расстояния интерполируется c приращением a(k2+a*k1), где а - смещение от начальной точки(для приращения по Y и X отдельно), к1 и к2 - коэффициенты зависящие от координат вершин треугольника.
    Мне не нужно конкретной реализации на С или асме, мне нужен тока сам алгоритм или в какую сторону "копать".
     
  5. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
  6. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
    GoldFinch
    Не стесняемся, предлагаем все что думаем %)) ...
     
  7. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    Вот что думаем...
    Берем вектор с началом в камере и концом на полигоне. Вектор проходит через пиксел (xi,yi). Длина вектора R, координаты (I,J,K),
    K=R*sin(Theta)=Z-Z0
    где Theta - угловая координата вектора (пиксела) относительно XOY,
    Z - координата точки полигона,
    Z0 - координата камеры.

    получаем R=(Z-Z0)/sin(Theta).

    Угловые координаты пикселов можно вычислить заранее.
     
  8. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
    Способ интересный (насчет правильности -еще не проверял), спасибо!...но мне б лучше сразу интерполировать функцию обратную квадрату расстояния ...
     
  9. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    ок,
    1/R^2 = a[ix,Phi]/((Z-Z0)^2)
     
  10. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
    Вот в этом то и дело что нужно в квадрат возводить и делить, а это медленно...
    По моему у тя косяк в формуле... ты не учитываешь угол между XOZ
     
  11. DEEP

    DEEP Андрей

    Публикаций:
    0
    Регистрация:
    27 апр 2008
    Сообщения:
    491
    Адрес:
    г. Владимир
    А что если заюзать ньютоновский алгос для вычисления x=1/a ?

    Xk+1= Xk*(2 - a*Xk).

    В качестве начального значения можно брать любое число от 0 до 2/a. Например 2^(-m), где m это номер самой старшей значащей единицы в a.

    *взято откуда-то с форума, не помню откуда
     
  12. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
    DEEP
    А по подробнее можно или ссылку?
     
  13. DEEP

    DEEP Андрей

    Публикаций:
    0
    Регистрация:
    27 апр 2008
    Сообщения:
    491
    Адрес:
    г. Владимир
    Так. Вот нашёл откуда брал.
    http://electronix.ru/forum/index.php?showtopic=34696
    мне в конце концов не пригодилось, поэтому не разбирался...
     
  14. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
    Спасибо...
    Сам метод Ньютона мне чет не очень... А вот фраза оттуда про ряды Тейлора и полиномную аппроксимацию мне понравилась, может помочь сразу функцию рассчитывать...
     
  15. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
    Возможно нашел как быстро вычислить 1/R^2 (R - расстояние)... Нужно разложить в ряд Тэйлора... ща попробую
     
  16. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Aloner
    Вот почитай особенно последний парагроф.
    http://www.enlight.ru/faq3d/articles/55.htm
     
  17. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Можно апроксимировать квадратным полиномом или вообще синусом
     
  18. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
    Кармановский Фонг не учитывает изменения расстояния, это расстоние учитывается при расчете лайтмэпов и этот способ юзается только для статических обьектов.
     
  19. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
    Как???
    это не чисто квадратичная функция, приращение не такое будет как для квадратичной функции!!!
     
  20. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Aloner
    МНК.
    Да нетакое и что будет сильно заметно? Тейлор между прочем это тоже разложение с потерью точности мыже отбрасываем часть. Для дальних растояний и близких линейная, а вот возле 1-0,01 квадратичную или более высокой степени.

    Я подумал наверно самый быстрый способ будет задать таблицей и линейно интерполировать.