На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> квадратная выпуклая линза , С++
    Доброго всем времени суток.
    Хочется сделать нечто вроде пузатого(старого) телевизора, на котором буде показываться изображение.
    Как сделать - я беру, рисую текстурку на сетку(допустим 32 линии Х 32 столбца), а потом искажая сетку добиваюсь выпуклости(ил вогнутости) изображения.
    Собственно вопрос, где бы найти формулу по которой можно было бы построить такую вот штуку????
      Берете трехмерный редактор с рейтрейсингом. Рисуете текстуру с сеткой. В трехмерном редакторе ставите перед камерой прямоугольник, затекстурированный вашей текстурой, между камерой и прямоугольником рисуете линзу с необходимыми параметрами. Рендерите сцену, получаете картинку с правильно искаженной сеткой. Берете из нее координаты.
        Вот на картинке пример метода. Нужная область накрывается выпуклым куполом (здесь используется сфера, на практике лучше пользоваться параболоидом вращения). А дальше просто. Из рисуемой точки проводишь перпендикуляр. Точку пересечения его с куполом соединяешь с некоторой точкой ниже плоскости. И в качестве нужного цвета берешь цвет точки пересечения этой наклонной линии с плоскостью. Степень увеличения будет определяться отношением расстояний от точки схождения до плоскости и до вершины купола

        Обозначим радиус линзы - R, увеличение в центре линзы - 1+k
        rt - радиус итоговой точки
        rs - радиус исходной точки
        yс - высота купола над итоговой точкой

        получаем пару уравнений
        yс = k*(1-(rt/R)2)
        rs/1=rt/(1+yс)
        или
        rs=rt/(1+k*(1-(rt/R)2))
        м.б. можно его упростить

        Прикреплённая картинка
        Прикреплённая картинка
          n0rd, эээ а можно как-то поподробнее??? что за редактор, что такое ретрейсинг, и координаты узлов сетки мне потом надо будет в своей прописать и все будет окей?
          Дико извиняюсь за тупизну...
            Ray Tracing - трассировка лучей.
            Обычно используют обратную трассировку лучей. Из камеры в каждую точку изображения выпускается луч, пока он не наткнется на что-нибудь. Поскольку распространение света обратимо луч расщепляется (на самом деле наоборот собирается) на три составляющие: луч испущенный поверхностью, отраженный луч и преломленный луч. Ну с испущенным лучом все ясно, эту составляющую мы просто запоминаем, а те два луча тянем дальше, пока их доли не уменьшатся до незаметности, или пока не наберем некоторого числа столкновений.
            Лучше поискать на той же вики

            В принципе у тебя тут только преломленный луч, можешь сам попробовать лучи потрассировать. Но результат может тебе не понравиться. Идеальная линза (без аберраций) просто равномерно увеличивает изображение, без каких бы то ни было искажений

            Добавлено
            Да, любой графический редактор, поддерживающий эффекты, обычно имеет и линзу, название эффекта правда не вспомню. Картинку придется взять с запасом, с полем размером в половину картинки или больше.
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0232 ]   [ 17 queries used ]   [ Generated: 6.05.24, 10:42 GMT ]