Окружающая окклюзия полушария с центром на произвольной нормали

Я выполняю окклюзию окружающей среды с использованием косинус-взвешенного полушария. До сих пор я предполагаю, что полусфера центрирована относительно нормали (0,0,1), которая указывает в положительном направлении z. Я направил лучи вокруг этого полушария, используя зенитные и азимутальные углы $$0<\ theta <\ pi / 2, 0 <\ phi <2 \ pi $$, где направление луча вычисляется как (sin theta cos phi, sin theta грех фи, соз тета).

Как я мог обобщить это, чтобы работать для произвольной нормы?

1 ответ

Найти локальную систему координат поверхности.

Т.е. пусть ось z будет нормальной. Затем найдите две ортогональные оси для x и y. Это может быть достигнуто, сначала предполагая (0, 1, 0) как ось Y (или альтернативная ось, если это нормально). Затем вычислите ось X как x = cross(y, z) и уточнить ось Y как y = cross(z, x),

Тогда вы можете использовать вашу точку расчета (p) в качестве весов в этой системе координат:

dir = p.x * x + p.y * y + p.z * z
Другие вопросы по тегам