diff options
Diffstat (limited to 'src/vec3.cpp')
| -rw-r--r-- | src/vec3.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/vec3.cpp b/src/vec3.cpp index 92ccae4..3346973 100644 --- a/src/vec3.cpp +++ b/src/vec3.cpp @@ -53,7 +53,7 @@ vec3 vec3::cross(const vec3& vec) const { return vec3( y * vec.z - z * vec.y, z * vec.x - x * vec.z, - x * vec.y - y * vec.y + x * vec.y - y * vec.x ); } @@ -111,6 +111,14 @@ vec3 reflect(vec3 v, vec3 n) { return v - 2 * v.dot(n) * n; } +vec3 refract(const vec3& uv, const vec3& n, double etai_over_etat) { + auto cos_theta = fmin(n.dot(-uv), 1.0); + vec3 r_out_perp = etai_over_etat * (uv + cos_theta*n); + vec3 r_out_parallel = -sqrt(fabs(1.0 - r_out_perp.length_sq())) * n; + + return r_out_perp + r_out_parallel; +} + std::ostream& operator<<(std::ostream& out, vec3 vec) { return out << vec.x << ' ' << vec.y << ' ' << vec.z << std::endl; } |
