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. --- GroupEditor.java | 390 +++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 290 insertions(+), 100 deletions(-) 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; -- Gitblit v1.6.2