Code for Experiments in 3D in JavaFX 2.0

Finally and belatedly I have published code for 3D objects in JavaFX 2.

The code is available at http://code.google.com/p/jfx3d.

Please note the warning about undocumented code.

From what I have seen the 3D code in JavaFX 8 (early access)  looks promising but this can only be a start; I think that it will need a lot more mathematics to make it really useful (see previous post). I have seen the recent post about a .obj importer (http://www.interactivemesh.org/models/jfx3dimporter.html) from InteractiveMesh.org – this should be good!?

Screenshot below shows all objects available at jfx3d.Image

JavaFX 3D Features in JDK 8

Had a quick look at the 3D api. I was surprised that I did not see any reference to Quaternions, Are these not essential for comprehensive 3D rotations and transforms? Most other 3D engines seem to have them.

I am considering trying to hook up the Bullet physics engine to JavaFX and exploring how difficult/painful this is going to be!

Jim

PS Posted here because of FXexperience database error on posting a comment!

Experiments in 3D in JavaFX 2.0

As a programming exercise I have started to play with the idea of adding 3D primitives and objects to JavaFX. I understand that JavaFX labs are working on this and it ‘might’ be a future release. From the comments and views on the bugs website (javafx-jira.kenai.com) I am not convinced that this will happen soon or at all. From my, limited, knowledge the amount of effort to make a  fully featured 3D scenegraph, would require considerable effort and resources, which I am not convinced that Oracle are prepared to commit. At the moment, and for the foreseeable future, I would recommend that anybody contemplating any serious 3D work should use an existing 3D scenegraph such as ardor3D (ardor3d.com).

My efforts (see screenshots below) have focussed on some of the basics of a 3D scenegraph:

  • Constructing triangles in 3D space, this is done by calculating a rotation matrix to map the required triangle to 2D space, constructing a JavaFX Polygon shape and transforming this back to the original location.
  • Creation of generic ‘Vector3D’ class for all 3D vector calculations.
  • Creation of a base ‘Mesh’ class.
  • Creation of 3D primitives (e.g. sphere, cube, pyramid, rod, cylinder, tube, torus – most of these courtesy of ardor3D) and bunny rabbit!
  • Smooth shading based on vertex normals using a JavaFX LinearGradient (yes, really!).
  • White diffuse lighting giving monochromatic color shading of meshes depending on material color (it is not possible to successfully blend shades/gradients in 3D); hoping to add specular lighting.

Yet to do:

  • Sort out specular lighting.
  • Material colors from .mtl files.
  • Triangle picking algorithm.
  • Tidy up code; add comments!
  • Publish code on google-code (blank website at code.google.com/p/jfx3d, no code yet).
  • Add physics, probably JBullet.

Will not do:

  • Textures, I have absolutely no idea how to do this.

Jim Kay

 

 Screenshot  of .obj model

 Screenshot of teapot (model – copyright (c) 2008-2010 Ardor Labs, Inc.)

Screenshot of teapot showing mesh lines, triangle face normals and vertex normals.

Hello world

My first blog on life, engineering, design, programming and everything else!