|
@@ -157,22 +157,34 @@ class HMDOut extends BaseLibrary {
|
|
}
|
|
}
|
|
|
|
|
|
var points : Array<h3d.col.Point> = [];
|
|
var points : Array<h3d.col.Point> = [];
|
|
|
|
+ var psearch = new haxe.ds.Vector(1024);
|
|
|
|
+ inline function getPID(x:Float,y:Float,z:Float) {
|
|
|
|
+ return Std.int(((x + y + z) * 100) % 1024) & 1023;
|
|
|
|
+ }
|
|
var pmap = [];
|
|
var pmap = [];
|
|
for( vid in 0...g.vertexCount ) {
|
|
for( vid in 0...g.vertexCount ) {
|
|
var x = vbuf[vid * stride];
|
|
var x = vbuf[vid * stride];
|
|
var y = vbuf[vid * stride + 1];
|
|
var y = vbuf[vid * stride + 1];
|
|
var z = vbuf[vid * stride + 2];
|
|
var z = vbuf[vid * stride + 2];
|
|
|
|
+ var pid = getPID(x,y,z);
|
|
|
|
+ var indexes = psearch[pid];
|
|
var found = false;
|
|
var found = false;
|
|
- for( i in 0...points.length ) {
|
|
|
|
- var p = points[i];
|
|
|
|
|
|
+ if( indexes == null ) {
|
|
|
|
+ indexes = [];
|
|
|
|
+ psearch[pid] = indexes;
|
|
|
|
+ }
|
|
|
|
+ for( idx in indexes ) {
|
|
|
|
+ var p = points[idx];
|
|
if( p.x == x && p.y == y && p.z == z ) {
|
|
if( p.x == x && p.y == y && p.z == z ) {
|
|
- pmap[vid] = i;
|
|
|
|
|
|
+ pmap[vid] = idx;
|
|
found = true;
|
|
found = true;
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if( !found ) {
|
|
if( !found ) {
|
|
- pmap[vid] = points.length;
|
|
|
|
|
|
+ var idx = points.length;
|
|
|
|
+ pmap[vid] = idx;
|
|
|
|
+ indexes.push(idx);
|
|
points.push(new h3d.col.Point(x,y,z));
|
|
points.push(new h3d.col.Point(x,y,z));
|
|
}
|
|
}
|
|
}
|
|
}
|