Should I use JME in my project?

Should I be using JME as the rendering engine or am I better off using Java3D or another API?  I have not programmed in either API before.  Below is a general requirement for the project.



I will be drawing 3D buildings and building components created at runtime.

I need to be able to pick building components from the canvas and move/change/delete them.

I need to be able to walk through the building and activate/deactivate the

rendering of certain components.

I need to be able to switch to wireframe view and see where everything is. 

To more accurately represent the components in wireframe view and be less confusing

to the end users, I will need to render the components as quads instead of triangles. 

The project will be a swing app.  The end user will customize the building and see it changes

in a canvas on the screen.  I will need to print out some of the views.

grasshopper said:

To more accurately represent the components in wireframe view and be less confusing
to the end users, I will need to render the components as quads instead of triangles. 


This is the only point I wouldn't know how to realize in jme2, everything else is possible with jme2 (and java3D).

I figured I can use the QuadMesh class to render quads.



I'm leaning heavily toward JME because I think it has a larger active community and therefore my chance of finding help is a lot better comparing to Java3D.

I haven't used java3d, but most defectors to jME are quite satisfied with the switch (ease of use is what I recall off the top of my head).


grasshopper said:

I figured I can use the QuadMesh class to render quads.

I'm leaning heavily toward JME because I think it has a larger active community and therefore my chance of finding help is a lot better comparing to Java3D.


Frankly, QuadMesh is screaming for deprecation..  Video cards prefer triangles for almost all operations so jME has subsequently been given much more attention in the field of triangles.  In other words, quad meshes work for some things, and not for others (see this thread for one such case)

If you determine that QuadMesh is giving too many problems, you could probably write something to only interpret the triangles and not render one edge from each of them when in wireframe mode. The feasibility of this depends on the complexity of your scene and how many objects would be going through this routine at any given time, of course..

One idea is to triangulate the quadmesh for solid display, and generate a line mesh from the quadmesh for the wireframe display.

Cheat,



how about a texture, showing a quad and rest is transparent? then it does not matter if it is rendernd using triangles.

Empire Phoenix said:

how about a texture, showing a quad and rest is transparent? then it does not matter if it is rendernd using triangles.


The UV-Layouting would take some time though in this case. I think it can't be done correctly at runtime.

actually it is not that compilacted in case of a quad.



0,0

0,1

1,1

1,0



the two in the middle double, because the two triangles touch there



alternativly in amodel programm and just load as shared mesh

Empire Phoenix said:

actually it is not that compilacted in case of a quad.

0,0
0,1
1,1
1,0

the two in the middle double, because the two triangles touch there

alternativly in amodel programm and just load as shared mesh


lol, I know that, but have an existing model of a complex building and UV layout all the Quads on it ...

You could always read each pixel value and line it up so that every line in the picture is aligned with an edge, but I don't think that's the easy way :wink:

I either take the chance with QuadMesh or use TriMesh.  The wireframe view is mostly for troubleshooting purposes; it's not really requirement from the user.