New to 3D, Investigating jME

Hi, all.



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:


  1. Stick with J3D since I already kind of understand what’s going on.
  2. 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.
  3. 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.



    Thanks for your help and insights!





    Ken

com.jme.animation.* – No need to worry about those, Md2/Jme need those to function properly



com.jme.app.* – Extend the class that is approperiate for your game in order to create a game, contains the main loop of the game.



com.jme.bounding.* – contains the types of boundingVolumes that surround spatials (more on that l8r), needed for culling/collision detection



com.jme.curves.* – bezier curves and curve contorllers. For makeing NURBS



com.jme.effects.* – Contains particle system, transient faders, tint, and water simulation.



com.jme.entity.* – A single class that associates variables with a spatial, e.g. Health with Player



com.jme.image.* – Texture is there, the rest you dont need to worry about as TextureManager needs classes from there to load the images.



com.jme.input.* – All kinds of input stuff is there. e.g. FirstPersonController which controlls the camera in the 6 ways possible



com.jme.intersection.* – Classes needed for collision detection, and picking.



com.jme.light.* – Different kinds of light. SpotLight, PointLight…etc



com.jme.math.* – Contains Quaternions, Vector3f, Vector2f, Ray…etc



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.



DP :slight_smile:

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?



Thanks again!





Ken

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.



DP

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. :slight_smile: 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.



Thanks for your interest in jME!

Thanks again.



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 :smiley: ). 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.





–K

"Shmooh" wrote:
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 :)

DP: i think your above jme structure explainative post also belongs into the wiki’s user guide

(and the terrain block post too)



maybe such stuff should generaly be written to the wiki and only be linked from the forums ?

(tresure-chest-o-shared-knowledge)

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?



Any thoughts?





–K

All these terms can be found by a web-search.



But then … why not!

And if you take the time don’t forget to add links to the terms that are linkable (LWJGL, JGO, …) as this would be the best explanation.

All these terms can be found by a web-search.


Hmm.. good point. Maybe it's not worth the trouble.


--K

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.



Keep it up.



DP

No offense to the Xith3D folks (I have a lot of respect for them)… but that’s exactly why I’m here.





–K

"DarkProphet" wrote:
com.jme.animation.* -- No need to worry about those, Md2/Jme need those to function properly

com.jme.app.* -- Extend the class that is approperiate for your game in order to create a game, contains the main loop of the game.

com.jme.bounding.* -- contains the types of boundingVolumes that surround spatials (more on that l8r), needed for culling/collision detection

com.jme.curves.* -- bezier curves and curve contorllers. For makeing NURBS

com.jme.effects.* -- Contains particle system, transient faders, tint, and water simulation.

com.jme.entity.* -- A single class that associates variables with a spatial, e.g. Health with Player

com.jme.image.* -- Texture is there, the rest you dont need to worry about as TextureManager needs classes from there to load the images.

com.jme.input.* -- All kinds of input stuff is there. e.g. FirstPersonController which controlls the camera in the 6 ways possible

com.jme.intersection.* -- Classes needed for collision detection, and picking.

com.jme.light.* -- Different kinds of light. SpotLight, PointLight...etc

com.jme.math.* -- Contains Quaternions, Vector3f, Vector2f, Ray...etc

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.

This would be good in the documentation.

check the wiki under tutorials, its been there for around 6 hours now.



DP