I’m new to 3D development, but I have very solid knowledge and experience with Java. I’m beginning work on a side project – a 3D game engine (I won’t bore you with the details of why I’m doing that).
I started with Java3D, and think I have a VERY basic understanding of how it works. I’ve gotten far enough that I can randomly generate terrain and display it. While I think Java3D is a powerful tool, it, as I’m sure you know, has had very little support lately, is not designed for games, and seems to be generally slow.
What I’m ultimately after is a middle layer above OpenGL (something like Java3D, Xith3D, or jME) that I can use to develop the engine.
You guys are probably all biased toward jME, but maybe rightfully so – just from looking around for the past 45 minutes, I’m generally impressed with it myself.
However, I’m concerned about banking on an open source project that I probably won’t be able to contribute code to – I simply don’t have the knowledge, or the time to gain that knowledge and complete my own project. (Of course, J3D is going open source, but it’s already got a large foundation and a ‘Sun’ stamp on it.)
As I see it, realistically I have 3 options:
Stick with J3D since I already kind of understand what’s going on.
Stick with J3D for now, and possibly port over to Xith3D later on (it’s similar enough that the port shouldn’t be too bad) for a speed improvement and other gaming features.
Start right now with jME, and generally abandon the J3D knowledge I already have.
My general concerns with jME is a lack of documentation/books/tutorials, which I can get for the J3D/X3D side of things. I’m not complaining – I know it’s a ton of work. It’s just a fact about the way things are. (Incidentally, I may be able to contribute short tutorials or guides on specific things after I learn how they work, but I’m obviously nowhere near that now.)
I was wondering if any of you have had similar situations, and if you had any suggestions for me?
Also, is there a nice summary somewhere of what all the classes are for? Like, something on a single page that kind of sums up all of the major features of jME and, more importantly, what classes are used to implement those features? I can read javadocs, code comments, and the code itself to get the details, but I’m missing a good starting point.
If there isn’t something like that, what are the chances of that being created? It seems like it would be immensely helpful to newcomers.
com.jme.renderer.* – Contains stuff like TextureRenderer, ColorRGBA, Camera…etc, most of those classes are abstract and LWJGLCamera…etc exists as concerete classes
com.jme.scene.* – Contains all types of Nodes, BillBoardNode, BumpMapNode, you attach spatials to those in a tree sort of way. A spatial is something that takes up "space", such as geometry.
com.jme.scene.model.* – Contains all types of models for loading into the scenegraph. The best one there is XMLParser which loads stuff from either an XML file, or a binary XML file. You can convert any supported model into .Jme
com.jme.scene.shape.* – Contains stuff like Box, Sphere, Disc…etc
com.jme.state.* – Contains stuff like AlphaState, which you add to a spatial which will have that state, so alpha can be applied. Similarly, TextureState, adds texture to the spatial. LightState adds light to the children of the node, there are loads more there, but thats the one you use most.
com.jme.sound.* – Contains stuff for sound. You need to init the SoundAPIController in the initSystem of the main loop.
com.jme.system.* – If youve seen a Jme demo, a little dialogue box appears, thats where its there, render specific implementations are there so that to obtain only the valid display modes.
com.jme.terrain.* – Awsome terrain stuff.
com.jme.util.* – TextureManager is there to load textures, the others, you dont need to worry about.
com.jme.widget.* – Widget stuff such as WidgetInsets
com.jme.widget.border.* – Border stuff for widgets
com.jme.widget.. – Each widget has their own com.jme.widget.something slot, we currently have Buttons, Labels, Sliders, ViewPorts, panels, Scollers, more are coming.
and that concludes the tour of Jme, hope you enjoyed your flight.
Thanks! That’s a great starting point for me to look at jME with.
It seems like there’s already a ton of stuff here and, from browsing the forums, it looks like there’s a lot of solidly working functionality.
BTW… forgot to mention the one detail about my ‘game engine’ project… My ultimate goal is to create it for non techie people (non-programmers, and even non-graphic-artists). In essence, abstracting away as much as possible and providing simple tools for purely developing content. (Then, of course, to use those tools to create my own vision.) It might be a pipe dream, but I’m still giving it a shot.
Any other thoughts or personal experiences?
How well does jME integrate with Swing? Not necessarily for the game itself, but for the tools I’ll need to create?
Also, another specific question… First, I’ll take a look at the terrain stuff jME already provides… but for my own knowledge…
My current terrain generation code (that I created with Java3D) creates a huge “triangle strip array” from an elevation map to handle the geometry (Eventually, I was going to break that up into multiple objects for faster rendering, but anyway…)
So… I didn’t see anything about triangle-strip-arrays. Are they a J3D specific thing? Is jME’s “equivalent” a TriangleMesh? Just interested in how to use jME in an optimal way. How much of that kind of lower-level optimization is done behind-the-scenes?
TerrainBlock is what your looking for. It creates a single mesh made up of little triangles. That mesh can have LOD. But the better way to do is in some cases is TerrainPage, which splits the terrain using a QuadTree, so you have 4 areas of a single terrain so that culling can occur and rendering speed greatly improved.
Because we are using LWJGL, Swing cannot be embedded into the same frame. But you can have it as an externel window communicating either via static methods/variables or just public methods to the window. For the Swing option, please see jmetest.effects.RenParticleEditor (dont run in fullscreen ).
Having said that, our widget library is basically swing on uber rockets. You could perhaps use our widgets for your app.
As DP mentioned, integration of Swing with jME is already accomplished! Check out renanse’s awesome particle editor for a great example. It should be relatively easy to create content-creation tools that are tightly intertwined with jME.
Also, in terms of documentation, the developers themselves are always available. Posting a question on these forums usually guarantees a swift response, or you can even IM us (or at least me…) if you wish.
I think it’s also worth pointing out that, in your transition from J3D to jME you won’t have to abandon all your knowledge. Many of the theoretical concepts remain the same, so it’s merely a matter of switching syntax and accomodating the idiosyncrasies of this platform.
I’ve been browsing the forums here today… I must say that I’m very impressed with what you guys have done here and how helpful you are.
I intend on downloading and installing tonight (wife permitting ). For my own knowledge/records, I’ll try and keep track of every little thing I have to do to get up and running.
Is there any need for a ‘newbie installation guide’ or something? I didn’t see anything like that. If there isn’t one, I could take a shot at writing it if it’d be helpful.
Is there any need for a 'newbie installation guide' or something? I didn't see anything like that. If there isn't one, I could take a shot at writing it if it'd be helpful.
This could be a great part to add to the user manual into the jME wiki :)
I got everything downloaded and installed last night. I really was starting from scratch… I even went ahead and upgraded to Java 1.4.2 (I was still using 1.4.1 b/c I didn’t really need the new UIs, the only major thing in 1.4.2).
I also had to install a CVS program and ant… never used them at home before.
The only real question I had was how to run the demos locally rather than using webstart. I assume there’s a way to do that, but couldn’t find it anywhere and didn’t have time to investigate.
Can somebody enlighten me on that?
Anyway… I’m working on that guide. I’ll probably get it done today… if not, then it’ll be tomorrow. I’ll post when I’m finished with it.
Oh… just had a thought. I should install cygwin and include that as a bonus section or something. I think there are a lot of unix/linux developers out there that won’t have that at home. I’m not an Eclipse fan (It deleted my source TWICE without me intending for it to), but if somebody wants to add a section on that, it might be useful as well. Any other IDE integrations that could use some explanation?
I also had another thought… From looking through the forums, some terms and acronyms get thrown around a lot that a newcomer isn’t going to be familiar with. I think that might be intimidating to… let’s say… less seasoned developers. (I don’t know about you guys, but I get acronym overload at work all the time.)
What do you guys think of having an addition to the FAQ (or wherever) that’s basically a list of all these common terms and what they mean?
I can try and come up with a list of things I think some people won’t know, but I’ll likely need help fleshing it out and explaining some of the jME/3D specific things. A few that come to mind from skating over the topic names in the forums:
LWJGL
JOGL
Mesh
Scene Graph
3DS, ASE, OBJ, MD2, MD3
SWT/AWT/Swing
OpenGL
Clod
Particle System
ODE
FPS (1st person shooter & frames per sec)
JGO
Java3D/Xith3D/Others?
CVS
Ant
Anyway… you get the idea. Again, kind of a newbie thing, but no sense in scaring people off, right?
Ive just been to the Xith3D site, and ive looked through what it can/can’t do. And im proud to say that whatever Xith can do, we do better, and in some cases, we do something and they dont.
com.jme.renderer.* -- Contains stuff like TextureRenderer, ColorRGBA, Camera...etc, most of those classes are abstract and LWJGLCamera..etc exists as concerete classes
com.jme.scene.* -- Contains all types of Nodes, BillBoardNode, BumpMapNode, you attach spatials to those in a tree sort of way. A spatial is something that takes up "space", such as geometry.
com.jme.scene.model.* -- Contains all types of models for loading into the scenegraph. The best one there is XMLParser which loads stuff from either an XML file, or a binary XML file. You can convert any supported model into .Jme
com.jme.scene.shape.* -- Contains stuff like Box, Sphere, Disc....etc
com.jme.state.* -- Contains stuff like AlphaState, which you add to a spatial which will have that state, so alpha can be applied. Similarly, TextureState, adds texture to the spatial. LightState adds light to the children of the node, there are loads more there, but thats the one you use most.
com.jme.sound.* -- Contains stuff for sound. You need to init the SoundAPIController in the initSystem of the main loop.
com.jme.system.* -- If youve seen a Jme demo, a little dialogue box appears, thats where its there, render specific implementations are there so that to obtain only the valid display modes.
com.jme.terrain.* -- Awsome terrain stuff.
com.jme.util.* -- TextureManager is there to load textures, the others, you dont need to worry about.
com.jme.widget.* -- Widget stuff such as WidgetInsets
com.jme.widget.border.* -- Border stuff for widgets
com.jme.widget.*.* -- Each widget has their own com.jme.widget.something slot, we currently have Buttons, Labels, Sliders, ViewPorts, panels, Scollers, more are coming.