3D Menu Library (With 3D Fonts!)

Hi everyone!

I’m putting the last hand to a 3D Menu library featuring:

  • Dynamic 3D fonts, loadable on-the-fly from TTF files!

  • Labels, clickable Buttons, Sliders, Carousels (that's it for now!)

  • Panels, and transitions between them (immediate, sliding, rotating...)

  • Swing-like architecture

I intend to make it easy to use, in roughly the same way as Swing, but using JME Node transformations for simplicity.
I only post a screenshot for now, for I have still a bit of polish to do, but does any of you have special requests? Do you think this is useful*, and what would like to see next?


* I don't intend to re-do NiftyGUI, this lib won't feature XML loading for example, but the 3D Fonts smight come in handy. Plus, there might be some applications for a 3D holographic-style menu :)

Sounds like something similar that I’m working on to redo the menus and settings screens in Mythruna. :slight_smile: I don’t have 3D fonts but the gui supports it. I wanted 3D and flexibility to do a menu like this:


Mine is made of a few standard app states and controls that are useful on their own and I may post them individually at some point before I package the full lib. Together I bundle them into some Node subclasses to make convenient Labels, Buttons, etc. (that are all just regular nodes and controls under the covers) with custom style support similar to CSS.

Hopefully I will get mine to the point of publishing soon, too. It will be one of two community SDK plugins I push out at some point. The other being an improved input management thing that wraps InputManager.

P.S.: I in no way mean to detract from your work. In fact, I think it would be neat to get your 3D fonts in my library someday. :slight_smile:

awesome, the 3D text definitely looks interesting!

Cool, would be nice if it would be a proper Loader for the assetManager so one doesn’t have to deal with files or input streams :slight_smile:

The more integrated to the jME core the most easily other users can use it (the purpose of a open-source library!)

Sweet! I’m looking forward to those nifty alternatives :slight_smile:

Mmm, support for TTF fonts is interesting as the limitations of bitmap fonts are a nagging worry (missing characters etc). How much slower than bitmap text is it though? I guess once you create the mesh in the first place not much?

Indeed, I tried to lazy-load the whole Glyph Meshe thing, so that each font can keep track of meshes already created; but it still takes time creating the string.

A proper Loader would be indeed nice, but I’m not sure I have the knowledge to make it?

And, perhaps more importantly, my lib…

…Uses Java3D. I load a TTF font, create a Font3D from it, then copy the mesh data back to a Mesh object. Works neatly, but I’m not sure that’s ok by JME licence? If they are compatible, I could just copy the relevant code though.

Edit: Looks like it’s compatible: http://en.wikipedia.org/wiki/GPL#Compatibility_and_multi-licensing

I’m not sure I can rip off a part of the code though, but binding the lib is OK.

Pspeed, a unified 3D lib would indeed be a killer thing!

Hold on a few days, I’ll make it all open source, and we will decide what stays and what goes!

You can combine things into a GPL piece of software but then they basically become GPL (that’s what people mean when they say it’s viral). Licenses like the BSD license allow you to do this when including it in some other thing.

You cannot include GPL works in a less restrictive license, though. ie: you can’t go the other way. So JME licensed stuff cannot include GPL code unless it is a completely separate module… and then Richard Stallmen still disagrees with that interpretation since he believes even loading a jar file counts as linking.

Thanks for this explanation!

So, I guess I can only make the library as a BSD license then?

Here you are!


That went faster than exepected. Please feel free to browse, improve, etc.

Ask me if you want to help, I’ll ad you to the devs group!

Note: no carousels yet.

@carpentier-ch said:
So, I guess I can only make the library as a BSD license then?

If I understand correctly: No, it means that you can not use (copy or modify) code from or link (Stallman considers using a JAR-file as linking) to Java3D since that is GPL. If you do you may only release your code as GPL (that's the viral part).

But I think that Java3D might have the GPL-linking exception in the license. I think that means that you could release your code using any license as long as it only relies on other people downloading Java3D seperatly and your code calls into that JAR-file.

But still it makes it useless for any commercial application so really a differently-licensed version would be needed :frowning:

Okay, i switched it to the new BSD license.

Java3D is still included in the project but I clearly state that it’s used on the front page of the project.

In theory, you should link it yourself.

That doesn’t really help unfortunately :frowning:

Really need to find (or write) a non-GPL version of the functionality.

Java3D is GPL 2 + GPL linking exception, as far as I understand (I’m not really at ease with that licensing thing) it allows to link to Java3D without altering my project license!

As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obliged to do so. If you do not wish to do so, delete this exception statement from your version.

IANAL but I think that might actually do the trick. 1) You are free to link against Java3D without GPL going viral into your project. 2) You are allowed to copy & distribute the resulting executable. The only question I have is if this extends to copy & distribute the Java3D-jar. I think so but I have no special insight into this, I’m just a coder :slight_smile:

Yeah, that would be the worry. A commercial developer using it would need to package up the Java3d library as part of the install. If that then starts infecting the whole project with GPL then that would be a problem.

Java3D is being maintained by Harvey Harrison. You can find him on GitHub as well as the JogAmp forums:

GitHub - hharrison/java3d-core: Fork of the javax.media.j3d package

jogamp - java3d

I don’t know who’s officially in charge of the Java3D project any longer, but getting in touch with him would be a good place to start. Try open a discussion about a license change if you’d like. Alternatively you could ask for a separate licensing specifically for this project.