From 89da025f40680d9cea46f2b0a7c8c6829a0d0451 Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Sun, 12 Apr 2015 19:37:37 -0400 Subject: [PATCH] Height fields. --- ObjEditor.java | 2 Texture.java | 4 Mocap.java | 16 BiparamEditor.java | 4 /dev/null | 26 -- ScriptNode.java | 8 BoundaryRep.java | 85 ++++++- HeightField.java | 26 ++ CameraPane.java | 22 + KDNode.java | 2 GroupEditor.java | 390 ++++++++++++++++++++++++-------- Checker.java | 27 ++ CheckerInterface.java | 5 KDTree.java | 4 Object3D.java | 61 +++- iHeightField.java | 13 + 16 files changed, 514 insertions(+), 181 deletions(-) diff --git a/BiparamEditor.java b/BiparamEditor.java index f6f1aef..1525688 100644 --- a/BiparamEditor.java +++ b/BiparamEditor.java @@ -66,9 +66,9 @@ */ super.SetupUI2(oe); - uDivsField = AddSlider(oe.ctrlPanel, "U #", biparam.minUDivs, 256+biparam.minUDivs, biparam.uDivs); + uDivsField = AddSlider(oe.ctrlPanel, "U #", biparam.minUDivs, 1024+biparam.minUDivs, biparam.uDivs); Return(); - vDivsField = AddSlider(oe.ctrlPanel, "V #", biparam.minVDivs, 256+biparam.minVDivs, biparam.vDivs); + vDivsField = AddSlider(oe.ctrlPanel, "V #", biparam.minVDivs, 1024+biparam.minVDivs, biparam.vDivs); Return(); // oe.aConstraints.gridwidth = 1; // oe.aConstraints.fill = GridBagConstraints.VERTICAL; diff --git a/BoundaryRep.java b/BoundaryRep.java index 931cfab..693d818 100644 --- a/BoundaryRep.java +++ b/BoundaryRep.java @@ -3531,7 +3531,7 @@ e.printStackTrace(); } - Trim(wastrim,true,crease,wasstrip,false); + Trim(true/*wastrim*/,true,crease,wasstrip,false); } void GenNormalsJME() @@ -5038,6 +5038,59 @@ colors = null; } + void CreateMesh(iHeightField hf, int x, int y) + { + BoundaryRep tmp = new BoundaryRep(); + + int vc = 0; + + Vertex v = new Vertex(true); + + for (int i=0; i<x; i++) + { + for (int j=0; j<y; j++) + { +// Vertex v = tmp.GetVertex(vc++); + + v.s = v.x = i; + v.t = v.z = j; + v.s /= x; v.t /= y; + v.y = hf.f(i,j); + + int iu = tmp.AddTableVertex(v); + + v.s = v.x = i+1; + v.t = v.z = j; + v.s /= x; v.t /= y; + v.y = hf.f(i+1,j); + + int iv = tmp.AddTableVertex(v); + + v.s = v.x = i+1; + v.t = v.z = j+1; + v.s /= x; v.t /= y; + v.y = hf.f(i+1,j+1); + + int iw = tmp.AddTableVertex(v); + + v.s = v.x = i; + v.t = v.z = j+1; + v.s /= x; v.t /= y; + v.y = hf.f(i,j+1); + + int ix = tmp.AddTableVertex(v); + + tmp.AddFace(iu,iw,iv); + tmp.AddFace(iu,ix,iw); + } + } + + Set(tmp); + + Trim(true,false,true); + ClearColors(); + } + void Stripify() { if (stripified) @@ -5297,18 +5350,10 @@ double minweight = 1E10; nbbadfaces = 0; - for (int i=faces.size(); (i-=8)>=0;) + for (int i=0; i<faces.size(); i+=8) +// for (int i=faces.size(); (i-=8)>=0;) { Face face = (Face) faces.get(i); - - //?? if (face.weight < 0) - // continue; - - double K = 1; // 0.01; // .25; - - double factor = (1-K)*face.nbiterations + K; //*face.weight; - - double weight = FaceWeight(face); // *Math.pow(PerimeterMax(face),0.25)*factor; if (!Valid(face)) { @@ -5327,10 +5372,21 @@ !ValidValence(face.r)) continue; + //?? if (face.weight < 0) + // continue; + + double K = 1; // 0.01; // .25; + + double factor = (1-K)*face.nbiterations + K; //*face.weight; + + double weight = FaceWeight(face); // *Math.pow(PerimeterMax(face),0.25)*factor; + if (minweight > weight) { minweight = weight; chosen = i; + if (minweight == 0) + break; } } @@ -7373,7 +7429,7 @@ if (max < maxz - minz) max = maxz - minz; - tmp.THRESHOLD = max/25; // 50; + tmp.THRESHOLD = 0.5; // max/25; // 50; tmp.faces.clear(); @@ -7932,6 +7988,8 @@ minface.q = minface.r = minface.p; + int count = 0; + for (int i=0; i<faces.size(); i++) { Face face = (Face) faces.get(i); @@ -7943,6 +8001,9 @@ TouchVertex(face.r, true); // , minface.weight); // assert(!lock); faces.remove(i--); + count++; + if (count == 4) + break; } } diff --git a/CameraPane.java b/CameraPane.java index b9fb49f..3e6f8d9 100644 --- a/CameraPane.java +++ b/CameraPane.java @@ -768,6 +768,8 @@ class CacheTexture { com.sun.opengl.util.texture.Texture texture; + com.sun.opengl.util.texture.TextureData texturedata; + int resolution; CacheTexture(com.sun.opengl.util.texture.Texture tex, int res) @@ -6451,7 +6453,7 @@ return; // true; } - com.sun.opengl.util.texture.Texture GetTexture(String tex, boolean bump, int resolution) + CacheTexture GetCacheTexture(String tex, boolean bump, int resolution) { CacheTexture/*com.sun.opengl.util.texture.Texture*/ texture = null; @@ -6665,6 +6667,8 @@ thetex.texture.dispose(); textures.remove(texname); } + + texture.texturedata = texturedata; textures.put(texname, texture); // newtex = true; @@ -6681,6 +6685,13 @@ } } + return texture; + } + + com.sun.opengl.util.texture.Texture GetTexture(String tex, boolean bump, int resolution) + { + CacheTexture texture = GetCacheTexture(tex, bump, resolution); + if (bump) { // GraphreeD.trace("PUSH BUMP " + tex + "(" + bumpdepth + ")" + " : " + texture); @@ -6693,6 +6704,13 @@ } return texture!=null?texture.texture:null; + } + + com.sun.opengl.util.texture.TextureData GetTextureData(String tex, boolean bump, int resolution) + { + CacheTexture texture = GetCacheTexture(tex, bump, resolution); + + return texture!=null?texture.texturedata:null; } boolean BindTexture(String tex, boolean bump, int resolution) @@ -10253,7 +10271,7 @@ return; } - if (obj instanceof CheckerIG) + if (obj instanceof Checker) { checker = obj; diff --git a/Checker.java b/Checker.java index d62b2ab..d1fffe7 100644 --- a/Checker.java +++ b/Checker.java @@ -1,5 +1,26 @@ -//package edu.wlu.cs.levy.CG; +class Checker extends Object3D +{ + Checker() + { + this("Checker"); + } + + Checker(String name) + { + super(name); + + material = new cMaterial(); + + material.ambient = 100; + material.specular = 0.001f; + material.diffuse = 0.01f; + material.cameralight = 0.001f; + } -public interface Checker<T> { - public boolean usable(T v); + Object3D deepCopy() + { + Object3D comp = new Checker(); + deepCopySelf(comp); + return comp; + } } diff --git a/CheckerIG.java b/CheckerIG.java deleted file mode 100644 index 94d5993..0000000 --- a/CheckerIG.java +++ /dev/null @@ -1,26 +0,0 @@ -class CheckerIG extends Object3D -{ - CheckerIG() - { - this("Checker"); - } - - CheckerIG(String name) - { - super(name); - - material = new cMaterial(); - - material.ambient = 100; - material.specular = 0.001f; - material.diffuse = 0.01f; - material.cameralight = 0.001f; - } - - Object3D deepCopy() - { - Object3D comp = new CheckerIG(); - deepCopySelf(comp); - return comp; - } -} diff --git a/CheckerInterface.java b/CheckerInterface.java new file mode 100644 index 0000000..5c6b626 --- /dev/null +++ b/CheckerInterface.java @@ -0,0 +1,5 @@ +//package edu.wlu.cs.levy.CG; + +public interface CheckerInterface<T> { + public boolean usable(T v); +} diff --git a/GroupEditor.java b/GroupEditor.java index f50fede..200e78d 100644 --- a/GroupEditor.java +++ b/GroupEditor.java @@ -14,7 +14,7 @@ //import buoy.widget.BFileChooser; -class GroupEditor extends ObjEditor implements iParse, //iCallBack, +class GroupEditor extends ObjEditor implements //iParse, //iCallBack, ObjectUI, Runnable, ActionListener, @@ -188,8 +188,9 @@ clearItem.addActionListener(this); clearAllItem = menu.add(new MenuItem("Clear All")); clearAllItem.addActionListener(this); - menu.add("-"); - resetMeshItem = menu.add(new MenuItem("Reset All")); + + oe.menuBar.add(menu = new Menu("Setting")); + resetMeshItem = menu.add(new MenuItem("Reset All")); resetMeshItem.addActionListener(this); stepAllItem = menu.add(new MenuItem("Step All")); stepAllItem.addActionListener(this); @@ -221,7 +222,7 @@ setMasterItem = menu.add(new MenuItem("Set Master Mesh")); setMasterItem.addActionListener(this); - oe.menuBar.add(menu = new Menu("Object")); + oe.menuBar.add(menu = new Menu("Group")); grabItem = menu.add(new MenuItem("Grab")); grabItem.addActionListener(this); frontItem = menu.add(new MenuItem("Front")); @@ -247,7 +248,8 @@ scriptNodeItem.addActionListener(this); cameraItem = menu.add(new MenuItem("Camera")); cameraItem.addActionListener(this); - menu.add("-"); + + oe.menuBar.add(menu = new Menu("Object")); textureItem = menu.add(new MenuItem("Texture")); textureItem.addActionListener(this); csgItem = menu.add(new MenuItem("CSG")); @@ -292,8 +294,6 @@ untrimItem = menu.add(new MenuItem("Untrim")); untrimItem.addActionListener(this); menu.add("-"); - clearMaterialsItem = menu.add(new MenuItem("Clear Materials")); - clearMaterialsItem.addActionListener(this); clearColorsItem = menu.add(new MenuItem("Clear AO")); clearColorsItem.addActionListener(this); reverseNormalsItem = menu.add(new MenuItem("Reverse Normals")); @@ -310,6 +310,10 @@ smoothMeshItem.addActionListener(this); clipMeshItem = menu.add(new MenuItem("Clip mesh")); clipMeshItem.addActionListener(this); + + oe.menuBar.add(menu = new Menu("Attributes")); + clearMaterialsItem = menu.add(new MenuItem("Clear Materials")); + clearMaterialsItem.addActionListener(this); menu.add("-"); liveleavesItem = menu.add(new MenuItem("Live Leaves")); liveleavesItem.addActionListener(this); @@ -332,27 +336,18 @@ flipVItem.addActionListener(this); unflipVItem = menu.add(new MenuItem("Unflip V")); unflipVItem.addActionListener(this); - lowTexturesItem = menu.add(new MenuItem("Low Texture")); + lowTexturesItem = menu.add(new MenuItem("Low Texture (256)")); lowTexturesItem.addActionListener(this); - normalTexturesItem = menu.add(new MenuItem("Normal Texture")); + normalTexturesItem = menu.add(new MenuItem("Normal Texture (512)")); normalTexturesItem.addActionListener(this); - highTexturesItem = menu.add(new MenuItem("High Texture")); + highTexturesItem = menu.add(new MenuItem("High Texture (1024)")); highTexturesItem.addActionListener(this); - veryhighTexturesItem = menu.add(new MenuItem("Very high Texture")); + veryhighTexturesItem = menu.add(new MenuItem("Very high Texture (2048)")); veryhighTexturesItem.addActionListener(this); - maxTexturesItem = menu.add(new MenuItem("Max Texture")); + maxTexturesItem = menu.add(new MenuItem("Max Texture (4096)")); maxTexturesItem.addActionListener(this); - panoTexturesItem = menu.add(new MenuItem("Panoramic Texture")); + panoTexturesItem = menu.add(new MenuItem("Panoramic Texture (8192)")); panoTexturesItem.addActionListener(this); - menu.add("-"); - extractGeometriesItem = menu.add(new MenuItem("Link Geometry")); - extractGeometriesItem.addActionListener(this); - cloneGeometriesItem = menu.add(new MenuItem("Clone Geometry")); - cloneGeometriesItem.addActionListener(this); - shareGeometriesItem = menu.add(new MenuItem("Share Geometry")); - shareGeometriesItem.addActionListener(this); - mergeGeometriesItem = menu.add(new MenuItem("Merge Geometry")); - mergeGeometriesItem.addActionListener(this); oe.menuBar.add(menu = new Menu("Selection")); attachPigmentItem = menu.add(new MenuItem("Attach Pigment...")); @@ -370,9 +365,31 @@ sortbysizeItem.addActionListener(this); sortbynameItem = menu.add(new MenuItem("Sort by name")); sortbynameItem.addActionListener(this); + menu.add("-"); + extractGeometriesItem = menu.add(new MenuItem("Link Geometry")); + extractGeometriesItem.addActionListener(this); + cloneGeometriesItem = menu.add(new MenuItem("Clone Geometry")); + cloneGeometriesItem.addActionListener(this); + shareGeometriesItem = menu.add(new MenuItem("Share Geometry")); + shareGeometriesItem.addActionListener(this); + mergeGeometriesItem = menu.add(new MenuItem("Merge Geometry")); + mergeGeometriesItem.addActionListener(this); + oe.menuBar.add(menu = new Menu("Insert")); buildCreateMenu(menu); - oe.menuBar.add(menu = new Menu("Tools")); + + + oe.menuBar.add(menu = new Menu("Include")); + importGFDItem = menu.add(new MenuItem("GraphreeD Object...")); + importGFDItem.addActionListener(this); + importVRMLX3DItem = menu.add(new MenuItem("VRML/X3D Object...")); + importVRMLX3DItem.addActionListener(this); + importOBJItem = menu.add(new MenuItem("OBJ Object...")); + importOBJItem.addActionListener(this); + import3DSItem = menu.add(new MenuItem("3DS Object...")); + import3DSItem.addActionListener(this); + + oe.menuBar.add(menu = new Menu("Tools")); buildToolsMenu(menu); } @@ -1002,6 +1019,8 @@ void buildCreateMenu(Menu menu) { + //heightFieldItem = menu.add(new MenuItem("Height Field")); + //heightFieldItem.addActionListener(this); gridItem = menu.add(new MenuItem("Grid")); gridItem.addActionListener(this); rectoidItem = menu.add(new MenuItem("Box")); @@ -1048,15 +1067,6 @@ doubleItem.addActionListener(this); tripleItem = menu.add(new MenuItem("Trident")); tripleItem.addActionListener(this); - menu.add("-"); - importGFDItem = menu.add(new MenuItem("GraphreeD Object...")); - importGFDItem.addActionListener(this); - importVRMLX3DItem = menu.add(new MenuItem("VRML/X3D Object...")); - importVRMLX3DItem.addActionListener(this); - importOBJItem = menu.add(new MenuItem("OBJ Object...")); - importOBJItem.addActionListener(this); - import3DSItem = menu.add(new MenuItem("3DS Object...")); - import3DSItem.addActionListener(this); } void buildToolsMenu(Menu menu) @@ -1068,6 +1078,8 @@ menu.add("-"); parseverticesItem = menu.add(new MenuItem("Multiplicity")); parseverticesItem.addActionListener(this); + textureFieldItem = menu.add(new MenuItem("Texture Field")); + textureFieldItem.addActionListener(this); alignItem = menu.add(new MenuItem("Align")); alignItem.addActionListener(this); mirrorItem = menu.add(new MenuItem("Mirror Poses")); @@ -1521,6 +1533,46 @@ makeSomething(ragdoll); //makeSomething(new VehicleDemo()); } else + /* + */ + if (event.getSource() == heightFieldItem) + { + Object3D obj = new Object3D(); + + obj.CreateMaterial(); + obj.bRep = new BoundaryRep(); + + obj.bRep.CreateMesh(new iHeightField() + { + public double f(double x, double y) + { + // The Mandelbrot set is represented by coloring + // each point (x,y) according to the number of + // iterations it takes before the while loop in + // this method ends. For points that are actually + // in the Mandelbrot set, or very close to it, the + // count will reach the maximum value, 80. These + // points will be colored purple. All other colors + // represent points that are definitely NOT in the set. + x -= 600; + y -= 500; + x /= 200; + y /= 200; + int count = 0; + double zx = x; + double zy = y; + while (count < 80 && Math.abs(x) < 100 && Math.abs(zy) < 100) { + double new_zx = zx*zx - zy*zy + x; + zy = 2*zx*zy + y; + zx = new_zx; + count++; + } + return count; // Math.sqrt(count); + } + }, 1000,1000); + + makeSomething(obj); + } else if (event.getSource() == gridItem) { makeSomething(new Grid()); @@ -1570,7 +1622,7 @@ LA.matConcat(obj.toParent, cameraView.renderCamera.fromParent, obj.toParent); LA.matInvert(obj.toParent, obj.fromParent); */ - makeSomething(new CheckerIG()); + makeSomething(new Checker()); } else if (event.getSource() == meshItem) { @@ -2352,6 +2404,10 @@ if (event.getSource() == parseverticesItem) { ParseVertices(); + } else + if (event.getSource() == textureFieldItem) + { + TextureVertices(); } else if (event.getSource() == alignItem) { @@ -3157,96 +3213,228 @@ //Object3D buffer; cVector temp = new cVector(); - BoundaryRep temprep; - Object3D nodes; - Vector<Vertex> vertices; - - public void Vertex(Object3D node, Vertex v) - { - vertices.add(v); - nodes.addElement(node); - - if (temprep.GetCache(v) != null) - { - temprep.Remove(v); - } - else - { - temprep.Remember(v); - } - } - - public void Face(Object3D node, Face f) - { - - } - +// BoundaryRep temprep; +// Object3D nodes; +// Vector<Vertex> vertices; +// +// cGroup buffer; +// +// public void Vertex(Object3D node, Vertex v) +// { +//// vertices.add(v); +//// nodes.addElement(node); +//// +//// if (temprep.GetCache(v) != null) +//// { +//// temprep.Remove(v); +//// } else +//// { +//// temprep.Remember(v); +//// } +// +// //Object3D node = nodes.get(index); +// temp.set(v); // vertices.get(index)); // temprep.GetVertex(k)); +// // System.out.println("temp = " + temp.x + ", " + temp.y + ", " + temp.z); +// +// LA.xformPos(temp, node.GlobalTransformInv(), temp); +// +// // System.out.println("tem+ = " + temp.x + ", " + temp.y + ", " + temp.z); +// +// cGroup g = new cGroup(); +// +// if (g.toParent == null) +// { +// g.toParent = LA.newMatrix(); +// g.fromParent = LA.newMatrix(); +// } +// LA.matTranslate(g.toParent, temp.x, temp.y, temp.z); +// LA.matTranslate(g.fromParent, -temp.x, -temp.y, -temp.z); +// +// g.add(GraphreeD.clipboard); +// +// buffer.add(g); +// } +// +// public void Face(Object3D node, Face f) +// { +// +// } +// +// void ParseVerticesOld() // ?? +// { +// //if (group.selection.size() != 1) +// // return; +// +// temprep = new BoundaryRep(); +// nodes = new Object3D(); +// vertices = new Vector<Vertex>(); +// +// boolean epsequal = GraphreeD.epsequal; +// GraphreeD.epsequal = true; +// +// for (int i=0; i<group.selection.size(); i++) +// { +// Object3D buffer = new cGroup(group.selection.get(i).name + "+"); +// +// group.selection.get(i).Parse( +//this ); +// +// int repsize = temprep.VertexCount(); +// int tablesize = temprep.vertextable.size(); +// int nodesize = nodes.size(); +// +// assert(vertices.size() == nodes.size()); +// +// temprep.vertextable.elements(); +// +// java.util.Set<java.util.Map.Entry<Vertex,Vertex>> set = temprep.vertextable.entrySet(); +// +// for (java.util.Map.Entry<Vertex,Vertex> entry : set) +// { +// cGroup g = new cGroup(); +// +// int index = vertices.indexOf(entry.getValue()); // temprep.vertextable.(k)); +// +// Object3D node = nodes.get(index); +// temp.set(vertices.get(index)); // temprep.GetVertex(k)); +// // System.out.println("temp = " + temp.x + ", " + temp.y + ", " + temp.z); +// +// LA.xformPos(temp, node.GlobalTransformInv(), temp); +// +// // System.out.println("tem+ = " + temp.x + ", " + temp.y + ", " + temp.z); +// +// if (g.toParent == null) +// { +// g.toParent = LA.newMatrix(); +// g.fromParent = LA.newMatrix(); +// } +// LA.matTranslate(g.toParent, temp.x, temp.y, temp.z); +// LA.matTranslate(g.fromParent, -temp.x, -temp.y, -temp.z); +// +// g.add(GraphreeD.clipboard); +// +// buffer.add(g); +// } +// +// makeSomething(buffer, i==group.selection.size()-1); +// } +// +// GraphreeD.epsequal = epsequal; +// +// //buffer = null; +// temprep = null; +// nodes = null; +// +// refreshContents(); +// } + void ParseVertices() { - //if (group.selection.size() != 1) - // return; - - temprep = new BoundaryRep(); - nodes = new Object3D(); - vertices = new Vector<Vertex>(); - boolean epsequal = GraphreeD.epsequal; GraphreeD.epsequal = true; for (int i=0; i<group.selection.size(); i++) { - Object3D buffer = new cGroup(group.selection.get(i).name + "+"); + final cGroup buffer = new cGroup(group.selection.get(i).name + "+"); - group.selection.get(i).Parse(this); - - int repsize = temprep.VertexCount(); - int tablesize = temprep.vertextable.size(); - int nodesize = nodes.size(); + group.selection.get(i).Parse( + + new iParse() + { + public void Vertex(Object3D node, Vertex v) + { + temp.set(v); + LA.xformPos(temp, node.GlobalTransformInv(), temp); - assert(vertices.size() == nodes.size()); - - temprep.vertextable.elements(); - - java.util.Set<java.util.Map.Entry<Vertex,Vertex>> set = temprep.vertextable.entrySet(); + cGroup g = new cGroup(); - for (java.util.Map.Entry<Vertex,Vertex> entry : set) - { - cGroup g = new cGroup(); + if (g.toParent == null) + { + g.toParent = LA.newMatrix(); + g.fromParent = LA.newMatrix(); + } + LA.matTranslate(g.toParent, temp.x, temp.y, temp.z); + LA.matTranslate(g.fromParent, -temp.x, -temp.y, -temp.z); - int index = vertices.indexOf(entry.getValue()); // temprep.vertextable.(k)); - Object3D node = nodes.get(index); - temp.set(vertices.get(index)); // temprep.GetVertex(k)); - // System.out.println("temp = " + temp.x + ", " + temp.y + ", " + temp.z); + g.add(GraphreeD.clipboard); - LA.xformPos(temp, node.GlobalTransformInv(), temp); - - // System.out.println("tem+ = " + temp.x + ", " + temp.y + ", " + temp.z); - - if (g.toParent == null) - { - g.toParent = LA.newMatrix(); - g.fromParent = LA.newMatrix(); - } - LA.matTranslate(g.toParent, temp.x, temp.y, temp.z); - LA.matTranslate(g.fromParent, -temp.x, -temp.y, -temp.z); + buffer.add(g); + } - g.add(GraphreeD.clipboard); + public void Face(Object3D node, Face f) + { - buffer.add(g); - } + } + } + ); makeSomething(buffer, i==group.selection.size()-1); } GraphreeD.epsequal = epsequal; - //buffer = null; - temprep = null; - nodes = null; + refreshContents(); + } + + void TextureVertices() + { + for (int i=0; i<group.selection.size(); i++) + { + group.selection.get(i).Parse( + new iParse() + { + public void Vertex(Object3D node, Vertex v) + { + cTexture tex = node.GetTextures(); + String pigment = Object3D.GetPigment(tex); + //String bump = Object3D.GetBump(tex); + + com.sun.opengl.util.texture.TextureData texturedata = CameraPane.theRenderer.GetTextureData(pigment, false, node.texres); + + double s = v.s; + + if (s == 1) + s = 0; + + double t = v.t; + + if (t == 1) + t = 0; + + int indexs = (int) (texturedata.getWidth() * s); + int indext = (int) (texturedata.getHeight() * t); + + int index = indext * texturedata.getWidth() + indexs; + + java.nio.ByteBuffer bytebuf = (java.nio.ByteBuffer)texturedata.getBuffer(); + + int slide = bytebuf.capacity() / texturedata.getWidth() / texturedata.getHeight(); + + float scale = bytebuf.get(index*slide) & 0xFF; + scale += bytebuf.get(index*slide+1) & 0xFF; + scale += bytebuf.get(index*slide+2) & 0xFF; + scale /= 3; + + scale /= 0xFF; + scale /= 4; + + //v.AO = scale; + + v.x += v.norm.x * scale; + v.y += v.norm.y * scale; + v.z += v.norm.z * scale; + } + + public void Face(Object3D node, Face f) + { + } + } + ); + } refreshContents(); } - + void Align() { for (int i=0; i<group.selection.size(); i++) @@ -4728,6 +4916,8 @@ private MenuItem particleItem; private MenuItem ragdollItem; private MenuItem ragdoll2Item; + private MenuItem heightFieldItem; + private MenuItem textureFieldItem; private MenuItem gridItem; private MenuItem rectoidItem; private MenuItem ellipsoidItem; diff --git a/HeightField.java b/HeightField.java new file mode 100644 index 0000000..1c3325b --- /dev/null +++ b/HeightField.java @@ -0,0 +1,26 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +/** + * + * @author nbriere + */ +public class HeightField extends Grid +{ + iHeightField heightField; + + HeightField(iHeightField hf) + { + heightField = hf; + } + + Vertex biparamFunction(double u, double v) + { + Vertex temp = new Vertex((2*v-1)*radius*8, 0 /*-radius,*/, (2*u-1)*radius*8); + temp.norm = LA.newVector(0,1,0); + return temp; + } + +} diff --git a/KDNode.java b/KDNode.java index 6479992..7ce90d3 100644 --- a/KDNode.java +++ b/KDNode.java @@ -140,7 +140,7 @@ protected static <T> void nnbr(KDNode<T> kd, HPoint target, HRect hr, double max_dist_sqd, int lev, int K, NearestNeighborList<KDNode<T>> nnl, - Checker<T> checker, + CheckerInterface<T> checker, long timeout) { diff --git a/KDTree.java b/KDTree.java index 5832c5d..ea6ebe6 100644 --- a/KDTree.java +++ b/KDTree.java @@ -285,7 +285,7 @@ * @throws IllegalArgumentException if <I>n</I> is negative or * exceeds tree size */ - public List<T> nearest(double[] key, int n, Checker<T> checker) + public List<T> nearest(double[] key, int n, CheckerInterface<T> checker) throws KeySizeException, IllegalArgumentException { @@ -360,7 +360,7 @@ } private NearestNeighborList<KDNode<T>> getnbrs(double[] key, int n, - Checker<T> checker) throws KeySizeException + CheckerInterface<T> checker) throws KeySizeException { if (key.length != m_K) diff --git a/Mocap.java b/Mocap.java index d01cb85..88fa618 100644 --- a/Mocap.java +++ b/Mocap.java @@ -754,7 +754,7 @@ //long // june 2014 floorid = sourcenode.getFloor(floor); // , sourcenode.parent); - CameraPane.debugpoints[0].name = "Floor = " + floorid; + CameraPane.debugpoints[0].name = ""; // "Floor = " + 0; // floorid; CameraPane.debugpoints[0].toParent[3][0] = floor.x; CameraPane.debugpoints[0].toParent[3][1] = floor.y; CameraPane.debugpoints[0].toParent[3][2] = floor.z; @@ -770,7 +770,7 @@ this.count--; // currently drawing itself - CameraPane.debugpoints[7].name = "Centroid = " + groundid; // centroid; + CameraPane.debugpoints[7].name = ""; // Centroid = " + 0; // groundid; // centroid; CameraPane.debugpoints[7].toParent[3][0] = centroid.x; CameraPane.debugpoints[7].toParent[3][1] = centroid.y; CameraPane.debugpoints[7].toParent[3][2] = centroid.z; @@ -795,7 +795,7 @@ // jan 2014 sourcenode.parent.TransformToWorld(tmp); - CameraPane.debugpoints[1].name = "C+"; + CameraPane.debugpoints[1].name = ""; // "C+"; CameraPane.debugpoints[1].toParent[3][0] = tmp.x; CameraPane.debugpoints[1].toParent[3][1] = tmp.y; CameraPane.debugpoints[1].toParent[3][2] = tmp.z; @@ -814,7 +814,7 @@ tmp.z = pinz; } - CameraPane.debugpoints[2].name = "Pin"; + CameraPane.debugpoints[2].name = ""; // "Pin"; CameraPane.debugpoints[2].toParent[3][0] = tmp.x; CameraPane.debugpoints[2].toParent[3][1] = tmp.y; CameraPane.debugpoints[2].toParent[3][2] = tmp.z; @@ -822,7 +822,7 @@ //if (sourcenode.parent.parent != null) // jan 2014 sourcenode.parent.TransformToLocal(tmp); //, tmp); - CameraPane.debugpoints[3].name = "C-"; + CameraPane.debugpoints[3].name = ""; // "C-"; CameraPane.debugpoints[3].toParent[3][0] = tmp.x; CameraPane.debugpoints[3].toParent[3][1] = tmp.y; CameraPane.debugpoints[3].toParent[3][2] = tmp.z; @@ -895,14 +895,14 @@ // if (sourcenode.parent.parent != null) // sourcenode.parent.parent.TransformToWorld(floor); //, floor); - CameraPane.debugpoints[5].name = "F++"; + CameraPane.debugpoints[5].name = ""; // "F++"; CameraPane.debugpoints[5].toParent[3][0] = floor.x; CameraPane.debugpoints[5].toParent[3][1] = floor.y; CameraPane.debugpoints[5].toParent[3][2] = floor.z; floor.y = tempg; - CameraPane.debugpoints[6].name = "F+-"; + CameraPane.debugpoints[6].name = ""; // "F+-"; CameraPane.debugpoints[6].toParent[3][0] = floor.x; CameraPane.debugpoints[6].toParent[3][1] = floor.y; CameraPane.debugpoints[6].toParent[3][2] = floor.z; @@ -1318,7 +1318,7 @@ rotsourcenode.TransformToWorld(test); - CameraPane.debugpoints[4].name = "ROT = "; // + test; + CameraPane.debugpoints[4].name = ""; // "ROT = "; // + test; CameraPane.debugpoints[4].toParent[3][0] = test.x; CameraPane.debugpoints[4].toParent[3][1] = test.y; CameraPane.debugpoints[4].toParent[3][2] = test.z; diff --git a/ObjEditor.java b/ObjEditor.java index 689f974..22fab98 100644 --- a/ObjEditor.java +++ b/ObjEditor.java @@ -1336,7 +1336,7 @@ // aConstraints = gbc; // (GridBagConstraints) GraphreeD.clone(gbc); - frame.setSize(800, 600); + frame.setSize(1024, 768); frame.show(); gridPanel.setDividerLocation(1.0); diff --git a/Object3D.java b/Object3D.java index 1b4f39c..8f3990d 100644 --- a/Object3D.java +++ b/Object3D.java @@ -3717,7 +3717,7 @@ boolean getCentroid(cVector centroid, boolean xform) { - assert(false); +// for speaker assert(false); if (blockloop) return false; @@ -4515,16 +4515,28 @@ Object3D GetFileRoot() { + if (overflow) + return null; + + overflow = true; + + Object3D pfr = null; + if (parent == null && fileparent == null) - return this; + pfr = this; if (parent == null && fileparent != null) // V4.gfd??? - return fileparent; + pfr = fileparent; - if (parent == null) - return this; + if (pfr == null && parent == null) + pfr = this; - return parent.GetFileRoot(); + if (pfr == null) + pfr = parent.GetFileRoot(); + + overflow = false; + + return pfr; } cTreePath GetPath() @@ -5280,7 +5292,7 @@ if (name != null && name.contains("sclera")) name = name; - if (this instanceof CheckerIG) + if (this instanceof Checker) return; if (display.drawMode == display.SHADOW && PASSTEST) @@ -7735,8 +7747,15 @@ info.pane.repaint(); } + boolean overflow = false; + void TransformToWorld(cVector out) // , cVector out) { + if (overflow) + return; + + overflow = true; + // june 2013 ??? assert (in == out); cVector in = out; if (toParent != null && !(this instanceof Texture || this instanceof TextureNode)) @@ -7753,6 +7772,8 @@ { (parent!=null?parent:fileparent).TransformToWorld(out); //, out); } + + overflow = false; } void TransformToLocal(cVector out) //, cVector out) @@ -7995,19 +8016,22 @@ max = new cVector(); } - Object3D sourcenode = GetFileRoot(); - - if (!sourcenode.name.contains("rclab")) + if (false) // Can crawl!! { - getBounds(min, max, true); + Object3D sourcenode = GetFileRoot(); - if (min.y != Double.POSITIVE_INFINITY && min.y > 2) + if (sourcenode != null && !sourcenode.name.contains("rclab")) { -// sourcenode.getBounds(min, max, true); - sourcenode.getBounds(v0, v1, true); -// sourcenode.toParent = sourcenode.toParent; -// get(0).toParent = get(0).toParent; -// sourcenode.GlobalTransform(); + getBounds(min, max, true); + + if (min.y != Double.POSITIVE_INFINITY && min.y > 2) + { + // sourcenode.getBounds(min, max, true); + sourcenode.getBounds(v0, v1, true); + // sourcenode.toParent = sourcenode.toParent; + // get(0).toParent = get(0).toParent; + // sourcenode.GlobalTransform(); + } } } @@ -8016,7 +8040,8 @@ if (support != null) { assert(bRep != null); - GraphreeD.Assert(support.bRep == bRep.support); + if (!(support instanceof GenericJoint)) // support.bRep != null) + GraphreeD.Assert(support.bRep == bRep.support); } else { diff --git a/ScriptNode.java b/ScriptNode.java index 93f6266..4ba4bbb 100644 --- a/ScriptNode.java +++ b/ScriptNode.java @@ -285,7 +285,7 @@ else { if (speaker != null) - System.err.println(speaker.GetFileRoot().name + " (not a command) : " + reader.line); + System.err.println(speaker.GetFileRoot().name + " (speaking) : " + reader.line); else System.err.println("no speaker (not a command) : " + reader.line); } @@ -412,7 +412,7 @@ { //path += "/" + Filename(readers[i].script); ScriptReader reader = readers[i]; - path += Filename(readers[i].script) + "; duration=" + reader.duration + "; total=" + reader.totalduration + + path += Filename(reader.script) + "; duration=" + reader.duration + "; total=" + reader.totalduration + "; line#" + reader.linecount + ": " + reader.line; if (reader.line != null && // sept 2014 reader.line.startsWith("_")) @@ -488,7 +488,7 @@ reader = readers[stack] = new ScriptReader(new BufferedReader(new FileReader(script)), reader.totalduration, /*0, 0, "",*/ script); //duration = 0; // june 2014 //linecount = 0; - //reader.script = script; + reader.script = script; // oct 2014 return; } if (command.equals("return")) // line.startsWith("; return")) @@ -1438,7 +1438,7 @@ object.skip = false; return; } - if (command.equals("skipmocap")) + if (command.equals("skipmocap") || command.equals("mocapskip")) // oct 2014 { object.skipmocap = true; return; diff --git a/Texture.java b/Texture.java index a208c91..cb0153c 100644 --- a/Texture.java +++ b/Texture.java @@ -10,8 +10,8 @@ public class Texture extends Composite implements java.io.Serializable { // deprecated due to serial problems - static final long serialVersionUID = //-5280151442948961597L; // new java - 7695543694999681408L; // old java !!! + static final long serialVersionUID = -5280151442948961597L; // new java + // 7695543694999681408L; // old java !!! // default = -8076744133104150348L diff --git a/iHeightField.java b/iHeightField.java new file mode 100644 index 0000000..6cc1102 --- /dev/null +++ b/iHeightField.java @@ -0,0 +1,13 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +/** + * + * @author nbriere + */ +public interface iHeightField +{ + double f(double x, double y); +} -- Gitblit v1.6.2