So I've been playing with jME3 today, I've basically converted my test environment to use jME3, and I have to say that that was quite some work. After speaking to Erlend, we decided it'd be a good idea to voice my concerns/problems to you, developers and fellow users, for insight or ideas
Geometry
In general, I think the learning curve for jME3 is steeper than for jME2, because of the Geometry system.
From jME2 tutorial 2 (changed it a bit):
Sphere s = new Sphere("My sphere", 10, 10, 1f);
s.setModelBound(new BoundingBox());
s.updateModelBound();
s.setDefaultColor(ColorRGBA.Blue.clone());
This is easy, it makes sense (or atleast it makes perfect sense to me). This piece of code now converts into
Sphere sphere = new Sphere(10, 10, 1f);
Geometry sphereGeom = new Geometry("My sphere", sphere);
sphereGeom.updateModelBound();
Material mater = new Material(assetManager, "/resources/Common/materials/SolidColor.j3md");
mater.setColor("m_Color", ColorRGBA.Blue);
sphereGeom.setMaterial(mater);
Now, I understand why this geometry system works like this (as explained by Momoko_Fan) but it just looks so cluttered. This brings me to my next point, materials.
Materials
Although partly explained aswell, I don't see why an object has to have a complete material definition for a simple static color. If it cannot change, no problem, but please return this in every 'setX' method to allow chaining :)
Material mater = new Material(assetManager, "/resources/Common/materials/SolidColor.j3md")
.setColor("m_Color", ColorRGBA.Blue);
Now this material definition file..even though they are not hard to understand, it feels like they require a lot of extra work to achieve the same. I understand they are much more versatile, since pretty much anything can be done in the material definition files (or..potentially everything :P), but a material def file for a solid color?
App Initialization
I had to do this:
final TestEnvironmentApp app = new TestEnvironmentApp();
app.setShowSettings(false);
final AtomicBoolean done = new AtomicBoolean();
final AtomicInteger result = new AtomicInteger();
final Object lock = new Object();
final SettingsDialog.SelectionListener selectionListener = new SettingsDialog.SelectionListener()
{
public void onSelection(int selection)
{
synchronized (lock)
{
done.set(true);
result.set(selection);
lock.notifyAll();
}
}
};
app.settings = new AppSettings(true);
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
synchronized (lock)
{
SettingsDialog dialog = new SettingsDialog(app.settings, TestEnvironmentApp.class.getResource("/resources/Common/images/banner.png"));
dialog.setSelectionListener(selectionListener);
dialog.showDialog();
}
}
});
synchronized (lock)
{
while (!done.get())
{
try
{
lock.wait();
}
catch (InterruptedException ex)
{
}
}
}
app.start();
Because I couldn't find a way to customize the settings dialog's image. Is this going to change?
Now for more..positive points!
Skybox
I like what you did with the Skybox. It just turned into a Geometry, which results in more abstraction, and has become more versatile.
Libraries
Love everything about it! Physics is in there, NiftyGUI is in there, don't have to worry about lwjgl natives - I didn't have to go hunt for the right files myself, it was simply a change of dependency directories and off I went!
Some questions:)
CameraNode, LightNode - are they going to be in jME3?
Is the settings dialog image going to be easier to customize?
I've found that some of the tests don't work (apparently Nvidia GeForce 9400M doesn't support HDR?), but all in all - I do like jME3, and will continue to work with it. Please don't see this as too much of criticism, just trying to wrap my head around things! Great job on jME3, and keep it coming :D