I looked over the first 2 chapters of the guide and had some quick thoughts that I’d share.
Before laying them out, I’ll say by way of introduction that I have gotten quite a lot of Java code working fairly well driving the Wildtangent visualizer plug-in. You can see some videos of my work at here. My work emphasizes small analog computing devices and so are rich in their use of scenegraphs rotating and translating subtrees in intricate and precise ways (check out the video of the Torpedo Director!).
One thing I found exquisitely well-presented in WT was that it couched its capabilities in terms that avoided reference to quaternions and matrices and dwelt instead on 3D vectors, angles in measured in degrees, global and local coordinate systems, and a class called “Orientation3D”. While it was not perfect by any means, it was sufficient and excused me from learning new concepts when none were truly needed (apparently!).
That’s not to imply that your work in providing a complete toolkit of primitives which enable a simpler (to the layperson) models of manipulating the scene graph is not a worthy effort! But, if jME also delivered more facile functions for translating and rotating nodes in local or absolute coordinate systems, I feel it would open up 3D coding on Java to a wider audience.
My sense of this was heightened just now when I went to Amazon.com and saw the bimodal impression created by the Eberly book you based jME on – the neophytes give it 1 star and claim it leaves them out of the loop. So, here are a few places where I realized that coming to jME was going to ask me to break open a book I’ve not yet had to buy.
- While I’ll readily admit to needing an education on the use of Matrix and Quaternion, the sample code in the user guide suggests to me that many operations around them are boilerplate cliches – some number of which which might be nicely wrapped on the objects they manipulate, e.g.: Vector3f, for instance, might define a rotateAboutAxis(Vector3f axis, float degs) function which hides the math and keeps neophyte 3D coders like myself thinking in the functional terms rather than the mathematical basis terms. Or a
- On a lower scale of “complaint”, I wonder if functions such as Spatial’s (local|world)Rotation() and (local|world)Translation() might be more friendly if Rotation and Translation were instead Orientation and Position? To me, the words currently used seem to describe the motions that result in changes to an object’s Orientation and Position rather than directly describing those attributes.
- I’m curious how I am supposed to use the interpolation/deltaTime parameters in *Game.update() and *Game.render() ? I found FixedLogicrate game pass in a deltaTime of -1 to its update() method. The time is SUPPOSED to be fixed, but why not just pass in its actual value anyhow?