Что делают значения ddx и ddy в этом алгоритме пересечения лучей AABB? - PullRequest
0 голосов
/ 31 мая 2010

Кто-нибудь знает, что делают значения ddx и ddy в алгоритме пересечения лучей AABB? Взято со следующего сайта http://www.blitzbasic.com/codearcs/codearcs.php?code=1029 (показать ниже).

Local txmin#,txmax#,tymin#,tymax#

// rox, rdx are the ray origin on the x axis, and ray delta on the x axis ... y-axis is roy and rdy

Local ddx# =1.0/(rox-rdx)
Local ddy# =1.0/(roy-rdy)

If ddx >= 0
    txmin = (bminx - rox) * ddx
    txmax = (bmaxx - rox) * ddx
Else
    txmin = (bmaxx - rox) * ddx
    txmax = (bminx - rox) * ddx
EndIf

If ddy >= 0
    tymin = (bminy - roy) * ddy
    tymax = (bmaxy - roy) * ddy
Else
    tymin = (bmaxy - roy) * ddy
    tymax = (bminy - roy) * ddy
EndIf

If ( (txmin > tymax) Or (tymin > txmax) ) Return 0

If (tymin > txmin) txmin = tymin
If (tymax < txmax) txmax = tymax

Local tzmin#,tzmax#
Local ddz# =1.0/(roz-rdz)

If ddz >= 0
    tzmin = (bminz - roz) * ddz
    tzmax = (bmaxz - roz) * ddz
Else
    tzmin = (bmaxz - roz) * ddz
    tzmax = (bminz - roz) * ddz
EndIf

If (txmin > tzmax) Or (tzmin > txmax) Return 0

Return 1

1 Ответ

0 голосов
/ 30 июня 2010

(rox-rdx, roy-rdy) - это вектор от точки назначения до начальной точки луча. ddx и ddy - обратные значения этих двух координат.

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

...