All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.ardor3d.example.basic.JoglBasicExample Maven / Gradle / Ivy

/**
 * Copyright (c) 2008-2012 Ardor Labs, Inc.
 *
 * This file is part of Ardor3D.
 *
 * Ardor3D is free software: you can redistribute it and/or modify it 
 * under the terms of its license which may be found in the accompanying
 * LICENSE file or at .
 */

package com.ardor3d.example.basic;

import java.net.URISyntaxException;

import com.ardor3d.bounding.BoundingBox;
import com.ardor3d.example.Purpose;
import com.ardor3d.framework.DisplaySettings;
import com.ardor3d.framework.Scene;
import com.ardor3d.framework.jogl.JoglCanvas;
import com.ardor3d.framework.jogl.JoglCanvasRenderer;
import com.ardor3d.image.Texture;
import com.ardor3d.image.util.awt.AWTImageLoader;
import com.ardor3d.intersection.PickResults;
import com.ardor3d.math.MathUtils;
import com.ardor3d.math.Matrix3;
import com.ardor3d.math.Ray3;
import com.ardor3d.math.Vector3;
import com.ardor3d.renderer.Renderer;
import com.ardor3d.renderer.state.TextureState;
import com.ardor3d.renderer.state.ZBufferState;
import com.ardor3d.scenegraph.Node;
import com.ardor3d.scenegraph.controller.SpatialController;
import com.ardor3d.scenegraph.shape.Box;
import com.ardor3d.util.ContextGarbageCollector;
import com.ardor3d.util.TextureManager;
import com.ardor3d.util.Timer;
import com.ardor3d.util.resource.ResourceLocatorTool;
import com.ardor3d.util.resource.SimpleResourceLocator;

/**
 * 

* This jogl-based example is meant to show how to use Ardor3D at the most primitive level, forsaking the use of * ExampleBase and much of our framework classes and interfaces. *

* *

* Also of note, this example does not allow choosing of properties on launch. It also does not handle input or show any * special debugging. This is to simplify the example to the basic essentials. *

*/ @Purpose(htmlDescriptionKey = "com.ardor3d.example.basic.JoglBasicExample", // thumbnailPath = "com/ardor3d/example/media/thumbnails/basic_JoglBasicExample.jpg", // maxHeapMemory = 64) public class JoglBasicExample implements Scene { // Our native window, not the gl surface itself. private final JoglCanvas _canvas; // Our timer. private final Timer _timer = new Timer(); // A boolean allowing us to "pull the plug" from anywhere. private boolean _exit = false; // The root of our scene private final Node _root = new Node(); public static void main(final String[] args) { final JoglBasicExample example = new JoglBasicExample(); example.start(); } /** * Constructs the example class, also creating the native window and GL surface. */ public JoglBasicExample() { _canvas = initJogl(); _canvas.init(); } /** * Kicks off the example logic, first setting up the scene, then continuously updating and rendering it until exit * is flagged. Afterwards, the scene and gl surface are cleaned up. */ private void start() { initExample(); // Run in this same thread. while (!_exit) { updateExample(); _canvas.draw(null); Thread.yield(); } _canvas.getCanvasRenderer().makeCurrentContext(); // Done, do cleanup ContextGarbageCollector.doFinalCleanup(_canvas.getCanvasRenderer().getRenderer()); _canvas.close(); } /** * Setup a jogl canvas and canvas renderer. * * @return the canvas. */ private JoglCanvas initJogl() { final JoglCanvasRenderer canvasRenderer = new JoglCanvasRenderer(this); final DisplaySettings settings = new DisplaySettings(800, 600, 24, 0, 0, 8, 0, 0, false, false); return new JoglCanvas(canvasRenderer, settings); } /** * Initialize our scene. */ private void initExample() { _canvas.setTitle("JoglBasicExample - close window to exit"); // Make a box... final Box _box = new Box("Box", Vector3.ZERO, 5, 5, 5); // Make it a bit more colorful. _box.setRandomColors(); // Setup a bounding box for it. _box.setModelBound(new BoundingBox()); // Set its location in space. _box.setTranslation(new Vector3(0, 0, -15)); // Add to root. _root.attachChild(_box); // set it to rotate: _box.addController(new SpatialController() { private final Vector3 _axis = new Vector3(1, 1, 0.5f).normalizeLocal(); private final Matrix3 _rotate = new Matrix3(); private double _angle = 0; public void update(final double time, final Box caller) { // update our rotation _angle = _angle + (_timer.getTimePerFrame() * 25); if (_angle > 180) { _angle = -180; } _rotate.fromAngleNormalAxis(_angle * MathUtils.DEG_TO_RAD, _axis); _box.setRotation(_rotate); } }); // Add our awt based image loader. AWTImageLoader.registerLoader(); // Set the location of our example resources. try { final SimpleResourceLocator srl = new SimpleResourceLocator(ResourceLocatorTool.getClassPathResource( JoglBasicExample.class, "com/ardor3d/example/media/")); ResourceLocatorTool.addResourceLocator(ResourceLocatorTool.TYPE_TEXTURE, srl); } catch (final URISyntaxException ex) { ex.printStackTrace(); } // Create a ZBuffer to display pixels closest to the camera above farther ones. final ZBufferState buf = new ZBufferState(); buf.setEnabled(true); buf.setFunction(ZBufferState.TestFunction.LessThanOrEqualTo); _root.setRenderState(buf); // Create a texture from the Ardor3D logo. final TextureState ts = new TextureState(); ts.setEnabled(true); ts.setTexture(TextureManager.load("images/ardor3d_white_256.jpg", Texture.MinificationFilter.Trilinear, true)); _root.setRenderState(ts); } /** * Update our scene... Check if the window is closing. Then update our timer and finally update the geometric state * of the root and its children. */ private void updateExample() { if (_canvas.isClosing()) { _exit = true; return; } _timer.update(); // Update controllers/render states/transforms/bounds for rootNode. _root.updateGeometricState(_timer.getTimePerFrame(), true); } // ------ Scene methods ------ public boolean renderUnto(final Renderer renderer) { if (!_canvas.isClosing()) { // Draw the root and all its children. renderer.draw(_root); return true; } return false; } public PickResults doPick(final Ray3 pickRay) { // Ignore return null; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy