X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fqfat%2FMesh.java;h=bbb419ab8777f12a0e10ee56330b45b2b0aaf0e7;hb=eee2dd75dbd926b92f63d4c4adb968a58323717e;hp=51b9249829b5c4fdf23dfde13b3b13e5dba10d14;hpb=8190da98c29041324f9dcaa9bc86d0a8a3f77491;p=anneal.git diff --git a/src/edu/berkeley/qfat/Mesh.java b/src/edu/berkeley/qfat/Mesh.java index 51b9249..bbb419a 100644 --- a/src/edu/berkeley/qfat/Mesh.java +++ b/src/edu/berkeley/qfat/Mesh.java @@ -112,18 +112,27 @@ public class Mesh implements Iterable { gl.glNormal3f(norm.x, norm.y, norm.z); } + public void recomputeFundamentalQuadricIfNeighborChanged() { + Vertex oldv = nearest_in_other_mesh; + Vertex newv = score_against.nearest(p); + if (oldv==newv) return; + recomputeFundamentalQuadric(); + if (oldv!=null) oldv.recomputeFundamentalQuadricIfNeighborChanged(); + //if (newv!=null) newv.recomputeFundamentalQuadricIfNeighborChanged(); + } public void recomputeFundamentalQuadric() { - if (!quadricStale && fundamentalQuadric != null) return; - quadricStale = false; unApplyQuadricToNeighbor(); - Matrix m = Matrix.ZERO; - int count = 0; - for(E e = this.e; e!=null; e=e.pair.next==this.e?null:e.pair.next) { - T t = e.t; - m = m.plus(t.norm().fundamentalQuadric(t.centroid())); - count++; + if (quadricStale || fundamentalQuadric==null) { + Matrix m = Matrix.ZERO; + int count = 0; + for(E e = this.e; e!=null; e=e.pair.next==this.e?null:e.pair.next) { + T t = e.t; + m = m.plus(t.norm().fundamentalQuadric(t.centroid())); + count++; + } + quadricStale = false; + fundamentalQuadric = m.times(1/(float)count); } - fundamentalQuadric = m.times(1/(float)count); applyQuadricToNeighbor(); }