aboutsummaryrefslogtreecommitdiffstats
path: root/src/vec3.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/vec3.cpp')
-rw-r--r--src/vec3.cpp10
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;
}