/* * Copyright (c) 2016 JogAmp Community. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * The views and conclusions contained in the software and documentation are those * of the authors and should not be interpreted as representing official policies, * either expressed or implied, of the JogAmp Community. * */ 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 Overlay2DGL2ES2 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("main/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 Overlay2DGL2ES2() { // 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. */ // //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(); }// //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 Overlay2DGL2ES2().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JPanel drawingPanel; // End of variables declaration//GEN-END:variables }