Важная информация

User Tag List

Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 18 из 18

Тема: Эффект линзы

  1. #11
    Guru Аватар для newart
    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    11,455
    Спасибо Благодарностей отдано 
    193
    Спасибо Благодарностей получено 
    161
    Поблагодарили
    66 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vitamin Посмотреть сообщение
    Я про это и говорю. Сканирование должно быть линейным на приемнике, а не на источнике. Иначе будет хреново. А рисовать результат сразу или заполнять таблицу- не суть важно.
    Да блин, нет у меня приемника, то есть иcточника, поэтому и сканировать ничего не надо.
    Надо просто нарисовать векторную линзу, с дискретностью 8 пикселей.

    Добавлено через 8 минут
    Вот еще один вариант, в отличае от IRIS линза получается выпуклой, но с артефактами, углы квадрата превращаемого в линзу как бы подгибаются и накладываются на линзу.

    size = 2 (коффициент "скукоживания" квадрата в сферу)
    for i = -radius To radius Step -8
    for j = -radius To radius Step -8

    s = Sin(M_PI/2 + (M_PI/2) / (radius*size) * sqr(i*i+j*j))
    x = i*s
    y = j*s
    plot(x,y)

    Next j
    Next i
    Последний раз редактировалось newart; 09.06.2008 в 16:26. Причина: Добавлено сообщение

  2. #12
    Activist Аватар для Raider
    Регистрация
    24.06.2005
    Адрес
    novosibirsk
    Сообщений
    266
    Записей в дневнике
    5
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Smile

    Слава, ты, Слава.. Всё-таки не снёс я глядеть на твои мучения,
    заставил ты меня оторваться от проекта, взять ручку и карандаш и подумать 3 минуты. Ну тут же всё банально... Я же тебе всё объяснил в ICQ тот раз. Перечитал бы лучше что я тебе писал.

    Код:
    #define RADIUS    256
    #define GRIDSTEP  8
    #define CURVATURE 0.75
    
    void mesh()
    {
       int x, y;
       float distance, z;
    
       for (y = -RADIUS; y < RADIUS - 1; y += GRIDSTEP)
       {
          for (x = -RADIUS; x < RADIUS - 1; x += GRIDSTEP)
          {
             distance = sqrtf(x*x + y*y);
    
             if (distance < RADIUS)
             {
                z = 1.0 - CURVATURE + CURVATURE * distance/RADIUS;
                plot(x/z + RADIUS, y/z + RADIUS);
             }
             else
                plot(x + RADIUS, y + RADIUS);
          }
       }
    }
    Добавлено через 15 минут
    Работает это так
    Код:
    #define RADIUS    256   // радиус гипотетической сферы
    #define GRIDSTEP  8     // шаг сетки
    #define CURVATURE 0.75  // кривизна поверхности 0..1 
    
    // функиця рассчета искривления поверхности 
    void mesh()
    {
       int x, y;             // пара целочисл. переменных, координаты
       float distance, z; // пара переменных с плав. точкой
    
       // цикл по Y
       // цикл нач.значние    условие           выр.выпол. после кажд итерации
       for (y = -RADIUS;      y < RADIUS - 1;   y += GRIDSTEP)
       {
       
          // вложенный цикл по X
          // цикл нач.значние    условие           выр. выпол. после кажд итерации
          for (x = -RADIUS;      x < RADIUS - 1;   x += GRIDSTEP)
          {
             // расстояние от центра до текущй точки
             // вычисляется по теореме пифагора: 
             // гипотенуза=корень(катет1^2 + катет2^2)
             // это расстояние никогда не будет больше RADIUS
             distance = sqrtf(x*x + y*y);
    
             // смотрим, лежит ли текущая точка внутри круга, круг задан
             // радиусом         
             if (distance < RADIUS)
             {
                // да, точка внутри круга
                // почитаем ее "дистанцию от экрана", при этом заметим, что
                // distance изменяется от 0 до RADIUS, таки образом
                // выражение distance/RADIUS принимает значения 0...1
                z = 1.0 - CURVATURE + CURVATURE * distance/RADIUS;
                            
                plot(x/z + RADIUS, y/z + RADIUS); // ставим точку круга(линзы)
             }
             else
                plot(x + RADIUS, y + RADIUS);  // эта точка вне круга
          }
       }
    }
    Последний раз редактировалось Raider; 11.06.2008 в 01:11. Причина: Добавлено сообщение
    Alex Raider, Flash inc. 1992-1997 Новосибирск

  3. #13
    Guru Аватар для newart
    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    11,455
    Спасибо Благодарностей отдано 
    193
    Спасибо Благодарностей получено 
    161
    Поблагодарили
    66 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Raider Посмотреть сообщение
    Слава, ты, Слава.. Всё-таки не снёс я глядеть на твои мучения,
    заставил ты меня оторваться от проекта, взять ручку и карандаш и подумать 3 минуты. Ну тут же всё банально... Я же тебе всё объяснил в ICQ тот раз. Перечитал бы лучше что я тебе писал.
    Красота!!
    Спасибо Леха!!
    С меня причитается!!

    Добавлено через 36 минут
    Чуток поигрался и заметил что линза, как будто линейная.
    То есть не полусфера, а скорее конус.

    Вот картинка: (step X = 1, step Y = 8, справа то что выдает выше приведенный мной вариант кода):
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	sphere.png 
Просмотров:	234 
Размер:	4.0 Кб 
ID:	8188   Нажмите на изображение для увеличения. 

Название:	sphere_good.png 
Просмотров:	300 
Размер:	3.1 Кб 
ID:	8189  
    Последний раз редактировалось newart; 11.06.2008 в 03:58. Причина: Добавлено сообщение

  4. #14
    Activist Аватар для Raider
    Регистрация
    24.06.2005
    Адрес
    novosibirsk
    Сообщений
    266
    Записей в дневнике
    5
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от newart Посмотреть сообщение
    Чуток поигрался и заметил что линза, как будто линейная.
    То есть не полусфера, а скорее конус.
    Это перспектива. Правильная перспектива дает такие специфические искажения кривизны (вдали искажения меньше, вблизи больше). Так и должно быть в реальности. Называется "рыбий глаз" или профессионально - дисторсия. Перспективный вид параллельных прямых должен быть знаком каждому фотографу.
    Если ты читал Я.И.Перельман "Занимательная физика", то должен помнить оттуда вид моста так, как его видят рыбы. Первое изображение своей криволинейностью напоминает фотографию моста в этой книге.

    А во втором, твоем случае это просто вид, без перспективы. Кривизна дуг постоянная.

    p.s.
    "Занимательную физику" Перельмана советую найти тебе и каждому, зачитаешься. А рисунок оттуда, что самое смешное был сделан, как мне кажется, Робертом Вудом из-под воды, специальной камерой. Про Вуда есть отдельная книга - она тоже читается затая дыхание.
    Alex Raider, Flash inc. 1992-1997 Новосибирск

  5. #15
    Guru Аватар для newart
    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    11,455
    Спасибо Благодарностей отдано 
    193
    Спасибо Благодарностей получено 
    161
    Поблагодарили
    66 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Raider Посмотреть сообщение
    А во втором, твоем случае это просто вид, без перспективы. Кривизна дуг постоянная.
    Суть в том что второй вариант выглядит привлекательнее и естественннее, он действительно похож на сферу.

    Добавлено через 10 минут
    Помнишь шарик из Illusion с робокопом? Там никакого рыбьего глаза. Интересно как они расчитывали.
    Последний раз редактировалось newart; 11.06.2008 в 17:56. Причина: Добавлено сообщение

  6. #16
    Activist Аватар для Raider
    Регистрация
    24.06.2005
    Адрес
    novosibirsk
    Сообщений
    266
    Записей в дневнике
    5
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от newart Посмотреть сообщение
    Суть в том что второй вариант выглядит привлекательнее и естественннее, он действительно похож на сферу.

    Добавлено через 10 минут
    Помнишь шарик из Illusion с робокопом? Там никакого рыбьего глаза. Интересно как они расчитывали.

    Попробуй просто уменьшить фактор кривизны, параметр CURVATURE поставь поменьше.. Чем меньше будет фактор кривизны, тем меньше перспективное искажение. Там у тебя на левой картинке кривизна настолько велика, что это не полусфера, это как бы такая эллиптическая скругленная палочка у тебя из экрана торчит. Вот ты её за "конус" и принял.. Curvature(кривизна) - это и есть, по сути, насколько сфера "вытягивается" из экрана. Ставь меньше.

    Ну и вопрос в том, что для тебя является естественным.. Мало ли.. Естественным как? Для глаза привыкшему к спектруму? Как правило, ты в эффектах всегда видишь перед собой просто параллельную проекцию.
    А если под "естественным" понимать математически/визуальное правильное построение, как оно Должно Быть На Самом Деле и как оно выглядит в природе - то тогда обрати свой взор на вариант с правильным рассчетом перспективы.

    Насчет перспективы ещё. C перспективой все становится хорошо видно в динамике. Если например перспективная коррекция не производится/неверна/симулируется - то когда все это начинает как-то произвольно вращаться/смещаться/наклоняться дефект "Fake perspective" мгновенно вылазит.
    Последний раз редактировалось Raider; 11.06.2008 в 22:28.
    Alex Raider, Flash inc. 1992-1997 Новосибирск

  7. #16
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #17
    Guru Аватар для newart
    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    11,455
    Спасибо Благодарностей отдано 
    193
    Спасибо Благодарностей получено 
    161
    Поблагодарили
    66 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Raider Посмотреть сообщение
    Попробуй просто уменьшить фактор кривизны, параметр CURVATURE поставь поменьше.. Чем меньше будет фактор кривизны, тем меньше перспективное искажение. Там у тебя на левой картинке кривизна настолько велика, что это не полусфера, это как бы такая эллиптическая скругленная палочка у тебя из экрана торчит. Вот ты её за "конус" и принял.. Curvature(кривизна) - это и есть, по сути, насколько сфера "вытягивается" из экрана. Ставь меньше.
    Конусообразность сохраняется при любых параметрах. В примере выше curvature=0.75

    Цитата Сообщение от Raider Посмотреть сообщение
    Ну и вопрос в том, что для тебя является естественным.. Мало ли.. Естественным как?
    Например шарик из Illusion. Вариант на картинке справа вполне примелемлем (если бы не глюк с углами).

  9. #18
    Activist Аватар для Raider
    Регистрация
    24.06.2005
    Адрес
    novosibirsk
    Сообщений
    266
    Записей в дневнике
    5
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Newart, посмотри как выглядит мост снятый Вудом. Вот ссылка на книгу, фотографии в конце:
    http://lib.ru/MEMUARY/WOOD/robertwood.txt
    Alex Raider, Flash inc. 1992-1997 Новосибирск

Страница 2 из 2 ПерваяПервая 12

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Классный эффект в демке !
    от AAA в разделе Демо
    Ответов: 9
    Последнее: 24.05.2008, 19:17
  2. Border-эффект на Бейсике
    от jim в разделе Разный софт
    Ответов: 7
    Последнее: 18.04.2007, 21:50

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •