Swing meets OpenGL
Swogl is a library for displaying and interacting with Swing components in 3D.
It can be used to easily create standalone applications with Swing Components
in 3D, or to integrate Swing components into existing applications. Nearly
all sorts of Swing components can be used to create a
, which is a three-dimensional
representation of the Swing component. A SwoglComponent may consist
of arbitrary geometry, and may be freely arranged in space. SwoglComponents
may be added to a
, which provides a
component for 3D rendering and manages the interaction with the SwoglComponents.
It may also arrange multiple SwoglComponents in space using 3D layout
The current version of Swogl should be considered as an alpha
and thus, the API of Swogl may still change!
2012-07-12: Swogl 0.4.0 is now available in the Downloads section
Classes for configuring the light setup and materials have been added.
It is now possible to create point lights, directional lights and
spot lights inside a SwoglApplication, and to define the material
properties of SwoglComponents. A sample showing the new classes
has been added in the Samples section.
New rendering backends for JOGL and LWJGL have been added, which
use shaders instead of the fixed function pipeline.
Some bugs have been fixed. See the change log for details.
The following is a preliminary, non-binding list of issues that may
be addressed with the next releases:
Augment the "Swogl Demos" classes to become an official part of the library
The Swogl Demos archive, which is contained in the download package, currently
contains preliminary implementations that support the interaction with
SwoglComponents and 3D layout managers. These classes will be generalized
and become part of a "Swogl Desktop" library which supports the development
of more complex, standalone Swogl desktop applications.
Better support of animations
One part of the extensions for the Swogl Desktop library will be the
implementation of classes that support animations. This refers to the
definition of paths for the animation of SwoglComponents in 3D layouts
as well as the animation of cameras and lights.
The shader-based rendering backends currently do not allow custom
shader code to be used. The classes might be opened for extensions
that allow the implementaion of special effects using custom shader
Each SwoglComponent could optionally be double-sided, in order to
show different Swing components on the front and the back of a
If you have further suggestions for improvements or extensions, or want
to vote for the development of a specific feature from this list, feel
free to contact
me or write a post in the Swogl forum
A bit of history:
A very early alpha version of Swogl had been published a while ago. With version 0.3.0,
Swogl has been significantly extended and improved compared to the first release.
The improvements addressed, among others, the issues that were brought up in the
and through the feedback that I received via mail. The main improvements compared
to the initial alpha release are:
Different rendering backends: The initial version of Swogl was only
intended to work with JOGL, and was tightly bound to the specific implementation
of JOGL. For the rendering in the new version of Swogl, different Java
bindings for OpenGL may be employed:
Additionally, the interfaces have been designed to allow an easy extension
to support other rendering systems.
Custom rendering: Originally, a Swogl application could only be used
to display SwoglComponents, and it was not possible to perform custom rendering
steps or render other scene elements. The refactoring for the new version of
Swogl also targeted a more universal applicability of Swogl. While it is still
possible to easily create a standalone Swogl application with a few lines of
code, the current implementation also offers classes that make it easier to
include the functionality of Swogl in existing applications.
Custom interaction: In the initial version of Swogl, specific ways
of controlling the SwoglComponents, camera and 3D layouts had been defined,
and it was not possible to modify the interaction in any way. The new version
provides a public interface for the camera, allows fine-grained control over
the processing of mouse events, and separates the actual functionality of the
3D layout managers from the way how they are controlled.