Tuesday, September 26, 2006

Interface APIs

Last night I started the Java 3D Interfaces (J3DI) API. J3DI is an "interface API". An interface API provides interfaces for the concrete and abstract classes of another API. The purpose is to be able to program your applications to the interface API so that you can swap out the underlying implementation at compile-time or run-time without additional coding. Applications and libraries programmed to manipulate instances of the interfaces will work with any of the implementations. Wrapper classes are used to adapt implementations to the interface API. They also shield application code from changes in the implementation APIs as they evolve over time.

J3DI is based on the Java 3D scene graph API. Sun Microsystems provides a public source reference implementation. Xith is an Open Source implementation of the Java 3D API with a few deviations. I developed a COLLADA loader for the Xith API. I also created a multiplayer game prototype and a 3D browser based on Xith. I am modifying the COLLADA loader, the game, and the browser to work with J3DI instead so that they can use either Java 3D or Xith as the underlying implementation.

Using J3DI also gives me the flexibility to experiment with a new implementation under development while retaining compatibility with working implementations. I am toying with a J3DI implementation (JIMP) that will render using another interface API, JIGL. No wrapper classes will be needed as the concrete classes will implement the J3DI interfaces directly. You can take a look at what I have so far in the project source code repository for J3DI, JIMP, and JIGL.


Monday, September 18, 2006

JIGL demo

Please see the JIGL demo applet and documentation that I created today.

Friday, September 15, 2006

JIGL

I am having some success in creating a JOGL-compatible wrapper API for jGL, a pure Java implementation of OpenGL. I am calling it the Java Interface to OpenGL (JIGL) because it lets you "jiggle" between JOGL-based hardware rendering and jGL-based software rendering at run-time. You can see what I have so far by browsing the library and the test application in the CVS repository.

The purpose is to be able deploy Whoola Cyberspace as an unsigned applet and still have it run when the JOGL native libraries are not pre-installed. I do have a prototype where it is deployed as a signed applet with the native libraries installed on demand but this is less than satisfactory as it brings up a window requesting that the users grant the applet full access to their machines.


Friday, September 08, 2006

Multiverse

I am at the Austin Game Conference where the focus is on online and multiplayer games. The most exciting thing I have seen here is Multiverse, a website that provides you with the software to build your own massively multiplayer online game (MMOG). The really unique bit about it is that they only charge you to use their tools if you are charging your users to play. That means academicians and hobbyists can use it for free. Is this the beginning of the 3D equivalent to the blogosphere?

Thursday, August 10, 2006

Microsoft Update as IE Homepage

I use Mozilla Firefox as my default web browser so I do not use Internet Explorer (IE) except when I am forced to by an IE-only webpage. I set my IE homepage to the Microsoft Update webpage so that I when I do use IE every now and then I am reminded to check for operating system updates and security patches. The Department of Homeland Security just issued an advisory recommending the installation of the latest security patches for Windows so you might want to head over to the Microsoft Update webpage now, especially if you do not have "Automatic Updates" running.

Saturday, August 05, 2006

JOGL and COLLADA Books

I just got back from ACM SIGGRAPH 2006, a computer graphics conference in Boston. I was pleased to receive a book I had ordered a few weeks before just before I left, Foundations of 3D Graphics Programming: Using JOGL and Java3D by Chen and Wegman. I had feared it would be delivered to my home the day after I left for the trip.

When I got to the conference, I was also pleased to purchase COLLADA: Sailing the Gulf of 3D Digital Content Creation by Arnaud and Barnes. COLLADA is a new non-proprietary open standard for 3D content in XML that I am using. The authors were kind enough to sign my copy.

I was mainly at the conference to demonstrate the Whoola COLLADA Library, an Open Source Java library that I wrote to import and export 3D graphics in COLLADA. I am excited about these two book as I think they will help me improve my code considerably. I am going to add them to the CroftSoft Book List.

Saturday, July 01, 2006

COLLADA and Google

For awhile now, I have been updating my Open Source 3D web browser Whoola Cyberspace to use the new XML-based 3D format COLLADA. To my pleasant surprise, I recently discovered that the free 3D modeling tool Google SketchUp exports to the Google Earth format and that the Google Earth format is based on COLLADA. This means that it should be possible to load Google Earth formatted 3D files into Whoola Cyberspace, including the growing collection of free 3D models in the Google 3D Warehouse. I am very excited about this and I have already had some limited success in getting this to work.


Free Software Updates

The free Open Source office suite OpenOffice has been updated to version 2.0.3. I read that it includes security fixes.

Version 9 of the free web browser Opera is now available.

Java 6 Beta 2 is out.

You can find a list of additional free and Open Source software on the CroftSoft Links webpage.


Thursday, June 22, 2006

Enumerated Type Message

Recently I have been using what I am calling an "Enumerated Type Message" for internal messaging between the model, view, and controller. Please see my template class Message.java for an example.

The Enumerated Type Message is basically a wrapper around an enumerated type with an extra field for arbitrary content. The extra field is necessary because you will often have messages of the same type instantiated at the same time with different content. For those messages with content that stays the same, e.g., null values, I create singleton instances.

I have added the creation of an Enumerated Type Message class as a new step in my Advanced Java Game Programming Checklist.