Я пишу трассировщик лучей в java, и я пытаюсь реализовать преломление, но меня смущает информация, которую я нахожу на эту тему. Если у меня есть 3D-вектор для входящего луча света, нормальная поверхность, заданная как 3D-вектор, и показатели преломления двух сред, какие операции мне нужно применить, чтобы получить вектор проходящего луча?Как найти преломляющий вектор от входящего вектора и поверхности нормальный
ответ
V_incedence быть нормализованным входящим вектором. Пусть n1
и n2
являются показателями преломления двух поверхностей. Вы хотите рассчитать V_refraction. Пусть n - нормализованный нормальный вектор.
V_refraction = r*V_incedence + (rc - sqrt(1-r^2(1-c^2)))n
where r = n1/n2 and c = -n dot V_incedence.
Спасибо за ответ. В первой строке это означает добавление вектора V_incedence.multiply (r) с вектором n.multiply (rc - sqrt (1-r^2 (1-c^2)))? – user2320239
Да, точно. –
Я реализовал это в моем луче Java трассера гляньте https://github.com/bradforj287/brads-java-raytracer
private static double clamp(final double val, final double min, final double max) {
return Math.max(min, Math.min(max, val));
}
private Vector3d getRefractionVector(final Vector3d I, final Vector3d N, final double ior) {
double cosi = clamp(-1, 1, I.dot(N));
double etai = 1, etat = ior;
Vector3d n = N;
if (cosi < 0) {
cosi = -cosi;
} else {
double temp = etai;
etai = etat;
etat = temp;
n = N.multiply(-1);
}
double eta = etai/etat;
double k = 1 - (eta * eta) * (1 - (cosi * cosi));
if (k <= 0) {
return Vector3d.ZERO;
} else {
return I.multiply(eta).add(n.multiply(((eta * cosi) - Math.sqrt(k))));
}
}
- 1. Проецируемый нормальный вектор поверхности на плоскость xy
- 2. вычисление угла наклона от поверхности нормальный (nx, ny, nz)
- 3. Как найти нормальный вектор двумерной линии?
- 4. OpenGL нормальный вектор только от вершины
- 5. Как найти нормальный вектор точки контакта между двумя спрайтами
- 6. нормальный для аналитической поверхности
- 7. Как найти нормальный вектор в точке на кривой в MatLab
- 8. Вычисление половины вектора из вектора глаза/камеры и нормальной поверхности
- 9. Невозможно правильно рассчитать нормальный/вектор направления от шага и рыскания
- 10. Стирание вектор :: конец от вектора
- 11. Сортированный вектор индексов от вектора
- 12. Как рассчитать нормальный вектор, основанный на поверхностных углах, используя javascript?
- 13. Вычислить нормальный вектор
- 14. В D3D9, как найти нормальный вектор определенного треугольника в сетке?
- 15. Вычислить нормальный вектор многоугольника - метод Ньюэллса
- 16. Как использовать «вектор вектора»?
- 17. вектор вектора
- 18. Как найти правильное вращение от одного вектора к другому?
- 19. Поверните нормальный вектор на плоскость оси
- 20. Нормальный для поверхности куба в XNA
- 21. Three.js Как вы получаете плоскость от вектора и константы?
- 22. Как я могу получить нормальный вектор сферы?
- 23. Учитывая 3 pts, как вычислить нормальный вектор?
- 24. Расчет расстояния от точки до поверхности вдоль вектора в java?
- 25. Как определить нормальный вектор в плоскости зрения в OpenGL?
- 26. Нахождение вектора в вектор
- 27. opencv :: Mat от вектора вектора
- 28. Matlab вычислить отражение вектора
- 29. Банк угол от вектора и смотреть на вектор?
- 30. вектор строка вектора инициализации
http://en.wikipedia.org/wiki/Snell%27s_law#Vector_form –