shithub: libgraphics

Download patch

ref: df239037125072efca28411d29f94ed46b31c470
parent: da1284f240a1366c6a40535523906be12e7732ef
author: rodri <rgl@antares-labs.eu>
date: Sun Apr 6 20:06:50 EDT 2025

xform: simplify clip2ndc and ndc2viewport

--- a/xform.c
+++ b/xform.c
@@ -63,11 +63,10 @@
 Point3
 clip2ndc(Point3 p)
 {
-	p.w = p.w == 0? 0: 1.0/p.w;
-	p.x *= p.w;
-	p.y *= p.w;
-	p.z *= p.w;
-	return p;
+	double w;
+
+	w = p.w == 0? 0: 1.0/p.w;
+	return (Point3){p.x*w, p.y*w, p.z*w, w};
 }
 
 /*
@@ -79,18 +78,13 @@
 ndc2viewport(Framebuf *fb, Point3 p)
 {
 	Matrix3 view = {
-		Dx(fb->r)/2.0,             0,       0,       Dx(fb->r)/2.0,
-		0,            -Dy(fb->r)/2.0,       0,       Dy(fb->r)/2.0,
-		0,                         0, 1.0/2.0,             1.0/2.0,
+		Dx(fb->r)/2.0,             0,       0,       Dx(fb->r)/(2*p.w),
+		0,            -Dy(fb->r)/2.0,       0,       Dy(fb->r)/(2*p.w),
+		0,                         0, 1.0/2.0,             1.0/(2*p.w),
 		0,                         0,       0,                   1,
 	};
-	double w;
 
-	w = p.w;
-	p.w = 1;
-	p = xform3(p, view);
-	p.w = w;
-	return p;
+	return xform3(p, view);
 }
 
 Point3