# HG changeset patch # User Sascha L. Teichmann # Date 1537383302 -7200 # Node ID b17e3ce532852bd3b854f028fa013a697b323be4 # Parent a8d32a11b1133c5a173111007b3f5e4b2ab9dd3e octree: simplified cube indexing. diff -r a8d32a11b113 -r b17e3ce53285 cmd/octree2contour/loader.go --- a/cmd/octree2contour/loader.go Wed Sep 19 18:39:03 2018 +0200 +++ b/cmd/octree2contour/loader.go Wed Sep 19 20:55:02 2018 +0200 @@ -158,19 +158,18 @@ } if pos > 0 { // node - if mid := (max-min)*0.5 + min; h <= mid { - stack = append(stack, - frame{ot.index[pos+0], min, mid}, - frame{ot.index[pos+1], min, mid}, - frame{ot.index[pos+3], min, mid}, - frame{ot.index[pos+5], min, mid}) + var zbit int32 + if mid := (max-min)*0.5 + min; h >= mid { + zbit = 4 + min = mid } else { - stack = append(stack, - frame{ot.index[pos+4], mid, max}, - frame{ot.index[pos+5], mid, max}, - frame{ot.index[pos+6], mid, max}, - frame{ot.index[pos+7], mid, max}) + max = mid } + stack = append(stack, + frame{ot.index[pos+0+zbit], min, max}, + frame{ot.index[pos+1+zbit], min, max}, + frame{ot.index[pos+2+zbit], min, max}, + frame{ot.index[pos+3+zbit], min, max}) } else { // leaf pos = -pos - 1 n := ot.index[pos] diff -r a8d32a11b113 -r b17e3ce53285 cmd/tin2octree/builder.go --- a/cmd/tin2octree/builder.go Wed Sep 19 18:39:03 2018 +0200 +++ b/cmd/tin2octree/builder.go Wed Sep 19 20:55:02 2018 +0200 @@ -14,14 +14,31 @@ } var cubes = [8][2]vertex{ - {{0.0, 0.0, 0.0}, {0.5, 0.5, 0.5}}, - {{0.5, 0.0, 0.0}, {1.0, 0.5, 0.5}}, - {{0.0, 0.0, 0.5}, {0.5, 0.5, 1.0}}, - {{0.0, 0.5, 0.5}, {0.5, 1.0, 1.0}}, - {{0.5, 0.0, 0.0}, {1.0, 0.5, 0.5}}, - {{0.5, 0.5, 0.0}, {1.0, 1.0, 0.5}}, - {{0.5, 0.0, 0.5}, {1.0, 0.5, 1.0}}, - {{0.5, 0.5, 0.5}, {1.0, 1.0, 1.0}}, + makeCube(0), + makeCube(1), + makeCube(2), + makeCube(3), + makeCube(4), + makeCube(5), + makeCube(6), + makeCube(7), +} + +func makeCube(i int) [2]vertex { + var d vertex + if i&1 == 1 { + d.x = 0.5 + } + if i&2 == 2 { + d.y = 0.5 + } + if i&4 == 4 { + d.z = 0.5 + } + return [2]vertex{ + vertex{0.0, 0.0, 0.0}.add(d), + vertex{0.5, 0.5, 0.5}.add(d), + } } func (tb *treeBuilder) build() { diff -r a8d32a11b113 -r b17e3ce53285 cmd/tin2octree/vertex.go --- a/cmd/tin2octree/vertex.go Wed Sep 19 18:39:03 2018 +0200 +++ b/cmd/tin2octree/vertex.go Wed Sep 19 20:55:02 2018 +0200 @@ -38,6 +38,14 @@ } } +func (v vertex) add(w vertex) vertex { + return vertex{ + v.x + w.x, + v.y + w.y, + v.z + w.z, + } +} + func interpolate(v1, v2 vertex) func(vertex) vertex { v2 = v2.sub(v1) return func(s vertex) vertex {