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

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

  1. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
    Не, сильно будут большие погрешности, с учетом того что потом на мощность источника освещения умножается, а это числа от 0 до 65535*65535/2.
     
  2. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
    Не, будут сильно большие погрешности, с учетом того что потом на мощность источника освещения умножается, а это числа от 0 до 65535*65535/2.
    Вот идейка с отдельным интерполированием от 0 до 1 и отдельным интерполированием от 1 и до максимального значения мне понравилась, спасибки...
     
  3. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Aloner
    Это ясно что умножается. У тебя все равно гродаций 256, а то и того меньше. Так что куда точнее? Для потери точности на других операциях добавь еще один порядок.
     
  4. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
    У меня 64 градации (65535 цветов)... Получатся большие зоны закрашенные одной интенсивностью, перескоки через градации освещенности...
     
  5. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
    Есть еще вот такая задумка:
    Рассчитаем табличку для Х и У (при X и У в интервале от -1 до 1), заполняя ячейку таблички значением
    (1/(X^2+Y^2))
    Можно определить координаты точки А пересечения перепендикуляра (опущенного из точки к плоскости в которой лежит полигон) и плоскости, этот перпендикуляр будет наименьшим расстоянием до плоскости. Теперь координаты вершин и точкм А переведем в координаты плоскоти полигона(т.е. вместо пространственных координат переходим в координаты на плоскоти). Находим расстояние R от самой удаленной вершины полигона до точки А. Делим координаты вершин на плоскости на R. Получаем индексы для Х и У нашей таблички для каждой вершины. Теперь эти индексы интерполируем по полигону, а полученые из таблички значения умножаем на предрассчитаное постоянное для полигона 1/R^2. Звучит громоздко, но многие операции легко предрассчитать.
    Недостатки: опять таки страдает точность, и проявляется дискретность. Необходим оч большой размер(чем больше тем лучше) таблички для снижения погрешности, а также необходимы методы интерполяции для нецелых индексов (билинейнная интерполяция как минимум,хотя она несовсем верна с мат точки зрения так как приращени не линейное).
    Достоинства: вместо трех умножений, одного деления, и 2 сложений на пиксель получаем одно умножение+ операции по интерполированию для нецелых индексов.
     
  6. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
    Есть еще вот такая задумка:
    Рассчитаем табличку для Х и У (при X и У в интервале от -1 до 1), заполняя ячейку таблички значением
    (1/(X^2)+Y^2)
    Можно определить координаты точки А пересечения перпендикуляра (опущенного из точки к плоскости в которой лежит полигон) и плоскости, этот перпендикуляр будет наименьшим расстоянием до плоскости. Теперь координаты вершин и точкм А переведем в координаты плоскости полигона(т.е. вместо пространственных координат переходим в координаты на плоскости), найдем угол d для каждой вершины между вершиной полигона и прямой, опущенной из точки до этой вершины. Находим расстояние R от самой удаленной вершины полигона до точки А. Делим координаты вершин на плоскости на R. Получаем индексы для Х и У нашей таблички для каждой вершины. Теперь эти индексы, углол интерполируем по полигону, а полученые из таблички (по индексам [X*cos(d),y*cos(d)]) значения умножаем на предрассчитаное постоянное для полигона 1/R^2. Звучит громоздко, но многие операции легко предрассчитать.Значение косинусов брать из таблички (все равное ее сторим для поворотов векторов).
    Недостатки: опять таки страдает точность, и проявляется дискретность. Необходим большой размер таблички для снижения погрешности, а также необходимы методы интерполяции для нецелых индексов (билинейная интерполяция как минимум).
    Достоинства: вместо трех умножений, одного деления, и 2 сложений на пиксель получаем 2 умножения+операции по интерполированию для нецелых индексов.
     
  7. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
    Есть у кого нить еще идеи?
     
  8. chAlx

    chAlx New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2008
    Сообщения:
    74
    Aloner:

    Иерархический тайлинг с охватывающими или всплывающими масками ;)

    Это я к тому, что в самом низу, конечно, много чего зарыто, но и парой уровней повыше есть что сократить.

    Да, а с освещённостью можно учесть, что на плоскости (треугольнике) получаются кольца постоянной освещённости (центром в пересечении с нормалью от факела -- что нужно эту яркую точку сперва найти, ты уже в курсе;). Все точки в этих кольцах будут освещаться одинаково, так что достаточно построить таблицу яркостей в зависимости от расстояния до самой яркой точки.
    Вроде, похоже на твой последний вариант, но никакого "угла между вершиной и прямой" :)
     
  9. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
    В принципе у меня тоже самое и есть, просто угол между вершиной и прямой нужен чтобы от пространства перейти в плоскость и правильно найти координаты на мэпе. Тока я мэп считаю только для функции расстояния от самой яркой точки на плоскости, а ты предлагаешь еще при этом учесть в мэпе cos(l,n), (угол между нормализованными нормалью плоскости и вектором света). Спасибо, я об этом тоже думал, тока что то в нем меня смутило и я решил отдельно мэп для нормалей сделать и отдельный мэп для расстояния... надо еще раз подумать над этим...
     
  10. Aloner

    Aloner New Member

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

    chAlx New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2008
    Сообщения:
    74
    Aloner:

    Дык, чего тут расписывать -- на русском как была одна приличная статья, так и осталась:

    http://www.google.com/search?q=%C8%E5%F0%E0%F0%F5%E8%F7%E5%F1%EA%E8%E9%20%F2%E0%E9%EB%E8%ED%E3

    Добавить могу только, что у меня была видеокарта на чипе Kyro II с аппаратной поддержкой обычных тайлов (не иерархических). Она действительно давала приличную производительность, сравнимую с картами в разы дороже (с большими мегагерцами, конвейерами и памятью).
     
  12. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
    Спасибо!
    Глянул бегло пока - чем то на S-buffer похоже, который у меня реализован как раз... надо будет вечером почитать по-подробнее.