Прямой алгоритм трассировки лучей с использованием SSE

Тема в разделе "WASM.BEGINNERS", создана пользователем rom19, 4 май 2010.

  1. rom19

    rom19 New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2010
    Сообщения:
    12
    Срочно ищу программу (курсовик горит):

    Программа "Прямой алгоритм трассировки лучей"
    Описание:
    1 источник света и 1 препятствие
    источник точечный
    препятствие - линия
    координаты задаются и источника и препятствия вручную
    Задание: используя SSE рассчитать трассировку лучей

    Помогите пожалуйста!!!
     
  2. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    Если под лучом понимать линию, проходящую через а(x,y) и b(x,y) (a - источник, b - точка препятствия), то вам необходимо всего лишь рассчитать коэффициенты A, B и C для уравнения линии. Затем, используя эти коэффициенты, найти точку c(x,y), лежащую в плоскости проецирования. Если самое пространство дескретно, то тут даже без FPU обойтись можно будет (тем более sse). Для упрощения можно точку и линию положить в одну плоскость и вычисления производить в этой плоскости

    A*xa+B*ya+C=0 и A*xb+B*yb+C=0, из которых найдете A, B и С

    если я правильно помню, то A=(yb-ya) B=(xa-xb) C=(xb*ya-xa*yb)

    далее в уравнение (yb-ya)*xc+(xa-xb)*yc+(xb*ya-xa*yb)=0 подставляете соответственно либо xc, либо yc и находите оставшееся

    Код (Text):
    1.      (ya-yb)*xc+(xb*ya-xa*yb)      (xa-xb)+(xb*ya-xa*yb)
    2. yc = ------------------------ xc = ---------------------
    3.              (xa-xb)                       (ya-yb)
     
  3. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    Так как луча у вас 2, на sse просто можно их сразу два и посчитать. z (для 3-хмерного пространства) найдете из уравнения A*xa+B*ya+C*za+D=0 (если посчитаете уравнение плоскости в которой лежат лучи)
     
  4. rom19

    rom19 New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2010
    Сообщения:
    12
    Очень интересно. Но я чайник в асеме. Можете код набросать на коленке. Говорят не сложно же. И хотя бы среду посоветуйте где можно реализовать.
     
  5. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    261
    Вот как то так рассчитываем пересечение луча с прямой в 2D здесь p.x и p.y - начальные координаты луча v.x и v.y - единичный вектор t - длина луча, t2 - длина прямой с которой ищем пересечение луча.
    Для того чтобы найти координаты пересечения нужно найти где у луча и прямой совпадают x и y:
    В аттаче мое пересечение луча с прямой на FPU там правда и весьма коряво все но работает...
     
  6. rom19

    rom19 New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2010
    Сообщения:
    12
    Спасибо большое!!!!!!!!!!!!!!!!!!!!!
    Щас глянем!
     
  7. rom19

    rom19 New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2010
    Сообщения:
    12
    А на чем ты писал? (Среда программирования)
    И как сделать ввод своих координат? (препятствие и источника)
    И еще вопрос: я думал будет что то типа тени... А тут отражение... Если покороче прпятствие сделать- будет тень?
     
  8. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    261
    длина красной линии - t
    зеленой t2
    [​IMG]
     
  9. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    261
    >А на чем ты писал? (Среда программирования)
    FASM
    >И как сделать ввод своих координат? (препятствие и источника)
    Как хочешь
    >И еще вопрос: я думал будет что то типа тени... А тут отражение... Если покороче прпятствие сделать- будет тень?
    Там просто перпендикуляры рисуются - нет там отражения
    И вообще это примитивный рассчет пересечения луча с прямой
     
  10. rom19

    rom19 New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2010
    Сообщения:
    12
    Ага. Ясно. Ну уменя просто курсовик по теме SSE нужно сделать тестовую прогу длядемонстрации возмонжостей появившихся в SSE. И просто реализовать прямой алгоритм трассировки лучей. Я так понимаю - эта программа есть примитивная трассировка лучей.
    Прокатит наверно))) Спасибо еще раз.
    А вот возможно ли как то добавить ввод своих координат вручную. Кнопку там сделать? Или окно ввода? (Извините, я просто в FASM не работал и не знаю. В делфи то все проще. Кинул компонент на форму и все.)
     
  11. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    261
    Ну сделай через файл
     
  12. rom19

    rom19 New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2010
    Сообщения:
    12
    Скачал Fasm отсюда. http://www.wasm.ru/toollist.php?list=7 -FASM 1.67.26
    Чо то после компиляции на нем не запускается. Можт скините свой FASM? Пожалуйста!
     
  13. rom19

    rom19 New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2010
    Сообщения:
    12
    Ладно. С оф. сайта возьму.Тема закрыта.
     
  14. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    261
    http://flatassembler.net/download.php
    Вряд ли новая версия поможет конечно
    Наверное вся проблема в том что вы лишь скомпилировали - запускайте экзешник
     
  15. rom19

    rom19 New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2010
    Сообщения:
    12
    А надо? как
     
  16. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    261
    двойным кликом как
     
  17. rom19

    rom19 New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2010
    Сообщения:
    12
    да конешно я запускал экзешник. и в проводнике запускал. и в FASM нажимал run
     
  18. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    261
    Ну тогда говорите что пишет или вообще что запустил что нет?
    А то непонятно так
     
  19. rom19

    rom19 New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2010
    Сообщения:
    12
    Да нет. Все работает. Разобрался.