<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2F3D%2FBounds</id>
		<title>Java/3D/Bounds - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2F3D%2FBounds"/>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/3D/Bounds&amp;action=history"/>
		<updated>2026-04-07T20:26:17Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://jexp.ru/index.php?title=Java/3D/Bounds&amp;diff=6481&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/3D/Bounds&amp;diff=6481&amp;oldid=prev"/>
				<updated>2010-06-01T06:15:16Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 06:15, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://jexp.ru/index.php?title=Java/3D/Bounds&amp;diff=6480&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/3D/Bounds&amp;diff=6480&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:44Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Investigate the Bounds objects for a Java 3D scenegraph ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/**********************************************************&lt;br /&gt;
 Copyright (C) 2001   Daniel Selman&lt;br /&gt;
 First distributed with the book &amp;quot;Java 3D Programming&amp;quot;&lt;br /&gt;
 by Daniel Selman and published by Manning Publications.&lt;br /&gt;
 http://manning.ru/selman&lt;br /&gt;
 This program is free software; you can redistribute it and/or&lt;br /&gt;
 modify it under the terms of the GNU General Public License&lt;br /&gt;
 as published by the Free Software Foundation, version 2.&lt;br /&gt;
 This program is distributed in the hope that it will be useful,&lt;br /&gt;
 but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 GNU General Public License for more details.&lt;br /&gt;
 The license can be found on the WWW at:&lt;br /&gt;
 http://www.fsf.org/copyleft/gpl.html&lt;br /&gt;
 Or by writing to:&lt;br /&gt;
 Free Software Foundation, Inc.,&lt;br /&gt;
 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.&lt;br /&gt;
 Authors can be contacted at:&lt;br /&gt;
 Daniel Selman: daniel@selman.org&lt;br /&gt;
 If you make changes you think others would like, please &lt;br /&gt;
 contact one of the authors or someone at the &lt;br /&gt;
 www.j3d.org web site.&lt;br /&gt;
 **************************************************************/&lt;br /&gt;
import java.applet.Applet;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.GraphicsConfigTemplate;&lt;br /&gt;
import java.awt.GraphicsDevice;&lt;br /&gt;
import java.awt.GraphicsEnvironment;&lt;br /&gt;
import java.io.File;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
import javax.media.j3d.Alpha;&lt;br /&gt;
import javax.media.j3d.Appearance;&lt;br /&gt;
import javax.media.j3d.AudioDevice;&lt;br /&gt;
import javax.media.j3d.Background;&lt;br /&gt;
import javax.media.j3d.BoundingBox;&lt;br /&gt;
import javax.media.j3d.BoundingSphere;&lt;br /&gt;
import javax.media.j3d.Bounds;&lt;br /&gt;
import javax.media.j3d.BranchGroup;&lt;br /&gt;
import javax.media.j3d.Canvas3D;&lt;br /&gt;
import javax.media.j3d.GeometryArray;&lt;br /&gt;
import javax.media.j3d.GraphicsConfigTemplate3D;&lt;br /&gt;
import javax.media.j3d.Group;&lt;br /&gt;
import javax.media.j3d.Locale;&lt;br /&gt;
import javax.media.j3d.PhysicalBody;&lt;br /&gt;
import javax.media.j3d.PhysicalEnvironment;&lt;br /&gt;
import javax.media.j3d.PointArray;&lt;br /&gt;
import javax.media.j3d.RotationInterpolator;&lt;br /&gt;
import javax.media.j3d.Shape3D;&lt;br /&gt;
import javax.media.j3d.Transform3D;&lt;br /&gt;
import javax.media.j3d.TransformGroup;&lt;br /&gt;
import javax.media.j3d.View;&lt;br /&gt;
import javax.media.j3d.ViewPlatform;&lt;br /&gt;
import javax.media.j3d.VirtualUniverse;&lt;br /&gt;
import javax.vecmath.Color3f;&lt;br /&gt;
import javax.vecmath.Point3d;&lt;br /&gt;
import javax.vecmath.Vector3d;&lt;br /&gt;
import com.sun.j3d.audioengines.javasound.JavaSoundMixer;&lt;br /&gt;
import com.sun.j3d.utils.applet.MainFrame;&lt;br /&gt;
import com.sun.j3d.utils.geometry.ColorCube;&lt;br /&gt;
/**&lt;br /&gt;
 * Test harness to investigate the Bounds objects for a Java 3D scenegraph\.&lt;br /&gt;
 */&lt;br /&gt;
public class BoundsTest extends Java3dApplet {&lt;br /&gt;
  private static int m_kWidth = 256;&lt;br /&gt;
  private static int m_kHeight = 256;&lt;br /&gt;
  public BoundsTest() {&lt;br /&gt;
    initJava3d();&lt;br /&gt;
  }&lt;br /&gt;
  protected double getScale() {&lt;br /&gt;
    return 0.5;&lt;br /&gt;
  }&lt;br /&gt;
  Group createColorCubes() {&lt;br /&gt;
    Group group = new Group();&lt;br /&gt;
    // defaults&lt;br /&gt;
    ColorCube cube1 = new ColorCube(1.0);&lt;br /&gt;
    group.addChild(cube1);&lt;br /&gt;
    // explicitly set the bounds (box)&lt;br /&gt;
    ColorCube cube2 = new ColorCube(2.0);&lt;br /&gt;
    cube2.setBoundsAutoCompute(false);&lt;br /&gt;
    Bounds bounds = new BoundingBox(new Point3d(-2, -2, -2), new Point3d(2,&lt;br /&gt;
        2, 2));&lt;br /&gt;
    cube2.setBounds(bounds);&lt;br /&gt;
    cube2.setCollisionBounds(bounds);&lt;br /&gt;
    group.addChild(cube2);&lt;br /&gt;
    // (sphere)&lt;br /&gt;
    ColorCube cube3 = new ColorCube(4.0);&lt;br /&gt;
    cube3.setBoundsAutoCompute(false);&lt;br /&gt;
    bounds = new BoundingSphere(new Point3d(0, 0, 0), 4);&lt;br /&gt;
    cube3.setBounds(bounds);&lt;br /&gt;
    cube3.setCollisionBounds(bounds);&lt;br /&gt;
    group.addChild(cube3);&lt;br /&gt;
    // auto compute, manual collision&lt;br /&gt;
    ColorCube cube4 = new ColorCube(6.0);&lt;br /&gt;
    cube4.setBoundsAutoCompute(true);&lt;br /&gt;
    bounds = new BoundingBox(new Point3d(-10, -10, -10), new Point3d(10,&lt;br /&gt;
        10, 10));&lt;br /&gt;
    cube4.setCollisionBounds(bounds);&lt;br /&gt;
    group.addChild(cube4);&lt;br /&gt;
    // auto compute both&lt;br /&gt;
    ColorCube cube5 = new ColorCube(6.0);&lt;br /&gt;
    cube5.setBoundsAutoCompute(true);&lt;br /&gt;
    group.addChild(cube5);&lt;br /&gt;
    return group;&lt;br /&gt;
  }&lt;br /&gt;
  protected Group createPoints() {&lt;br /&gt;
    Group group = new Group();&lt;br /&gt;
    final int kNumPoints = 200;&lt;br /&gt;
    final double kRadius = 10.0;&lt;br /&gt;
    Point3d points[] = new Point3d[kNumPoints];&lt;br /&gt;
    for (int n = 0; n &amp;lt; kNumPoints; n++) {&lt;br /&gt;
      double randX = (java.lang.Math.random() * kRadius) - kRadius / 2;&lt;br /&gt;
      double randY = (java.lang.Math.random() * kRadius) - kRadius / 2;&lt;br /&gt;
      double randZ = (java.lang.Math.random() * kRadius) - kRadius / 2;&lt;br /&gt;
      points[n] = new Point3d(randX, randY, randZ);&lt;br /&gt;
    }&lt;br /&gt;
    PointArray pointArray = new PointArray(points.length,&lt;br /&gt;
        GeometryArray.COLOR_4 | GeometryArray.COORDINATES);&lt;br /&gt;
    pointArray.setCoordinates(0, points);&lt;br /&gt;
    Shape3D shapePoints = new Shape3D(pointArray, new Appearance());&lt;br /&gt;
    group.addChild(shapePoints);&lt;br /&gt;
    return group;&lt;br /&gt;
  }&lt;br /&gt;
  protected BranchGroup createSceneBranchGroup() {&lt;br /&gt;
    BranchGroup objRoot = super.createSceneBranchGroup();&lt;br /&gt;
    // do NOT auto compute bounds for this node&lt;br /&gt;
    objRoot.setBoundsAutoCompute(false);&lt;br /&gt;
    TransformGroup objTrans = new TransformGroup();&lt;br /&gt;
    objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);&lt;br /&gt;
    objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);&lt;br /&gt;
    Transform3D yAxis = new Transform3D();&lt;br /&gt;
    Alpha rotationAlpha = new Alpha(-1, Alpha.INCREASING_ENABLE, 0, 0,&lt;br /&gt;
        4000, 0, 0, 0, 0, 0);&lt;br /&gt;
    RotationInterpolator rotator = new RotationInterpolator(rotationAlpha,&lt;br /&gt;
        objTrans, yAxis, 0.0f, (float) Math.PI * 2.0f);&lt;br /&gt;
    rotator.setSchedulingBounds(createApplicationBounds());&lt;br /&gt;
    objTrans.addChild(rotator);&lt;br /&gt;
    objTrans.addChild(createColorCubes());&lt;br /&gt;
    objTrans.addChild(createPoints());&lt;br /&gt;
    objRoot.addChild(objTrans);&lt;br /&gt;
    return objRoot;&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    BoundsTest boundsTest = new BoundsTest();&lt;br /&gt;
    boundsTest.saveCommandLineArguments(args);&lt;br /&gt;
    new MainFrame(boundsTest, m_kWidth, m_kHeight);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
/*******************************************************************************&lt;br /&gt;
 * Copyright (C) 2001 Daniel Selman&lt;br /&gt;
 * &lt;br /&gt;
 * First distributed with the book &amp;quot;Java 3D Programming&amp;quot; by Daniel Selman and&lt;br /&gt;
 * published by Manning Publications. http://manning.ru/selman&lt;br /&gt;
 * &lt;br /&gt;
 * This program is free software; you can redistribute it and/or modify it under&lt;br /&gt;
 * the terms of the GNU General Public License as published by the Free Software&lt;br /&gt;
 * Foundation, version 2.&lt;br /&gt;
 * &lt;br /&gt;
 * This program is distributed in the hope that it will be useful, but WITHOUT&lt;br /&gt;
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS&lt;br /&gt;
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more&lt;br /&gt;
 * details.&lt;br /&gt;
 * &lt;br /&gt;
 * The license can be found on the WWW at: http://www.fsf.org/copyleft/gpl.html&lt;br /&gt;
 * &lt;br /&gt;
 * Or by writing to: Free Software Foundation, Inc., 59 Temple Place - Suite&lt;br /&gt;
 * 330, Boston, MA 02111-1307, USA.&lt;br /&gt;
 * &lt;br /&gt;
 * Authors can be contacted at: Daniel Selman: daniel@selman.org&lt;br /&gt;
 * &lt;br /&gt;
 * If you make changes you think others would like, please contact one of the&lt;br /&gt;
 * authors or someone at the www.j3d.org web site.&lt;br /&gt;
 ******************************************************************************/&lt;br /&gt;
//*****************************************************************************&lt;br /&gt;
/**&lt;br /&gt;
 * Java3dApplet&lt;br /&gt;
 * &lt;br /&gt;
 * Base class for defining a Java 3D applet. Contains some useful methods for&lt;br /&gt;
 * defining views and scenegraphs etc.&lt;br /&gt;
 * &lt;br /&gt;
 * @author Daniel Selman&lt;br /&gt;
 * @version 1.0&lt;br /&gt;
 */&lt;br /&gt;
//*****************************************************************************&lt;br /&gt;
abstract class Java3dApplet extends Applet {&lt;br /&gt;
  public static int m_kWidth = 300;&lt;br /&gt;
  public static int m_kHeight = 300;&lt;br /&gt;
  protected String[] m_szCommandLineArray = null;&lt;br /&gt;
  protected VirtualUniverse m_Universe = null;&lt;br /&gt;
  protected BranchGroup m_SceneBranchGroup = null;&lt;br /&gt;
  protected Bounds m_ApplicationBounds = null;&lt;br /&gt;
  //  protected com.tornadolabs.j3dtree.Java3dTree m_Java3dTree = null;&lt;br /&gt;
  public Java3dApplet() {&lt;br /&gt;
  }&lt;br /&gt;
  public boolean isApplet() {&lt;br /&gt;
    try {&lt;br /&gt;
      System.getProperty(&amp;quot;user.dir&amp;quot;);&lt;br /&gt;
      System.out.println(&amp;quot;Running as Application.&amp;quot;);&lt;br /&gt;
      return false;&lt;br /&gt;
    } catch (Exception e) {&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(&amp;quot;Running as Applet.&amp;quot;);&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
  public URL getWorkingDirectory() throws java.net.MalformedURLException {&lt;br /&gt;
    URL url = null;&lt;br /&gt;
    try {&lt;br /&gt;
      File file = new File(System.getProperty(&amp;quot;user.dir&amp;quot;));&lt;br /&gt;
      System.out.println(&amp;quot;Running as Application:&amp;quot;);&lt;br /&gt;
      System.out.println(&amp;quot;   &amp;quot; + file.toURL());&lt;br /&gt;
      return file.toURL();&lt;br /&gt;
    } catch (Exception e) {&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(&amp;quot;Running as Applet:&amp;quot;);&lt;br /&gt;
    System.out.println(&amp;quot;   &amp;quot; + getCodeBase());&lt;br /&gt;
    return getCodeBase();&lt;br /&gt;
  }&lt;br /&gt;
  public VirtualUniverse getVirtualUniverse() {&lt;br /&gt;
    return m_Universe;&lt;br /&gt;
  }&lt;br /&gt;
  //public com.tornadolabs.j3dtree.Java3dTree getJ3dTree() {&lt;br /&gt;
  //return m_Java3dTree;&lt;br /&gt;
  //  }&lt;br /&gt;
  public Locale getFirstLocale() {&lt;br /&gt;
    java.util.Enumeration e = m_Universe.getAllLocales();&lt;br /&gt;
    if (e.hasMoreElements() != false)&lt;br /&gt;
      return (Locale) e.nextElement();&lt;br /&gt;
    return null;&lt;br /&gt;
  }&lt;br /&gt;
  protected Bounds getApplicationBounds() {&lt;br /&gt;
    if (m_ApplicationBounds == null)&lt;br /&gt;
      m_ApplicationBounds = createApplicationBounds();&lt;br /&gt;
    return m_ApplicationBounds;&lt;br /&gt;
  }&lt;br /&gt;
  protected Bounds createApplicationBounds() {&lt;br /&gt;
    m_ApplicationBounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0),&lt;br /&gt;
        100.0);&lt;br /&gt;
    return m_ApplicationBounds;&lt;br /&gt;
  }&lt;br /&gt;
  protected Background createBackground() {&lt;br /&gt;
    Background back = new Background(new Color3f(0.9f, 0.9f, 0.9f));&lt;br /&gt;
    back.setApplicationBounds(createApplicationBounds());&lt;br /&gt;
    return back;&lt;br /&gt;
  }&lt;br /&gt;
  public void initJava3d() {&lt;br /&gt;
    //  m_Java3dTree = new com.tornadolabs.j3dtree.Java3dTree();&lt;br /&gt;
    m_Universe = createVirtualUniverse();&lt;br /&gt;
    Locale locale = createLocale(m_Universe);&lt;br /&gt;
    BranchGroup sceneBranchGroup = createSceneBranchGroup();&lt;br /&gt;
    ViewPlatform vp = createViewPlatform();&lt;br /&gt;
    BranchGroup viewBranchGroup = createViewBranchGroup(&lt;br /&gt;
        getViewTransformGroupArray(), vp);&lt;br /&gt;
    createView(vp);&lt;br /&gt;
    Background background = createBackground();&lt;br /&gt;
    if (background != null)&lt;br /&gt;
      sceneBranchGroup.addChild(background);&lt;br /&gt;
    //    m_Java3dTree.recursiveApplyCapability(sceneBranchGroup);&lt;br /&gt;
    //  m_Java3dTree.recursiveApplyCapability(viewBranchGroup);&lt;br /&gt;
    locale.addBranchGraph(sceneBranchGroup);&lt;br /&gt;
    addViewBranchGroup(locale, viewBranchGroup);&lt;br /&gt;
    onDoneInit();&lt;br /&gt;
  }&lt;br /&gt;
  protected void onDoneInit() {&lt;br /&gt;
    //  m_Java3dTree.updateNodes(m_Universe);&lt;br /&gt;
  }&lt;br /&gt;
  protected double getScale() {&lt;br /&gt;
    return 1.0;&lt;br /&gt;
  }&lt;br /&gt;
  public TransformGroup[] getViewTransformGroupArray() {&lt;br /&gt;
    TransformGroup[] tgArray = new TransformGroup[1];&lt;br /&gt;
    tgArray[0] = new TransformGroup();&lt;br /&gt;
    // move the camera BACK a little...&lt;br /&gt;
    // note that we have to invert the matrix as&lt;br /&gt;
    // we are moving the viewer&lt;br /&gt;
    Transform3D t3d = new Transform3D();&lt;br /&gt;
    t3d.setScale(getScale());&lt;br /&gt;
    t3d.setTranslation(new Vector3d(0.0, 0.0, -20.0));&lt;br /&gt;
    t3d.invert();&lt;br /&gt;
    tgArray[0].setTransform(t3d);&lt;br /&gt;
    return tgArray;&lt;br /&gt;
  }&lt;br /&gt;
  protected void addViewBranchGroup(Locale locale, BranchGroup bg) {&lt;br /&gt;
    locale.addBranchGraph(bg);&lt;br /&gt;
  }&lt;br /&gt;
  protected Locale createLocale(VirtualUniverse u) {&lt;br /&gt;
    return new Locale(u);&lt;br /&gt;
  }&lt;br /&gt;
  protected BranchGroup createSceneBranchGroup() {&lt;br /&gt;
    m_SceneBranchGroup = new BranchGroup();&lt;br /&gt;
    return m_SceneBranchGroup;&lt;br /&gt;
  }&lt;br /&gt;
  protected View createView(ViewPlatform vp) {&lt;br /&gt;
    View view = new View();&lt;br /&gt;
    PhysicalBody pb = createPhysicalBody();&lt;br /&gt;
    PhysicalEnvironment pe = createPhysicalEnvironment();&lt;br /&gt;
    AudioDevice audioDevice = createAudioDevice(pe);&lt;br /&gt;
    if (audioDevice != null) {&lt;br /&gt;
      pe.setAudioDevice(audioDevice);&lt;br /&gt;
      audioDevice.initialize();&lt;br /&gt;
    }&lt;br /&gt;
    view.setPhysicalEnvironment(pe);&lt;br /&gt;
    view.setPhysicalBody(pb);&lt;br /&gt;
    if (vp != null)&lt;br /&gt;
      view.attachViewPlatform(vp);&lt;br /&gt;
    view.setBackClipDistance(getBackClipDistance());&lt;br /&gt;
    view.setFrontClipDistance(getFrontClipDistance());&lt;br /&gt;
    Canvas3D c3d = createCanvas3D();&lt;br /&gt;
    view.addCanvas3D(c3d);&lt;br /&gt;
    addCanvas3D(c3d);&lt;br /&gt;
    return view;&lt;br /&gt;
  }&lt;br /&gt;
  protected PhysicalBody createPhysicalBody() {&lt;br /&gt;
    return new PhysicalBody();&lt;br /&gt;
  }&lt;br /&gt;
  protected AudioDevice createAudioDevice(PhysicalEnvironment pe) {&lt;br /&gt;
    JavaSoundMixer javaSoundMixer = new JavaSoundMixer(pe);&lt;br /&gt;
    if (javaSoundMixer == null)&lt;br /&gt;
      System.out.println(&amp;quot;create of audiodevice failed&amp;quot;);&lt;br /&gt;
    return javaSoundMixer;&lt;br /&gt;
  }&lt;br /&gt;
  protected PhysicalEnvironment createPhysicalEnvironment() {&lt;br /&gt;
    return new PhysicalEnvironment();&lt;br /&gt;
  }&lt;br /&gt;
  protected float getViewPlatformActivationRadius() {&lt;br /&gt;
    return 100;&lt;br /&gt;
  }&lt;br /&gt;
  protected ViewPlatform createViewPlatform() {&lt;br /&gt;
    ViewPlatform vp = new ViewPlatform();&lt;br /&gt;
    vp.setViewAttachPolicy(View.RELATIVE_TO_FIELD_OF_VIEW);&lt;br /&gt;
    vp.setActivationRadius(getViewPlatformActivationRadius());&lt;br /&gt;
    return vp;&lt;br /&gt;
  }&lt;br /&gt;
  protected Canvas3D createCanvas3D() {&lt;br /&gt;
    GraphicsConfigTemplate3D gc3D = new GraphicsConfigTemplate3D();&lt;br /&gt;
    gc3D.setSceneAntialiasing(GraphicsConfigTemplate.PREFERRED);&lt;br /&gt;
    GraphicsDevice gd[] = GraphicsEnvironment.getLocalGraphicsEnvironment()&lt;br /&gt;
        .getScreenDevices();&lt;br /&gt;
    Canvas3D c3d = new Canvas3D(gd[0].getBestConfiguration(gc3D));&lt;br /&gt;
    c3d.setSize(getCanvas3dWidth(c3d), getCanvas3dHeight(c3d));&lt;br /&gt;
    return c3d;&lt;br /&gt;
  }&lt;br /&gt;
  protected int getCanvas3dWidth(Canvas3D c3d) {&lt;br /&gt;
    return m_kWidth;&lt;br /&gt;
  }&lt;br /&gt;
  protected int getCanvas3dHeight(Canvas3D c3d) {&lt;br /&gt;
    return m_kHeight;&lt;br /&gt;
  }&lt;br /&gt;
  protected double getBackClipDistance() {&lt;br /&gt;
    return 100.0;&lt;br /&gt;
  }&lt;br /&gt;
  protected double getFrontClipDistance() {&lt;br /&gt;
    return 1.0;&lt;br /&gt;
  }&lt;br /&gt;
  protected BranchGroup createViewBranchGroup(TransformGroup[] tgArray,&lt;br /&gt;
      ViewPlatform vp) {&lt;br /&gt;
    BranchGroup vpBranchGroup = new BranchGroup();&lt;br /&gt;
    if (tgArray != null &amp;amp;&amp;amp; tgArray.length &amp;gt; 0) {&lt;br /&gt;
      Group parentGroup = vpBranchGroup;&lt;br /&gt;
      TransformGroup curTg = null;&lt;br /&gt;
      for (int n = 0; n &amp;lt; tgArray.length; n++) {&lt;br /&gt;
        curTg = tgArray[n];&lt;br /&gt;
        parentGroup.addChild(curTg);&lt;br /&gt;
        parentGroup = curTg;&lt;br /&gt;
      }&lt;br /&gt;
      tgArray[tgArray.length - 1].addChild(vp);&lt;br /&gt;
    } else&lt;br /&gt;
      vpBranchGroup.addChild(vp);&lt;br /&gt;
    return vpBranchGroup;&lt;br /&gt;
  }&lt;br /&gt;
  protected void addCanvas3D(Canvas3D c3d) {&lt;br /&gt;
    setLayout(new BorderLayout());&lt;br /&gt;
    add(c3d, BorderLayout.CENTER);&lt;br /&gt;
    doLayout();&lt;br /&gt;
  }&lt;br /&gt;
  protected VirtualUniverse createVirtualUniverse() {&lt;br /&gt;
    return new VirtualUniverse();&lt;br /&gt;
  }&lt;br /&gt;
  protected void saveCommandLineArguments(String[] szArgs) {&lt;br /&gt;
    m_szCommandLineArray = szArgs;&lt;br /&gt;
  }&lt;br /&gt;
  protected String[] getCommandLineArguments() {&lt;br /&gt;
    return m_szCommandLineArray;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>