diff options
author | phil <[email protected]> | 2016-10-26 13:35:49 +1300 |
---|---|---|
committer | phil <[email protected]> | 2016-10-26 13:35:49 +1300 |
commit | 44dd75f8741d5c79592b7f2e15091151fcce9c5b (patch) | |
tree | 697dcc8c7ef6fe6c4ae54814c8deab3231999e88 | |
parent | d1288f7ae0de87455a2988c1f15dedda2074823f (diff) |
New Overlay2D example for use of the Graphics2D of Canvas3D
4 files changed, 290 insertions, 31 deletions
diff --git a/src/classes/org/jdesktop/j3d/examples/Resources.java b/src/classes/org/jdesktop/j3d/examples/Resources.java index 4010201..a50a188 100644 --- a/src/classes/org/jdesktop/j3d/examples/Resources.java +++ b/src/classes/org/jdesktop/j3d/examples/Resources.java @@ -51,34 +51,40 @@ import java.net.URL; /** * */ -public class Resources { - - /** - * Do not construct an instance of this class. - */ - private Resources() { - - } +public class Resources +{ - /** - * Return the URL of the filename under the resources directory - */ - public static URL getResource(String filename) { - URL url = Resources.class.getClassLoader().getResource(filename); - - if(url == null) - { - try + /** + * Do not construct an instance of this class. + */ + private Resources() + { + + } + + /** + * Return the URL of the filename under the resources directory + */ + public static URL getResource(String filename) + { + URL url = Resources.class.getClassLoader().getResource(filename); + + if (url == null) + { + try { - url = new File(System.getProperty("user.dir") + "/src/classes/org/jdesktop/j3d/examples/"+filename).toURL(); + File f = new File(System.getProperty("user.dir") + "/src/" + filename); + if (!f.exists()) + f = new File(System.getProperty("user.dir") + "/src/classes/org/jdesktop/j3d/examples/" + filename); + + url = f.toURL(); } catch (MalformedURLException e) { e.printStackTrace(); } - } - return url; - } - - + } + return url; + } + } diff --git a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/SamplerTestGLSL.java b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/SamplerTestGLSL.java index c641095..11bfeeb 100644 --- a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/SamplerTestGLSL.java +++ b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/SamplerTestGLSL.java @@ -48,9 +48,6 @@ import java.awt.GraphicsConfiguration; import java.io.File; import java.io.IOException; import java.net.URL; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; -import java.nio.FloatBuffer; import javax.swing.JOptionPane; @@ -60,8 +57,6 @@ import org.jogamp.java3d.BoundingSphere; import org.jogamp.java3d.BranchGroup; import org.jogamp.java3d.Canvas3D; import org.jogamp.java3d.GLSLShaderProgram; -import org.jogamp.java3d.GeometryArray; -import org.jogamp.java3d.J3DBuffer; import org.jogamp.java3d.RotationInterpolator; import org.jogamp.java3d.Shader; import org.jogamp.java3d.ShaderAppearance; @@ -72,19 +67,16 @@ import org.jogamp.java3d.ShaderError; import org.jogamp.java3d.ShaderErrorListener; import org.jogamp.java3d.ShaderProgram; import org.jogamp.java3d.SourceCodeShader; -import org.jogamp.java3d.TexCoordGeneration; import org.jogamp.java3d.Texture; import org.jogamp.java3d.TextureUnitState; import org.jogamp.java3d.Transform3D; import org.jogamp.java3d.TransformGroup; -import org.jogamp.java3d.TriangleStripArray; import org.jogamp.java3d.utils.geometry.Sphere; import org.jogamp.java3d.utils.image.TextureLoader; import org.jogamp.java3d.utils.shader.StringIO; import org.jogamp.java3d.utils.universe.SimpleUniverse; import org.jogamp.java3d.utils.universe.ViewingPlatform; import org.jogamp.vecmath.Point3d; -import org.jogamp.vecmath.Vector4f; public class SamplerTestGLSL extends javax.swing.JFrame { diff --git a/src/classes/org/jdesktop/j3d/examples/overlay2d/Canvas3D2D.java b/src/classes/org/jdesktop/j3d/examples/overlay2d/Canvas3D2D.java new file mode 100644 index 0000000..f0e20cb --- /dev/null +++ b/src/classes/org/jdesktop/j3d/examples/overlay2d/Canvas3D2D.java @@ -0,0 +1,60 @@ +/*
+ * Copyright (c) 2016 JogAmp Community. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+package org.jdesktop.j3d.examples.overlay2d;
+
+import java.awt.GraphicsConfiguration;
+
+import org.jogamp.java3d.Canvas3D;
+import org.jogamp.java3d.J3DGraphics2D;
+
+/**
+ * This is an extension to the Canvas3D with the postRender method overridden to draw some things on the
+ * 2DGraphics of the Canvas3D
+ */
+public class Canvas3D2D extends Canvas3D
+{
+
+ public Canvas3D2D(GraphicsConfiguration gc)
+ {
+ super(gc);
+ }
+
+ @Override
+ public void postRender()
+ {
+ J3DGraphics2D g = getGraphics2D();
+
+ // draw a cross hair
+ g.drawLine((this.getWidth() / 2) - 5, (this.getHeight() / 2), (this.getWidth() / 2) + 5, (this.getHeight() / 2));
+ g.drawLine((this.getWidth() / 2), (this.getHeight() / 2) - 5, (this.getWidth() / 2), (this.getHeight() / 2) + 5);
+
+ g.drawString("This is an example String", 50, 20);
+
+ // etc e.g.
+ //g.drawImage(getBufferedImage(), 10, 50, null);
+
+ g.flush(false);
+
+ }
+
+}
\ No newline at end of file diff --git a/src/classes/org/jdesktop/j3d/examples/overlay2d/Overlay2D.java b/src/classes/org/jdesktop/j3d/examples/overlay2d/Overlay2D.java new file mode 100644 index 0000000..adf4d8f --- /dev/null +++ b/src/classes/org/jdesktop/j3d/examples/overlay2d/Overlay2D.java @@ -0,0 +1,201 @@ +/* + * Copyright (c) 2016 JogAmp Community. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + */ + +package org.jdesktop.j3d.examples.overlay2d; + +import java.awt.GraphicsConfiguration; +import java.net.URL; + +import org.jdesktop.j3d.examples.Resources; +import org.jogamp.java3d.Alpha; +import org.jogamp.java3d.Appearance; +import org.jogamp.java3d.BoundingSphere; +import org.jogamp.java3d.BranchGroup; +import org.jogamp.java3d.GeometryArray; +import org.jogamp.java3d.PolygonAttributes; +import org.jogamp.java3d.RotationInterpolator; +import org.jogamp.java3d.Shape3D; +import org.jogamp.java3d.Texture; +import org.jogamp.java3d.TextureAttributes; +import org.jogamp.java3d.Transform3D; +import org.jogamp.java3d.TransformGroup; +import org.jogamp.java3d.TriangleArray; +import org.jogamp.java3d.utils.image.TextureLoader; +import org.jogamp.java3d.utils.universe.SimpleUniverse; +import org.jogamp.vecmath.Color3f; +import org.jogamp.vecmath.Point3d; +import org.jogamp.vecmath.Point3f; +import org.jogamp.vecmath.TexCoord2f; +import org.jogamp.vecmath.Vector3f; + +/** + * Simple Java 3D example program to show use of the 2DGraphics overlay. + */ +public class Overlay2D extends javax.swing.JFrame +{ + + private SimpleUniverse univ = null; + private BranchGroup scene = null; + + public BranchGroup createSceneGraph() + { + final BranchGroup objRoot = new BranchGroup(); + + // Create a triangle with each point a different color. Remember to + // draw the points in counter-clockwise order. That is the default + // way of determining which is the front of a polygon. + // o (1) + // / \ + // / \ + // (2) o-----o (0) + Shape3D shape = new Shape3D(); + TriangleArray tri = new TriangleArray(3, GeometryArray.COORDINATES | GeometryArray.COLOR_3 | GeometryArray.TEXTURE_COORDINATE_2); + tri.setCoordinate(0, new Point3f(0.5f, 0.0f, 0.0f)); + tri.setCoordinate(1, new Point3f(0.0f, 0.5f, 0.0f)); + tri.setCoordinate(2, new Point3f(-0.5f, 0.0f, 0.0f)); + tri.setColor(0, new Color3f(1.0f, 0.0f, 0.0f)); + tri.setColor(1, new Color3f(0.0f, 1.0f, 0.0f)); + tri.setColor(2, new Color3f(0.0f, 0.0f, 1.0f)); + tri.setTextureCoordinate(0, 0, new TexCoord2f(1.0f, 0.0f)); + tri.setTextureCoordinate(0, 1, new TexCoord2f(0.0f, 1.0f)); + tri.setTextureCoordinate(0, 2, new TexCoord2f(0.0f, 0.0f)); + + // Because we're about to spin this triangle, be sure to draw + // backfaces. If we don't, the back side of the triangle is invisible. + Appearance ap = new Appearance(); + PolygonAttributes pa = new PolygonAttributes(); + pa.setCullFace(PolygonAttributes.CULL_NONE); + ap.setPolygonAttributes(pa); + + // Add a transformed texture to the cube, for interest sake + URL earthURL = Resources.getResource("resources/images/earth.jpg"); + Texture earthTex = new TextureLoader(earthURL, this).getTexture(); + ap.setTexture(earthTex); + + TextureAttributes textureAttributes = new TextureAttributes(); + Transform3D textureTransform = new Transform3D(); + textureTransform.rotZ(Math.PI / 3f); + textureTransform.setTranslation(new Vector3f(10, 1, 0)); + textureAttributes.setTextureTransform(textureTransform); + + ap.setTextureAttributes(textureAttributes); + + shape.setAppearance(ap); + + // Set up a simple RotationInterpolator + BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 5.0); + TransformGroup tg = new TransformGroup(); + Transform3D yAxis = new Transform3D(); + Alpha rotationAlpha = new Alpha(-1, 4000); + tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); + RotationInterpolator rotator = new RotationInterpolator(rotationAlpha, tg, yAxis, 0.0f, (float) Math.PI * 2.0f); + rotator.setSchedulingBounds(bounds); + + shape.setGeometry(tri); + tg.addChild(rotator); + tg.addChild(shape); + objRoot.addChild(tg); + objRoot.compile(); + return objRoot; + + } + + private Canvas3D2D createUniverse() + { + // Get the preferred graphics configuration for the default screen + GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); + + // Create a Canvas3D using the preferred configuration + Canvas3D2D c = new Canvas3D2D(config); + + // Create simple universe with view branch + univ = new SimpleUniverse(c); + + // This will move the ViewPlatform back a bit so the + // objects in the scene can be viewed. + univ.getViewingPlatform().setNominalViewingTransform(); + + // Ensure at least 5 msec per frame (i.e., < 200Hz) + univ.getViewer().getView().setMinimumFrameCycleTime(5); + + return c; + } + + public Overlay2D() + { + // Initialize the GUI components + initComponents(); + + // Create Canvas3D and SimpleUniverse; add canvas to drawing panel + Canvas3D2D c = createUniverse(); + drawingPanel.add(c, java.awt.BorderLayout.CENTER); + + // Create the content branch and add it to the universe + scene = createSceneGraph(); + univ.addBranchGraph(scene); + } + + // ---------------------------------------------------------------- + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents + private void initComponents() + { + drawingPanel = new javax.swing.JPanel(); + + setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); + setTitle("Overlay2D"); + drawingPanel.setLayout(new java.awt.BorderLayout()); + + drawingPanel.setPreferredSize(new java.awt.Dimension(250, 250)); + getContentPane().add(drawingPanel, java.awt.BorderLayout.CENTER); + + pack(); + }// </editor-fold>//GEN-END:initComponents + + /** + * @param args the command line arguments + */ + public static void main(String args[]) + { + + System.setProperty("sun.awt.noerasebackground", "true"); + //System.setProperty("j3d.rend", "jogl2es2"); + + java.awt.EventQueue.invokeLater(new Runnable() { + @Override + public void run() + { + new Overlay2D().setVisible(true); + } + }); + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JPanel drawingPanel; + // End of variables declaration//GEN-END:variables + +} |