aboutsummaryrefslogtreecommitdiff
path: root/perspective.txt
diff options
context:
space:
mode:
Diffstat (limited to 'perspective.txt')
-rw-r--r--perspective.txt38
1 files changed, 38 insertions, 0 deletions
diff --git a/perspective.txt b/perspective.txt
new file mode 100644
index 0000000..a9bc097
--- /dev/null
+++ b/perspective.txt
@@ -0,0 +1,38 @@
+fx = rx / rw
+fy = ry / rw
+
+fx = f0x + u * (flx - f0x + v * (frx - flx))
+fy = f0y + u * (fly - f0y + v * (fry - fly))
+fz = f0z + u * (flz - f0z + v * (frz - flz))
+
+rx = r0x + s * (rlx - r0x + t * (rrx - rlx))
+ry = r0y + s * (rly - r0y + t * (rry - rly))
+rz = r0z + s * (rlz - r0z + t * (rrz - rlz))
+
+rx = r0x + s * rlx - s * r0x + s * t * rrx - s * t * rlx
+ = (1 - s) * r0x + s * ((1 - t) * rlx + t * rrx)
+<=> s = (rx - r0x) / ((1 - t) * rlx + t * rrx - r0x)
+
+s = (rx - r0x) / ((1 - t) * rlx + t * rrx - r0x)
+s = (ry - r0y) / ((1 - t) * rly + t * rry - r0y)
+s = (rz - r0z) / ((1 - t) * rlz + t * rrz - r0z)
+
+s = (rx - r0x) / (tlx + t * (rrx - rlx) - r0x)
+s = (ry - r0y) / ((1 - t) * tly + t * rry - r0y)
+s = (rz - r0z) / ((1 - t) * tlz + t * rrz - r0z)
+
+# ry = (1 - s) * r0y + s * ((1 - t) * rly + t * rry)
+# <=> (ry - (1 - s) * r0y) / s = (1 - t) * rly + t * rry
+# <=> t = ((ry - (1 - s) * r0y) / s - rly) / (rry - rly)
+# = ((ry - r0y + s * r0y) / s - rly) / (rry - rly)
+# = ((ry - r0y) / s + r0y - rly) / (rry - rly)
+# = (ry - r0y) / (s * (rry - rly)) + (r0y - rly) / (rry - rly)
+# = (ry - r0y) / ((rx - r0x) / ((1 - t) * tlx + t * rrx - r0x) * (rry - rly)) + (r0y - rly) / (rry - rly)
+
+ry = r0y + s * (rly - r0y + t * (rry - rly))
+ = r0y + ((rx - r0x) / ((1 - t) * tlx + t * rrx - r0x)) * (rly - r0y + t * (rry - rly))
+
+ a = (1 - k) * x + k * y
+ = x + k * (y - x)
+<=> a - x = k * (y - x)
+<=> k = (a - x) / (y - x)