]> Dogcows Code - chaz/rasterize/blobdiff - vec.h
add texture mapping with perspective correction
[chaz/rasterize] / vec.h
diff --git a/vec.h b/vec.h
index 48635238202c5de1a437161028112bf1085352c1..2634de621fc590366e61e3a109188eb817de3e54 100644 (file)
--- a/vec.h
+++ b/vec.h
@@ -260,6 +260,24 @@ vec_t vec_interp(vec_t v1, vec_t v2, vec_t v3, scal_t b[3])
                    v1.z * b[0] + v2.z * b[1] + v3.z * b[2]);
 }
 
+/*
+ * Interpolate smoothly between three texture coordinates with barycentric
+ * coordinates and perspective correction.
+ */
+INLINE_MAYBE
+vec_t vec_tinterp(vec_t v1, vec_t v2, vec_t v3, scal_t b[3])
+{
+    scal_t denom = (S(1.0) / v1.w) * b[0]
+                 + (S(1.0) / v2.w) * b[1]
+                 + (S(1.0) / v3.w) * b[2];
+    return vec_new(scal_clamp(((v1.x / v1.w) * b[0]
+                             + (v2.x / v2.w) * b[1]
+                             + (v3.x / v3.w) * b[2]) / denom, S(0.0), S(1.0)),
+                   scal_clamp(((v1.y / v1.w) * b[0]
+                             + (v2.y / v2.w) * b[1]
+                             + (v3.y / v3.w) * b[2]) / denom, S(0.0), S(1.0)),
+                   S(0.0));
+}
 
 
 #endif // _VEC_H_
This page took 0.016657 seconds and 4 git commands to generate.