]> git.rm.cloudns.org Git - xonotic/xonotic.git/commitdiff
fix scale and ofs calculations
authorRudolf Polzer <divverent@alientrap.org>
Tue, 30 Aug 2011 17:55:01 +0000 (19:55 +0200)
committerRudolf Polzer <divverent@alientrap.org>
Tue, 30 Aug 2011 17:55:01 +0000 (19:55 +0200)
misc/tools/fft-normalmap-to-heightmap-soft.sh

index 618bf9ef3fc574499083b6e0a8b190110126549d..8fe122eb0bf5cee3ed4103a9f8f4aee404e0b261 100755 (executable)
@@ -17,10 +17,28 @@ realscale=`echo "$s" | grep ^Scale: | cut -d ' ' -f 2`
 realmedian=`echo "$s" | grep ^Scaled-Med: | cut -d ' ' -f 2`
 
 # we have to undo realscale, and apply sca instead
-extrascale=`echo "$sca / $realscale" | bc -l`
+# assume we had an input range of 0 .. 1
+# then this tool will scale by 2, stretching it to 1..255
+# so, scale 2 means a 254/255 scale from DP's view!
+extrascale=`echo "$sca / ($realscale * (127.0 / 255.0))" | bc -l`
 
 # we want to make $realmedian + $ofs neutral
-
-extraoffset=`echo "127.5 - 127.5 * ($realmedian + $ofs)" | bc -l`
+# note: ofs is in pre-scale units
+extraoffset=`echo "($realmedian + $ofs / $realscale)" | bc -l`
+
+# note: this tool maps  -1 to 1 neutral, and +1 to 255 neutral
+#       darkplaces maps  1 to 0 neutral, and  0 to 255 neutral
+#
+# p_t(-1) = 1
+# p_t(+1) = 255
+#   -> p_t(x) = 128 + 127 * x
+# p_d(1) = 0
+# p_d(0) = 255
+#   -> p_d(x) = 255 * (1 - x)
+#   -> p_d^-1(x) = 1 - x / 255
+#
+# we need p_d^-1(p_t(x)) = 1 - (128 + 127 * x) / 255
+#
+extraoffset=`echo "(127.0 / 255.0) * (1 - $extraoffset)" | bc -l`
 
 echo "dpoffsetmapping - $extrascale $extraoffset"