Hi, rbivens
Welcome to Xith3D and this board

.
I'm working through the tutorial from Xith In A Nutshell - 1st Edition, and I'm unable to add anything to the scene graph. I've spent 2 days working on this, thinking that Xith would be a replacement for jME. At this point, I'm thinking NOT!
Wow, hard judgement at this early point in gathering experince with Xith3D

. Why didn't you ask earlier

.
When did you download the XIN.pdf? I guess it must be months ago. It has been updated several times and bugs have been eliminated. This addEnvironment() method doesn't exist anymore for very long (it only existed for some weeks). The new name is addRenderEngine(), but generally it is not needed, since it is already done by the Xith3DEnvirnment constructor, if you pass the RenderLoop instance (
this) to the Xith3DEnvironment constructor like it is done in the example below.
I guess you're using the version 0.8.0 of Xith3D. One of the very first lines in XIN tells you do use a version greater than 0.8.0, since very much work has been done on Xith3D and not all features described in XIN are supported by 0.8.0. At the moment you have the choice to download the latest cooker version or checkout the latest SVN of xith3d and xith-tk. I strongly advise you to do the latter, since some bugs have been killed after the latest cooker release. The next cooker release will be available sunday or monday. The 1.0-beta1 will be released this year.
canvas.getComponent().addMouseListener(this);
canvas.getComponent().addMouseMotionListener(this);
We use an input abstraction layer called HIAL (thanks to William Denniss) for catching input events. It is integrated into and handled by the RenderLoop class. So you only need to call one of the register*Device() methods of the RenderLoop (like below).
env.getLocale().addBranchGraph(this.createScene());
Xith3DEnvironment provides several add*() methods to add nodes, groups or graphs. So you won't need to get the Locale or the root BranchGroup. The example below demonstrates one method.
This example is working:
public class EmptyScene extends ExtRenderLoop
{
public void onKeyReleased(int key)
{
switch (key)
{
case KeyCode.VK_ESCAPE:
System.exit( 0 );
break;
}
}
private BranchGroup createScene()
{
BranchGroup bg = new BranchGroup();
//GeoSphere sph = new GeoSphere( 8, GeometryArray.COLOR_3 | GeometryArray.NORMALS, .5f );
GeoSphere sph = new GeoSphere( 8, GeometryArray.TEXTURE_COORDINATE_2 | GeometryArray.NORMALS, .5f );
// Tell the TextureLoader where to load Textures from...
TextureLoader.getInstance().addTextureStreamLocator( new TextureStreamLocatorFile( "demo/textures/" ) );
// Put a Texture on the sphere...
Texture tex = TextureLoader.getInstance().getTexture( "stone.jpg" );
Appearance app = new Appearance();
app.setTexture( tex );
sph.setAppearance( app );
// add the sphere to the scenegraph
bg.addChild( sph );
return( bg );
}
public EmptyScene()
{
super( 120L );
// Create a new Xith3DEnvironment and link it with the RenderLoop
Xith3DEnvironment env = new Xith3DEnvironment( this );
Canvas3D canvas = Canvas3DWrapper.createStandalone( Resolution.RES_1024X768, "Mantis Framework Client" );
env.addCanvas( canvas );
// Prepare the RenderLoop to catch input events...
this.registerKeyboardAndMouse( canvas );
// Initialize the scenegraph
env.addBranchGraph( this.createScene() );
// Start the RenderLoop
this.begin();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
new EmptyScene();
}
}
If you have any further questions, please do ask here to make us help you out. Xith3D certainly isn't that bad as you might have thought

.
I hope, I was able to help.
Marvin