Войти
ПрограммированиеФорумОбщее

Быстрый RayCast

#0
17:20, 4 сен. 2014

Привет! Вопросы по оптимизации рейкаста!

Имеется объект, с трансформациями ( Позиция, Поворот, Размер )
Имеется луч Позиция и Направление

Можно ли при переборе вершин не трансформировать каждую, а в начале как то инвертированно трансформировать луч ?

И второй вопрос, у кого есть "быстрая" функция проверки на пересечение луча и треугольника?
В данный момент использую версию из огра - http://www.everfall.com/paste/id.php?qq8057ufcq7e


#1
17:32, 4 сен. 2014

FDsagizi
> Можно ли при переборе вершин не трансформировать каждую, а в начале как то
> инвертированно трансформировать луч ?
можно/нужно.
FDsagizi
> И второй вопрос, у кого есть "быстрая" функция проверки на пересечение луча и
> треугольника?
почти тоже самое что у тебя:

+ Показать
#2
19:40, 4 сен. 2014

FDsagizi
> Можно ли при переборе вершин не трансформировать каждую, а в начале как то
> инвертированно трансформировать луч ?

Да, сначала инвертируешь матрицу трансформации меша, потом на эту матрицу умножаешь позицию и направление.

#3
21:30, 4 сен. 2014

Не забудт только что направление нужно умножать только на подматрицу 3x3 иначе ерунда получится

#4
22:25, 4 сен. 2014

FROL
> Не забудт только что направление нужно умножать только на подматрицу 3x3 иначе
> ерунда получится

Можно и 4х4 для позиции вектор (x,y,z,1), а для направления (x,y,z,0).

#5
22:34, 4 сен. 2014

ну да это тоже вариант

#6
0:21, 5 сен. 2014

FDsagizi
> а в начале как то инвертированно трансформировать луч ?
все так и делают, пересечение с AABB самое быстрое

> функция проверки на пересечение луча и треугольника
там всё обычно сводится к барицентрикам и кешированию дополнительных построений
достаточно быструю реализацию можно на SSE поискать

в своё время помню было распространено SSE4, а нормальный dot product тока в 4.1 сделали

#7
14:35, 5 сен. 2014

Osiris
> Да, сначала инвертируешь матрицу трансформации меша, потом на эту матрицу умножаешь позицию и направление.

Вай вай, просто супер!!! Работает шикарно!

FROL
> Не забудт только что направление нужно умножать только на подматрицу 3x3 иначе ерунда получится
Огромное спасибо!!

#8
16:26, 5 сен. 2014

FDsagizi
> Вай вай, просто супер!!! Работает шикарно!

Есть еще одна особенность, допустим у тебя меш находится в иерархии, скажем на уровне два, то есть итоговая мировая трансформация происходит путем умножения матрицы трансформации меша сначала на матрицу родителя, а потом на матрицу мировой позиции всей иерархии. В таком случае тебе надо сначала переводить луч в пространство родителя, а потом уже в пространство меша, то есть две последовательные трансформации.

ПрограммированиеФорумОбщее

Тема в архиве.