r5502 - trunk/data/qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Tue Jan 13 05:55:31 EST 2009
Author: div0
Date: 2009-01-13 05:55:31 -0500 (Tue, 13 Jan 2009)
New Revision: 5502
Modified:
trunk/data/qcsrc/server/gamecommand.qc
Log:
improve radarmap accuracy a little bit
Modified: trunk/data/qcsrc/server/gamecommand.qc
===================================================================
--- trunk/data/qcsrc/server/gamecommand.qc 2009-01-13 08:50:05 UTC (rev 5501)
+++ trunk/data/qcsrc/server/gamecommand.qc 2009-01-13 10:55:31 UTC (rev 5502)
@@ -32,28 +32,12 @@
{
vector a, b, mi, ma;
- q *= 0.125;
-
- q = max(1, floor(0.5 + sqrt(q)));
-
mi = '0 0 0';
- ma = '1 0 0' * (w/q) + '0 1 0' * (h/q);
+ ma = '1 0 0' * w + '0 1 0' * h;
a = '1 0 0' * x + '0 1 0' * y + '0 0 1' * zmin;
b = '1 0 0' * x + '0 1 0' * y + '0 0 1' * (zsize - zmin);
- float i, j, s;
- vector d;
-
- for(i = 0; i < q; ++i)
- for(j = 0; j < q; ++j)
- {
- d_x = ma_x * j;
- d_y = ma_y * i;
- s += FullTraceFraction(a + d, mi, ma, b + d);
- }
-
- s /= q * q;
- return s;
+ return FullTraceFraction(a + d, mi, ma, b + d);
}
float RadarMapAtPoint_Block(float x, float y, float w, float h, float zmin, float zsize, float q)
{
@@ -61,7 +45,8 @@
float i, r;
vector dz;
- q *= 255;
+ q = 256 * q - 1;
+ // 256q-1 is the ideal sample count to map equal amount of sample values to one pixel value
mi = '0 0 0';
dz = (zsize / q) * '0 0 1';
@@ -84,14 +69,17 @@
if(trace_startsolid)
++r;
}
- return r / q; // 0 .. 1
+ return r / q;
}
float RadarMapAtPoint_Sample(float x, float y, float w, float h, float zmin, float zsize, float q)
{
vector a, b, mi, ma;
- q *= 2048;
+ q *= 4; // choose q so it matches the regular algorithm in speed
+ q = 256 * q - 1;
+ // 256q-1 is the ideal sample count to map equal amount of sample values to one pixel value
+
mi = '0 0 0';
ma = '1 0 0' * w + '0 1 0' * h;
a = '1 0 0' * x + '0 1 0' * y + '0 0 1' * zmin;
@@ -114,7 +102,9 @@
return c / q;
}
-string doublehex = "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF";
+// FF is contained twice, to map 256 to FF too
+// removes the need to bound()
+string doublehex = "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFFFF";
float RADAR_WIDTH_MAX = 2048;
float RADAR_HEIGHT_MAX = 2048;
@@ -286,7 +276,7 @@
for(x = 0; x < self.size_x; ++x)
{
l = sharpen_get(x, self.ltime);
- fputs(self.cnt, substring(doublehex, 2 * floor(l * 255.0 + 0.5), 2));
+ fputs(self.cnt, substring(doublehex, 2 * floor(l * 256.0), 2));
}
if(self.frame == self.size_y)
fputs(self.cnt, "\"\n");
@@ -306,7 +296,7 @@
for(x = 0; x < self.size_x; ++x)
{
l = sharpen_get(x, self.ltime);
- fputs(self.cnt, substring(doublehex, 2 * floor(l * 255.0 + 0.5), 2));
+ fputs(self.cnt, substring(doublehex, 2 * floor(l * 256.0), 2));
}
if(self.frame == self.size_y)
fputs(self.cnt, "\"\n");
@@ -394,7 +384,8 @@
remove(radarmapper);
print("Usage: sv_cmd radarmap [--force] [--loop] [--quit] [--block | --trace | --sample] [--sharpen N] [--res W H] [--qual Q]\n");
print("The quality factor Q is roughly proportional to the time taken.\n");
- print("The method --trace only supports the quality factors 8, 32, 72, 128.\n");
+ print("--trace supports no quality factor; its result should look like --block with infinite quality factor.\n");
+ print("--block \n");
return;
}
}
More information about the nexuiz-commits
mailing list