Can I get a general statement on the philosophy/design behind the HUD stuff. I see things like RenderLoop and ScheduledOperation . How best to use these?
The one test of the HUD and a scenegraph (can’t remember the name but it has a HUD and a sphere) does not show the sphere.
What do you mean by philosophy? I’ll try to explain the HUD’s architecture…
First of all a HUD needs to be rendered in parallel projection on top of everything else. So the (presumably) perspectively projected 3D scene needs to be rendered first and the HUD last. This is a feature the MultiPassView will do for you. The MultiPassView is integrated in (Ext)Xith3DEvironment.
You’ll have to create a first instance of RenderPass (myPersRenderPass) and configure it to use perspective projection. Create a new (root) BranchGroup (myPersBG) and pass it to the addChild() method of your Xith3DEnvironment together with the RenderPass instance, e.g addChild(myPersBG, myPersRenderPass).
Then create a second instance of RenderPass (myParaRenderPass) and configure it to use parallel projection. Create a second instance of BranchGroup (myParaBG) and add the two to the addChild() method like you did for the others.
Now create you 3D scene and add everything to myPersBG.
Now for the HUD: Create an instance of org.xith3d.ui.hud.HUD and pass it to the addChild() method of myParaBG. Then create some Widgets and add them to the HUD. Please have a look at org.xith3d.test.ui.HUD3DTest, which should have an example for each Widget type.
For the RenderLoop and ScheduledOperation: Xith3D is not thread safe. This means, that if you make modifications on the scenegraph while the render thread is working, the result is unpredictable. This problem can be solved e.g. by scheduling a modification and let the render thread do it. This is done with ScheduledOperation and OperationScheduler. ExtRenderLoop implements OperationScheduler and can be used with it very easily. Do you know how to use (Ext)RenderLoop? Please have a look at org.xith3d.test.base.BaseTest to get a first impression. Just pass a new instance of ScheduledOperation to the scheduleOperation() method of your ExtRenderLoop instance.
If you wish, I can send you a part of the (incomplete) “Xith in a nutshell” document, which displays it a little nicer.
Did this help you? Fell free to add further questions.