aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorphil <[email protected]>2016-10-26 13:35:49 +1300
committerphil <[email protected]>2016-10-26 13:35:49 +1300
commit44dd75f8741d5c79592b7f2e15091151fcce9c5b (patch)
tree697dcc8c7ef6fe6c4ae54814c8deab3231999e88
parentd1288f7ae0de87455a2988c1f15dedda2074823f (diff)
New Overlay2D example for use of the Graphics2D of Canvas3D
-rw-r--r--src/classes/org/jdesktop/j3d/examples/Resources.java52
-rw-r--r--src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/SamplerTestGLSL.java8
-rw-r--r--src/classes/org/jdesktop/j3d/examples/overlay2d/Canvas3D2D.java60
-rw-r--r--src/classes/org/jdesktop/j3d/examples/overlay2d/Overlay2D.java201
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
+
+}