Mercurial > hg > jslab
diff examples/java3d/util.java @ 1:5df24c91468d
Oh my what a mess.
author | samer |
---|---|
date | Fri, 05 Apr 2019 16:26:00 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/java3d/util.java Fri Apr 05 16:26:00 2019 +0100 @@ -0,0 +1,387 @@ +import samer.core.*; +import java.awt.*; +import javax.media.j3d.*; +import javax.vecmath.*; +//import com.sun.j3d.utils.universe.*; +import com.sun.j3d.utils.behaviors.keyboard.*; +import com.sun.j3d.utils.behaviors.mouse.*; +import com.sun.j3d.utils.geometry.*; + +public class util +{ + private static Bounds bounds=new BoundingSphere(new Point3d(0,0,0),1000); + + public static void init() { new samer.core.shells.AppShell(); } + public static void expose(java.awt.Component c,String title) { + Shell.Window win; + win=Shell.getWindow(title); + win.addWindowListener(Shell.exitListener()); + win.container().setLayout(new BorderLayout()); + win.container().add(c); + win.expose(); + } + + public static void setBounds(Bounds b) { bounds=b; } + + public static TransformGroup mouseRotate(TransformGroup tg) + { + MouseRotate m = new MouseRotate(readwrite(tg)); + // mr.setTransformGroup(tg); + m.setSchedulingBounds(bounds); + tg.addChild(m); + return tg; + } + + public static TransformGroup mouseTranslate(TransformGroup tg) + { + MouseTranslate m = new MouseTranslate(readwrite(tg)); + // mr.setTransformGroup(tg); + m.setSchedulingBounds(bounds); + tg.addChild(m); + return tg; + } + + public static TransformGroup mouseZoom(TransformGroup tg) + { + MouseZoom m = new MouseZoom(readwrite(tg)); + // mr.setTransformGroup(tg); + m.setSchedulingBounds(bounds); + tg.addChild(m); + return tg; + } + + public static void addKeyNavigator(Group g, TransformGroup tg) + { + // readwrite(tg); + KeyNavigatorBehavior keynav = new KeyNavigatorBehavior(tg); + keynav.setSchedulingBounds(bounds); + g.addChild(keynav); + } + + public static void addKeyNavigator(Component c, Group g, TransformGroup tg) + { + // readwrite(tg); + KeyNavigatorBehavior keynav = new KeyNavigatorBehavior(c,tg); + keynav.setSchedulingBounds(bounds); + g.addChild(keynav); + } + + public static GeometryInfo yoyoGeometryInfo(int N) + { + GeometryInfo gi=new GeometryInfo(GeometryInfo.TRIANGLE_FAN_ARRAY); + + int totalN = 4*(N+1); + Point3f coords[] = new Point3f[totalN]; + int stripCounts[] = {N+1, N+1, N+1, N+1}; + float r = 0.5f; + float w = 0.5f; + int n; + double a; + float x, y; + + // set the central points for four triangle fan strips + coords[0*(N+1)] = new Point3f(0.0f, 0.0f, w); + coords[1*(N+1)] = new Point3f(0.0f, 0.0f, 0.0f); + coords[2*(N+1)] = new Point3f(0.0f, 0.0f, 0.0f); + coords[3*(N+1)] = new Point3f(0.0f, 0.0f, -w); + + for(a = 0,n = 0; n < N; a = 2.0*Math.PI/(N-1) * ++n){ + x = (float) (r * Math.cos(a)); + y = (float) (r * Math.sin(a)); + coords[0*(N+1)+n+1] = new Point3f(x, y, w); + coords[1*(N+1)+N-n] = new Point3f(x, y, w); + coords[2*(N+1)+n+1] = new Point3f(x, y, -w); + coords[3*(N+1)+N-n] = new Point3f(x, y, -w); + } + + gi.setCoordinates(coords); + gi.setStripCounts(stripCounts); + + return gi; + + } + + public static void addRotator(TransformGroup tg) + { + Alpha alpha = new Alpha(-1, 24000); + Behavior rotator = new RotationInterpolator(alpha, writable(tg)); + rotator.setSchedulingBounds(bounds); + tg.addChild(rotator); + } + + public static Light color(Light l, Color3f c) { l.setColor(c); return l; } + public static Light directionalLight(double x, double y, double z) + { + DirectionalLight l = new DirectionalLight(); + l.setDirection(-(float)x,-(float)y,-(float)z); + l.setInfluencingBounds(bounds); + return l; + } + + public static Light ambientLight() + { + AmbientLight a = new AmbientLight(); + a.setInfluencingBounds(bounds); + return a; + } + + public static Light pointLight(double x, double y, double z) + { + PointLight l = new PointLight(); + l.setInfluencingBounds(bounds); + l.setPosition((float)x,(float)y,(float)z); + l.setAttenuation(0,0,1); + return l; + } + + public static void addBackground(Group g, Background bg) + { // background + bg.setApplicationBounds(bounds); + g.addChild(bg); + } + + public static View setViewPolicy(View v) + { + v.setWindowEyepointPolicy(View.RELATIVE_TO_WINDOW); + //v.setWindowMovementPolicy(View.VIRTUAL_WORLD); + v.setWindowResizePolicy(View.VIRTUAL_WORLD); + //v.repaint(); + return v; + } + + public static ViewPlatform writable(ViewPlatform vp) { + vp.setCapability(ViewPlatform.ALLOW_POLICY_WRITE); return vp; + } + public static TransformGroup writable(TransformGroup tg) { + tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); return tg; + } + public static TransformGroup readwrite(TransformGroup tg) { + tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); + tg.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); + return tg; + } + + public static Group yoyoGroup() { + return yoyoGroup(yoyoGeometryInfo(17).getGeometryArray()); + } + public static Group yoyoGroup(Geometry geom) { + return yoyoGroup(geom,wireframe2(),translucent()); + } + + public static Group yoyoGroup(Geometry geom, Appearance a1, Appearance a2) + { + Shape3D faces=new Shape3D(); + Shape3D edges=new Shape3D(); + + faces.setGeometry(geom); + faces.setAppearance(a1); + edges.setGeometry(geom); + edges.setAppearance(a2); + + BranchGroup bg = new BranchGroup(); + bg.addChild(faces); + bg.addChild(edges); + + return bg; + } + + public static GraphicsConfiguration getGraphicsConfiguration() + { +/* + return GraphicsEnvironment.getLocalGraphicsEnvironment(). + getDefaultScreenDevice().getDefaultConfiguration(); + +*/ + // Canvas default seems to be better than above + return null; + + } + + static Appearance material1() + { + Appearance a = new Appearance(); + PolygonAttributes polyAttrib = new PolygonAttributes(); + polyAttrib.setPolygonOffset(2f); + a.setPolygonAttributes(polyAttrib); + + Material material = new Material(); + material.setDiffuseColor(new Color3f(.6f, 0.5f, 0.7f)); + material.setSpecularColor(new Color3f(.6f, 0.5f, 0.7f)); + material.setShininess(48); + a.setMaterial(material); + return a; + } + + + static Appearance shadedwireframe() + { + Appearance a = new Appearance(); + PolygonAttributes polyAttrib = new PolygonAttributes(); + polyAttrib.setPolygonMode(PolygonAttributes.POLYGON_LINE); + a.setPolygonAttributes(polyAttrib); + a.setLineAttributes(new LineAttributes(2f,LineAttributes.PATTERN_SOLID,false)); + + Material material = new Material(); + material.setDiffuseColor(new Color3f(.7f, 0.6f, 0.9f)); + material.setShininess(128); + a.setMaterial(material); + return a; + } + + + static Appearance translucent() + { + Appearance a = new Appearance(); + PolygonAttributes polyAttrib = new PolygonAttributes(); + ColoringAttributes colorAttrib=new ColoringAttributes(); + a.setPolygonAttributes(polyAttrib); + + { + boolean ft=Shell.getBoolean("yoyo.facetransparency",true); + if (ft) { + a.setTransparencyAttributes( + new TransparencyAttributes(TransparencyAttributes.BLENDED,0.2f) + ); + colorAttrib.setColor(0.45f,0.4f,.5f); + } else { + polyAttrib.setPolygonOffset(2f); + colorAttrib.setColor(0.5f,0.4f,.5f); + } + } + a.setColoringAttributes(colorAttrib); + return a; + } + + static Appearance wireframe1() + { + + Appearance a = new Appearance(); + PolygonAttributes polyAttrib = new PolygonAttributes(); + polyAttrib.setPolygonMode(PolygonAttributes.POLYGON_LINE); + if (!Shell.getBoolean("yoyo.bfacecull",false)) { + polyAttrib.setCullFace(PolygonAttributes.CULL_NONE); + } + a.setLineAttributes( + new LineAttributes((float)Shell.getDouble("yoyo.linewidth",1), + LineAttributes.PATTERN_SOLID,true)); + a.setPolygonAttributes(polyAttrib); + ColoringAttributes redColoring = new ColoringAttributes(); + redColoring.setColor(.6f, 0.4f, 0.5f); + a.setColoringAttributes(redColoring); + a.setTransparencyAttributes( + new TransparencyAttributes(TransparencyAttributes.BLENDED,0.4f)); + + return a; + } + + static Appearance wireframe2() + { + Appearance appearance1 = new Appearance(); + PolygonAttributes polyAttrib = new PolygonAttributes(); + polyAttrib.setPolygonMode( + Shell.getBoolean("yoyo.points",true) ? + PolygonAttributes.POLYGON_POINT : + PolygonAttributes.POLYGON_LINE + + ); + if (!Shell.getBoolean("yoyo.bfacecull",false)) { + polyAttrib.setCullFace(PolygonAttributes.CULL_NONE); + } + + appearance1.setPolygonAttributes(polyAttrib); + appearance1.setPointAttributes( + new PointAttributes((float)Shell.getDouble("yoyo.pointsize",2), false)); + appearance1.setLineAttributes( + new LineAttributes((float)Shell.getDouble("yoyo.linewidth",1), + LineAttributes.PATTERN_SOLID,true)); + appearance1.setTransparencyAttributes( + new TransparencyAttributes(TransparencyAttributes.BLENDED,0.7f)); + ColoringAttributes colorAttrib=new ColoringAttributes(); + colorAttrib.setColor(0.8f,0.6f,1f); + appearance1.setColoringAttributes(colorAttrib); + return appearance1; + } + + static Appearance wireframe3() + { + Appearance appearance1 = new Appearance(); + PolygonAttributes polyAttrib = new PolygonAttributes(); + polyAttrib.setPolygonMode( + Shell.getBoolean("yoyo.points",true) ? + PolygonAttributes.POLYGON_POINT : + PolygonAttributes.POLYGON_LINE + + ); + if (!Shell.getBoolean("yoyo.bfacecull",false)) { + polyAttrib.setCullFace(PolygonAttributes.CULL_NONE); + } + + appearance1.setPolygonAttributes(polyAttrib); + appearance1.setPointAttributes( + new PointAttributes((float)Shell.getDouble("yoyo.pointsize",2), false)); + appearance1.setLineAttributes( + new LineAttributes((float)Shell.getDouble("yoyo.linewidth",1), + LineAttributes.PATTERN_SOLID,true)); + appearance1.setTransparencyAttributes( + new TransparencyAttributes(TransparencyAttributes.BLENDED,0.7f)); + + Material material = new Material(); + material.setDiffuseColor(new Color3f(.8f, 0.6f, 1f)); + appearance1.setMaterial(material); + return appearance1; + } + + public static Appearance pointy() + { + Appearance a = new Appearance(); + PolygonAttributes pa = new PolygonAttributes(); + pa.setPolygonMode(PolygonAttributes.POLYGON_POINT); + pa.setCullFace(PolygonAttributes.CULL_NONE); + a.setPolygonAttributes(pa); + a.setPointAttributes(new PointAttributes(5,false)); + a.setTransparencyAttributes( + new TransparencyAttributes(TransparencyAttributes.BLENDED,0.8f)); +/* + new TransparencyAttributes( + TransparencyAttributes.BLENDED,0.9f, + TransparencyAttributes.BLEND_SRC_ALPHA, + TransparencyAttributes.BLEND_ONE)); +*/ + ColoringAttributes colorAttrib=new ColoringAttributes(); + colorAttrib.setColor(0.8f,0.6f,1f); + a.setColoringAttributes(colorAttrib); + return a; + } + + public static Appearance pointy2() + { + Appearance a = new Appearance(); + PolygonAttributes pa = new PolygonAttributes(); + pa.setPolygonMode(PolygonAttributes.POLYGON_POINT); + pa.setCullFace(PolygonAttributes.CULL_NONE); + a.setPolygonAttributes(pa); + a.setPointAttributes(new PointAttributes(3,false)); + a.setTransparencyAttributes( + new TransparencyAttributes(TransparencyAttributes.BLENDED,0.7f)); + + ColoringAttributes colorAttrib=new ColoringAttributes(); + colorAttrib.setColor(0.8f,0.6f,1f); + a.setColoringAttributes(colorAttrib); + return a; + } + + public static Appearance pointy3() + { + Appearance a = new Appearance(); + PolygonAttributes pa = new PolygonAttributes(); + pa.setPolygonMode(PolygonAttributes.POLYGON_POINT); + pa.setCullFace(PolygonAttributes.CULL_NONE); + a.setPolygonAttributes(pa); + a.setPointAttributes(new PointAttributes(3,false)); + + ColoringAttributes colorAttrib=new ColoringAttributes(); + colorAttrib.setColor(0.8f,0.6f,1f); + a.setColoringAttributes(colorAttrib); + return a; + } +} \ No newline at end of file