From c77aa7628fcb50a1dc4c2228d39d2e8e6f0df393 Mon Sep 17 00:00:00 2001 From: phil Date: Wed, 16 Nov 2016 12:56:12 +1300 Subject: background Texture and raster examples added Now that textureFillBackground and textureFillRaster are supported in the gl2es2pipeline --- .../j3d/examples/background/BackgroundTexture.java | 248 +++++++++++++++++++++ .../background/BackgroundTextureGL2ES2.java | 248 +++++++++++++++++++++ .../jdesktop/j3d/examples/raster/RasterTest.java | 203 +++++++++++++++++ .../j3d/examples/raster/RasterTestGL2ES2.java | 205 +++++++++++++++++ 4 files changed, 904 insertions(+) create mode 100644 src/main/java/org/jdesktop/j3d/examples/background/BackgroundTexture.java create mode 100644 src/main/java/org/jdesktop/j3d/examples/background/BackgroundTextureGL2ES2.java create mode 100644 src/main/java/org/jdesktop/j3d/examples/raster/RasterTest.java create mode 100644 src/main/java/org/jdesktop/j3d/examples/raster/RasterTestGL2ES2.java diff --git a/src/main/java/org/jdesktop/j3d/examples/background/BackgroundTexture.java b/src/main/java/org/jdesktop/j3d/examples/background/BackgroundTexture.java new file mode 100644 index 0000000..1c4af94 --- /dev/null +++ b/src/main/java/org/jdesktop/j3d/examples/background/BackgroundTexture.java @@ -0,0 +1,248 @@ +/* + * 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.background; + +import java.awt.GraphicsConfiguration; + +import org.jdesktop.j3d.examples.Resources; +import org.jogamp.java3d.Appearance; +import org.jogamp.java3d.Background; +import org.jogamp.java3d.BoundingSphere; +import org.jogamp.java3d.BranchGroup; +import org.jogamp.java3d.Canvas3D; +import org.jogamp.java3d.DirectionalLight; +import org.jogamp.java3d.ImageComponent2D; +import org.jogamp.java3d.Material; +import org.jogamp.java3d.Transform3D; +import org.jogamp.java3d.TransformGroup; +import org.jogamp.java3d.utils.behaviors.mouse.MouseRotate; +import org.jogamp.java3d.utils.behaviors.mouse.MouseTranslate; +import org.jogamp.java3d.utils.behaviors.mouse.MouseZoom; +import org.jogamp.java3d.utils.geometry.Box; +import org.jogamp.java3d.utils.image.TextureLoader; +import org.jogamp.java3d.utils.shader.SimpleShaderAppearance; +import org.jogamp.java3d.utils.universe.SimpleUniverse; +import org.jogamp.vecmath.Color3f; +import org.jogamp.vecmath.Point3d; +import org.jogamp.vecmath.Vector3f; + +public class BackgroundTexture extends javax.swing.JFrame +{ + + private SimpleUniverse univ = null; + private BranchGroup scene = null; + private java.net.URL bgImage = null; + private BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0); + + public BranchGroup createSceneGraph() + { + + // Create the root of the branch graph + BranchGroup objRoot = new BranchGroup(); + + // Create a Transformgroup to scale all objects so they + // appear in the scene. + TransformGroup objScale = new TransformGroup(); + Transform3D t3d = new Transform3D(); + t3d.setScale(0.4); + objScale.setTransform(t3d); + objRoot.addChild(objScale); + + // Create the transform group node and initialize it to the + // identity. Enable the TRANSFORM_WRITE capability so that + // our behavior code can modify it at runtime. + TransformGroup objTrans = new TransformGroup(); + objScale.addChild(objTrans); + + TextureLoader tex = new TextureLoader(bgImage, new String("RGB"), TextureLoader.BY_REFERENCE | TextureLoader.Y_UP, this); + + + + Background bg = new Background((ImageComponent2D) tex.getTexture().getImage(0)); + bg.setApplicationBounds(bounds); + objTrans.addChild(bg); + + Vector3f tranlation = new Vector3f(2.0f, 0.0f, 0.0f); + Transform3D modelTransform = new Transform3D(); + Transform3D tmpTransform = new Transform3D(); + double angleInc = Math.PI / 8.0; + double angle = 0.0; + int numBoxes = 16; + + float scaleX[] = { 0.1f, 0.2f, 0.2f, 0.3f, 0.2f, 0.1f, 0.2f, 0.3f, 0.1f, 0.3f, 0.2f, 0.3f, 0.1f, 0.3f, 0.2f, 0.3f }; + + float scaleY[] = { 0.3f, 0.4f, 0.3f, 0.4f, 0.3f, 0.4f, 0.3f, 0.4f, 0.3f, 0.3f, 0.3f, 0.3f, 0.3f, 0.3f, 0.3f, 0.4f }; + + float scaleZ[] = { 0.3f, 0.2f, 0.1f, 0.1f, 0.3f, 0.2f, 0.1f, 0.3f, 0.3f, 0.2f, 0.1f, 0.3f, 0.3f, 0.2f, 0.1f, 0.2f }; + + Appearance a1 = new SimpleShaderAppearance(true, false); + + Color3f eColor = new Color3f(0.0f, 0.0f, 0.0f); + Color3f sColor = new Color3f(0.5f, 0.5f, 1.0f); + Color3f oColor = new Color3f(0.5f, 0.5f, 0.3f); + + Material m = new Material(oColor, eColor, oColor, sColor, 100.0f); + m.setLightingEnable(true); + a1.setMaterial(m); + + for (int i = 0; i < numBoxes; i++, angle += angleInc) + { + modelTransform.rotY(angle); + tmpTransform.set(tranlation); + modelTransform.mul(tmpTransform); + + TransformGroup tgroup = new TransformGroup(modelTransform); + objTrans.addChild(tgroup); + + tgroup.addChild(new Box(scaleX[i], scaleY[i], scaleZ[i], Box.GENERATE_NORMALS, a1)); + } + + // Shine it with two lights. + Color3f lColor1 = new Color3f(0.7f, 0.7f, 0.7f); + Color3f lColor2 = new Color3f(0.2f, 0.2f, 0.1f); + Vector3f lDir1 = new Vector3f(-1.0f, -1.0f, -1.0f); + Vector3f lDir2 = new Vector3f(0.0f, 0.0f, -1.0f); + DirectionalLight lgt1 = new DirectionalLight(lColor1, lDir1); + DirectionalLight lgt2 = new DirectionalLight(lColor2, lDir2); + lgt1.setInfluencingBounds(bounds); + lgt2.setInfluencingBounds(bounds); + objScale.addChild(lgt1); + objScale.addChild(lgt2); + + return objRoot; + } + + private Canvas3D createUniverse() + { + // Get the preferred graphics configuration for the default screen + GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); + + // Create a Canvas3D using the preferred configuration + Canvas3D c = new Canvas3D(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); + + TransformGroup viewTrans = univ.getViewingPlatform().getViewPlatformTransform(); + + // Create the rotate behavior node + MouseRotate behavior1 = new MouseRotate(viewTrans); + scene.addChild(behavior1); + behavior1.setSchedulingBounds(bounds); + + // Create the zoom behavior node + MouseZoom behavior2 = new MouseZoom(viewTrans); + scene.addChild(behavior2); + behavior2.setSchedulingBounds(bounds); + + // Create the translate behavior node + MouseTranslate behavior3 = new MouseTranslate(viewTrans); + scene.addChild(behavior3); + behavior3.setSchedulingBounds(bounds); + + return c; + } + + /** + * Creates new form BackgroundGeometry + */ + public BackgroundTexture() + { + + if (bgImage == null) + { + // the path to the image for an applet + bgImage = Resources.getResource("main/resources/images/bg.jpg"); + if (bgImage == null) + { + System.err.println("main/resources/images/bg.jpg not found"); + System.exit(1); + } + } + + // Initialize the GUI components + initComponents(); + + // Create the content branch and add it to the universe + scene = createSceneGraph(); + + // Create Canvas3D and SimpleUniverse; add canvas to drawing panel + Canvas3D c = createUniverse(); + drawingPanel.add(c, java.awt.BorderLayout.CENTER); + + // Let Java 3D perform optimizations on this scene graph. + scene.compile(); + + 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. + */ + // //GEN-BEGIN:initComponents + private void initComponents() + { + drawingPanel = new javax.swing.JPanel(); + + setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); + setTitle("BackgroundGeometry"); + drawingPanel.setLayout(new java.awt.BorderLayout()); + + drawingPanel.setOpaque(false); + drawingPanel.setPreferredSize(new java.awt.Dimension(700, 700)); + getContentPane().add(drawingPanel, java.awt.BorderLayout.CENTER); + + pack(); + }// //GEN-END:initComponents + + /** + * @param args the command line arguments + */ + public static void main(String args[]) + { + System.setProperty("sun.awt.noerasebackground", "true"); + java.awt.EventQueue.invokeLater(new Runnable() { + @Override + public void run() + { + new BackgroundTexture().setVisible(true); + } + }); + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JPanel drawingPanel; + // End of variables declaration//GEN-END:variables + +} diff --git a/src/main/java/org/jdesktop/j3d/examples/background/BackgroundTextureGL2ES2.java b/src/main/java/org/jdesktop/j3d/examples/background/BackgroundTextureGL2ES2.java new file mode 100644 index 0000000..c8d0287 --- /dev/null +++ b/src/main/java/org/jdesktop/j3d/examples/background/BackgroundTextureGL2ES2.java @@ -0,0 +1,248 @@ +/* + * 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.background; + +import java.awt.GraphicsConfiguration; + +import org.jdesktop.j3d.examples.Resources; +import org.jogamp.java3d.Appearance; +import org.jogamp.java3d.Background; +import org.jogamp.java3d.BoundingSphere; +import org.jogamp.java3d.BranchGroup; +import org.jogamp.java3d.Canvas3D; +import org.jogamp.java3d.DirectionalLight; +import org.jogamp.java3d.ImageComponent2D; +import org.jogamp.java3d.Material; +import org.jogamp.java3d.Transform3D; +import org.jogamp.java3d.TransformGroup; +import org.jogamp.java3d.utils.behaviors.mouse.MouseRotate; +import org.jogamp.java3d.utils.behaviors.mouse.MouseTranslate; +import org.jogamp.java3d.utils.behaviors.mouse.MouseZoom; +import org.jogamp.java3d.utils.geometry.Box; +import org.jogamp.java3d.utils.image.TextureLoader; +import org.jogamp.java3d.utils.shader.SimpleShaderAppearance; +import org.jogamp.java3d.utils.universe.SimpleUniverse; +import org.jogamp.vecmath.Color3f; +import org.jogamp.vecmath.Point3d; +import org.jogamp.vecmath.Vector3f; + +public class BackgroundTextureGL2ES2 extends javax.swing.JFrame +{ + + private SimpleUniverse univ = null; + private BranchGroup scene = null; + private java.net.URL bgImage = null; + private BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0); + + public BranchGroup createSceneGraph() + { + + // Create the root of the branch graph + BranchGroup objRoot = new BranchGroup(); + + // Create a Transformgroup to scale all objects so they + // appear in the scene. + TransformGroup objScale = new TransformGroup(); + Transform3D t3d = new Transform3D(); + t3d.setScale(0.4); + objScale.setTransform(t3d); + objRoot.addChild(objScale); + + // Create the transform group node and initialize it to the + // identity. Enable the TRANSFORM_WRITE capability so that + // our behavior code can modify it at runtime. + TransformGroup objTrans = new TransformGroup(); + objScale.addChild(objTrans); + + TextureLoader tex = new TextureLoader(bgImage, new String("RGB"), TextureLoader.BY_REFERENCE | TextureLoader.Y_UP, this); + + Background bg = new Background((ImageComponent2D) tex.getTexture().getImage(0)); + bg.setApplicationBounds(bounds); + objTrans.addChild(bg); + + Vector3f tranlation = new Vector3f(2.0f, 0.0f, 0.0f); + Transform3D modelTransform = new Transform3D(); + Transform3D tmpTransform = new Transform3D(); + double angleInc = Math.PI / 8.0; + double angle = 0.0; + int numBoxes = 16; + + float scaleX[] = { 0.1f, 0.2f, 0.2f, 0.3f, 0.2f, 0.1f, 0.2f, 0.3f, 0.1f, 0.3f, 0.2f, 0.3f, 0.1f, 0.3f, 0.2f, 0.3f }; + + float scaleY[] = { 0.3f, 0.4f, 0.3f, 0.4f, 0.3f, 0.4f, 0.3f, 0.4f, 0.3f, 0.3f, 0.3f, 0.3f, 0.3f, 0.3f, 0.3f, 0.4f }; + + float scaleZ[] = { 0.3f, 0.2f, 0.1f, 0.1f, 0.3f, 0.2f, 0.1f, 0.3f, 0.3f, 0.2f, 0.1f, 0.3f, 0.3f, 0.2f, 0.1f, 0.2f }; + + Appearance a1 = new SimpleShaderAppearance(true, false); + + Color3f eColor = new Color3f(0.0f, 0.0f, 0.0f); + Color3f sColor = new Color3f(0.5f, 0.5f, 1.0f); + Color3f oColor = new Color3f(0.5f, 0.5f, 0.3f); + + Material m = new Material(oColor, eColor, oColor, sColor, 100.0f); + m.setLightingEnable(true); + a1.setMaterial(m); + + for (int i = 0; i < numBoxes; i++, angle += angleInc) + { + modelTransform.rotY(angle); + tmpTransform.set(tranlation); + modelTransform.mul(tmpTransform); + + TransformGroup tgroup = new TransformGroup(modelTransform); + objTrans.addChild(tgroup); + + tgroup.addChild(new Box(scaleX[i], scaleY[i], scaleZ[i], Box.GENERATE_NORMALS, a1)); + } + + // Shine it with two lights. + Color3f lColor1 = new Color3f(0.7f, 0.7f, 0.7f); + Color3f lColor2 = new Color3f(0.2f, 0.2f, 0.1f); + Vector3f lDir1 = new Vector3f(-1.0f, -1.0f, -1.0f); + Vector3f lDir2 = new Vector3f(0.0f, 0.0f, -1.0f); + DirectionalLight lgt1 = new DirectionalLight(lColor1, lDir1); + DirectionalLight lgt2 = new DirectionalLight(lColor2, lDir2); + lgt1.setInfluencingBounds(bounds); + lgt2.setInfluencingBounds(bounds); + objScale.addChild(lgt1); + objScale.addChild(lgt2); + + return objRoot; + } + + private Canvas3D createUniverse() + { + // Get the preferred graphics configuration for the default screen + GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); + + // Create a Canvas3D using the preferred configuration + Canvas3D c = new Canvas3D(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); + + TransformGroup viewTrans = univ.getViewingPlatform().getViewPlatformTransform(); + + // Create the rotate behavior node + MouseRotate behavior1 = new MouseRotate(viewTrans); + scene.addChild(behavior1); + behavior1.setSchedulingBounds(bounds); + + // Create the zoom behavior node + MouseZoom behavior2 = new MouseZoom(viewTrans); + scene.addChild(behavior2); + behavior2.setSchedulingBounds(bounds); + + // Create the translate behavior node + MouseTranslate behavior3 = new MouseTranslate(viewTrans); + scene.addChild(behavior3); + behavior3.setSchedulingBounds(bounds); + + return c; + } + + /** + * Creates new form BackgroundGeometry + */ + public BackgroundTextureGL2ES2() + { + + if (bgImage == null) + { + // the path to the image for an applet + bgImage = Resources.getResource("main/resources/images/bg.jpg"); + if (bgImage == null) + { + System.err.println("main/resources/images/bg.jpg not found"); + System.exit(1); + } + } + + // Initialize the GUI components + initComponents(); + + // Create the content branch and add it to the universe + scene = createSceneGraph(); + + // Create Canvas3D and SimpleUniverse; add canvas to drawing panel + Canvas3D c = createUniverse(); + drawingPanel.add(c, java.awt.BorderLayout.CENTER); + + // Let Java 3D perform optimizations on this scene graph. + scene.compile(); + + 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. + */ + // //GEN-BEGIN:initComponents + private void initComponents() + { + drawingPanel = new javax.swing.JPanel(); + + setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); + setTitle("BackgroundGeometry"); + drawingPanel.setLayout(new java.awt.BorderLayout()); + + drawingPanel.setOpaque(false); + drawingPanel.setPreferredSize(new java.awt.Dimension(700, 700)); + getContentPane().add(drawingPanel, java.awt.BorderLayout.CENTER); + + pack(); + }// //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"); + System.setProperty("j3d.displaylist", "false"); + java.awt.EventQueue.invokeLater(new Runnable() { + @Override + public void run() + { + new BackgroundTextureGL2ES2().setVisible(true); + } + }); + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JPanel drawingPanel; + // End of variables declaration//GEN-END:variables + +} diff --git a/src/main/java/org/jdesktop/j3d/examples/raster/RasterTest.java b/src/main/java/org/jdesktop/j3d/examples/raster/RasterTest.java new file mode 100644 index 0000000..023b5cb --- /dev/null +++ b/src/main/java/org/jdesktop/j3d/examples/raster/RasterTest.java @@ -0,0 +1,203 @@ +/* + * 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.raster; + +import java.awt.GraphicsConfiguration; +import java.net.URL; + +import org.jdesktop.j3d.examples.Resources; +import org.jogamp.java3d.BoundingSphere; +import org.jogamp.java3d.BranchGroup; +import org.jogamp.java3d.Canvas3D; +import org.jogamp.java3d.ImageComponent2D; +import org.jogamp.java3d.Raster; +import org.jogamp.java3d.Shape3D; +import org.jogamp.java3d.Transform3D; +import org.jogamp.java3d.TransformGroup; +import org.jogamp.java3d.utils.behaviors.mouse.MouseRotate; +import org.jogamp.java3d.utils.behaviors.mouse.MouseTranslate; +import org.jogamp.java3d.utils.behaviors.mouse.MouseZoom; +import org.jogamp.java3d.utils.geometry.ColorCube; +import org.jogamp.java3d.utils.image.TextureLoader; +import org.jogamp.java3d.utils.universe.SimpleUniverse; +import org.jogamp.vecmath.Point3d; +import org.jogamp.vecmath.Point3f; +import org.jogamp.vecmath.Vector3d; + +/** + * OffScreenTest programs with no UI. + */ +public class RasterTest extends javax.swing.JFrame +{ + + private SimpleUniverse univ = null; + private BranchGroup scene = null; + private Raster drawRaster = null; + private BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0); + + private BranchGroup createSceneGraph() + { + // Create the root of the branch graph + BranchGroup objRoot = new BranchGroup(); + + // trans object has composited transformation matrix + Transform3D trans = new Transform3D(); + Transform3D rot = new Transform3D(); + + trans.rotX(Math.PI / 4.0d); + rot.rotY(Math.PI / 5.0d); + trans.mul(rot); + trans.setScale(0.7); + trans.setTranslation(new Vector3d(-0.4, 0.3, 0.0)); + + TransformGroup objTrans = new TransformGroup(trans); + objRoot.addChild(objTrans); + + // Create a simple shape leaf node, add it to the scene graph. + // ColorCube is a Convenience Utility class + objTrans.addChild(new ColorCube(0.4)); + + //Create a raster + URL bgImage = null; + if (bgImage == null) + { + // the path to the image for an applet + bgImage = Resources.getResource("main/resources/images/bg.jpg"); + if (bgImage == null) + { + System.err.println("main/resources/images/bg.jpg not found"); + System.exit(1); + } + } + + TextureLoader tex = new TextureLoader(bgImage, new String("RGB"), TextureLoader.BY_REFERENCE | TextureLoader.Y_UP, this); + + ImageComponent2D buffer2 = (ImageComponent2D) tex.getTexture().getImage(0); + buffer2.setCapability(ImageComponent2D.ALLOW_IMAGE_READ); + drawRaster = new Raster(new Point3f(0.0f, 0.0f, 0.0f), Raster.RASTER_COLOR, 0, 0, 200, 200, buffer2, null); + + drawRaster.setCapability(Raster.ALLOW_IMAGE_WRITE); + Shape3D shape = new Shape3D(drawRaster); + objRoot.addChild(shape); + + return objRoot; + } + + private Canvas3D createCanvas3DAndUniverse() + { + // Get the preferred graphics configuration for the default screen + GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); + + // Create a Canvas3D using the preferred configuration + Canvas3D canvas3D = new Canvas3D(config, false); + + // Create simple universe with view branch + univ = new SimpleUniverse(canvas3D); + + // 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); + + TransformGroup viewTrans = univ.getViewingPlatform().getViewPlatformTransform(); + + // Create the rotate behavior node + MouseRotate behavior1 = new MouseRotate(viewTrans); + scene.addChild(behavior1); + behavior1.setSchedulingBounds(bounds); + + // Create the zoom behavior node + MouseZoom behavior2 = new MouseZoom(viewTrans); + scene.addChild(behavior2); + behavior2.setSchedulingBounds(bounds); + + // Create the translate behavior node + MouseTranslate behavior3 = new MouseTranslate(viewTrans); + scene.addChild(behavior3); + behavior3.setSchedulingBounds(bounds); + + return canvas3D; + } + + /** + * Creates new form OffScreenTest + */ + public RasterTest() + { + // Initialize the GUI components + initComponents(); + + // Create the content branch and add it to the universe + scene = createSceneGraph(); + + // Create an canvas3D3D and SimpleUniverse; add canvas to drawing panel + Canvas3D canvas3D = createCanvas3DAndUniverse(); + drawingPanel.add(canvas3D, java.awt.BorderLayout.CENTER); + + 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. + */ + // //GEN-BEGIN:initComponents + private void initComponents() + { + drawingPanel = new javax.swing.JPanel(); + + setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); + setTitle("Window Title"); + drawingPanel.setLayout(new java.awt.BorderLayout()); + + drawingPanel.setPreferredSize(new java.awt.Dimension(500, 500)); + getContentPane().add(drawingPanel, java.awt.BorderLayout.CENTER); + + pack(); + }// //GEN-END:initComponents + + /** + * @param args the command line arguments + */ + public static void main(String args[]) + { + System.setProperty("sun.awt.noerasebackground", "true"); + java.awt.EventQueue.invokeLater(new Runnable() { + @Override + public void run() + { + new RasterTest().setVisible(true); + } + }); + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JPanel drawingPanel; + // End of variables declaration//GEN-END:variables + +} diff --git a/src/main/java/org/jdesktop/j3d/examples/raster/RasterTestGL2ES2.java b/src/main/java/org/jdesktop/j3d/examples/raster/RasterTestGL2ES2.java new file mode 100644 index 0000000..6a0b412 --- /dev/null +++ b/src/main/java/org/jdesktop/j3d/examples/raster/RasterTestGL2ES2.java @@ -0,0 +1,205 @@ +/* + * 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.raster; + +import java.awt.GraphicsConfiguration; +import java.net.URL; + +import org.jdesktop.j3d.examples.Resources; +import org.jogamp.java3d.BoundingSphere; +import org.jogamp.java3d.BranchGroup; +import org.jogamp.java3d.Canvas3D; +import org.jogamp.java3d.ImageComponent2D; +import org.jogamp.java3d.Raster; +import org.jogamp.java3d.Shape3D; +import org.jogamp.java3d.Transform3D; +import org.jogamp.java3d.TransformGroup; +import org.jogamp.java3d.utils.behaviors.mouse.MouseRotate; +import org.jogamp.java3d.utils.behaviors.mouse.MouseTranslate; +import org.jogamp.java3d.utils.behaviors.mouse.MouseZoom; +import org.jogamp.java3d.utils.image.TextureLoader; +import org.jogamp.java3d.utils.shader.Cube; +import org.jogamp.java3d.utils.universe.SimpleUniverse; +import org.jogamp.vecmath.Point3d; +import org.jogamp.vecmath.Point3f; +import org.jogamp.vecmath.Vector3d; + +/** + * OffScreenTest programs with no UI. + */ +public class RasterTestGL2ES2 extends javax.swing.JFrame +{ + + private SimpleUniverse univ = null; + private BranchGroup scene = null; + private Raster drawRaster = null; + private BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0); + + private BranchGroup createSceneGraph() + { + // Create the root of the branch graph + BranchGroup objRoot = new BranchGroup(); + + // trans object has composited transformation matrix + Transform3D trans = new Transform3D(); + Transform3D rot = new Transform3D(); + + trans.rotX(Math.PI / 4.0d); + rot.rotY(Math.PI / 5.0d); + trans.mul(rot); + trans.setScale(0.7); + trans.setTranslation(new Vector3d(-0.4, 0.3, 0.0)); + + TransformGroup objTrans = new TransformGroup(trans); + objRoot.addChild(objTrans); + + // Create a simple shape leaf node, add it to the scene graph. + // ColorCube is a Convenience Utility class + objTrans.addChild(new Cube(0.4)); + + //Create a raster + URL bgImage = null; + if (bgImage == null) + { + // the path to the image for an applet + bgImage = Resources.getResource("main/resources/images/bg.jpg"); + if (bgImage == null) + { + System.err.println("main/resources/images/bg.jpg not found"); + System.exit(1); + } + } + + TextureLoader tex = new TextureLoader(bgImage, new String("RGB"), TextureLoader.BY_REFERENCE | TextureLoader.Y_UP, this); + + ImageComponent2D buffer2 = (ImageComponent2D) tex.getTexture().getImage(0); + buffer2.setCapability(ImageComponent2D.ALLOW_IMAGE_READ); + drawRaster = new Raster(new Point3f(0.0f, 0.0f, 0.0f), Raster.RASTER_COLOR, 0, 0, 200, 200, buffer2, null); + + drawRaster.setCapability(Raster.ALLOW_IMAGE_WRITE); + Shape3D shape = new Shape3D(drawRaster); + objRoot.addChild(shape); + + return objRoot; + } + + private Canvas3D createCanvas3DAndUniverse() + { + // Get the preferred graphics configuration for the default screen + GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); + + // Create a Canvas3D using the preferred configuration + Canvas3D canvas3D = new Canvas3D(config, false); + + // Create simple universe with view branch + univ = new SimpleUniverse(canvas3D); + + // 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); + + TransformGroup viewTrans = univ.getViewingPlatform().getViewPlatformTransform(); + + // Create the rotate behavior node + MouseRotate behavior1 = new MouseRotate(viewTrans); + scene.addChild(behavior1); + behavior1.setSchedulingBounds(bounds); + + // Create the zoom behavior node + MouseZoom behavior2 = new MouseZoom(viewTrans); + scene.addChild(behavior2); + behavior2.setSchedulingBounds(bounds); + + // Create the translate behavior node + MouseTranslate behavior3 = new MouseTranslate(viewTrans); + scene.addChild(behavior3); + behavior3.setSchedulingBounds(bounds); + + return canvas3D; + } + + /** + * Creates new form OffScreenTest + */ + public RasterTestGL2ES2() + { + // Initialize the GUI components + initComponents(); + + // Create the content branch and add it to the universe + scene = createSceneGraph(); + + // Create an canvas3D3D and SimpleUniverse; add canvas to drawing panel + Canvas3D canvas3D = createCanvas3DAndUniverse(); + drawingPanel.add(canvas3D, java.awt.BorderLayout.CENTER); + + 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. + */ + // //GEN-BEGIN:initComponents + private void initComponents() + { + drawingPanel = new javax.swing.JPanel(); + + setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); + setTitle("Window Title"); + drawingPanel.setLayout(new java.awt.BorderLayout()); + + drawingPanel.setPreferredSize(new java.awt.Dimension(500, 500)); + getContentPane().add(drawingPanel, java.awt.BorderLayout.CENTER); + + pack(); + }// //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"); + System.setProperty("j3d.displaylist", "false"); + java.awt.EventQueue.invokeLater(new Runnable() { + @Override + public void run() + { + new RasterTestGL2ES2().setVisible(true); + } + }); + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JPanel drawingPanel; + // End of variables declaration//GEN-END:variables + +} -- cgit v1.2.3