Version history
jPCT has been in development for several years. On this page, you'll find a brief overview of the changes and enhancements that each version delivered...starting from the very beginning.
Did you know...
...that there's no fixed schedule for new releases but in the recent past, two versions have been released each year!?
Between these official releases, you'll get access to beta versions through the forum.

Version history

  Version 1.31 2015-09-27
    Fixed Loader.readTextureNames3DS() to handle ill-formatted files better. Fixed getTransformedNormal() in the PolygonManager to not destroy a cached transformation matrix. Added a containsObject()-method to World. Synchronized the add- and remove-methods for Object3Ds. Moved settings for clipping planes from World to Camera, deprecated the setClippingPlanes()-method in World. Fixed Polylines in combination with viewport offsets. Fixed some near plane related problems in Interact2D. Added the option to shift the frustum in x-direction. Fixed a bug with setting the blitting shader. Added getters for name and type to VertexAttributes.
  Version 1.30 2015-11-19
    Fixed Object3D.setAdditionalColor() to allow for null values. Fixed a spelling issue in ExtendedPrimitives. Added support for a normals array to the bulk constructor of Object3D. Fixed VertexAttributess.update() with an index>0. Improved accuracy for ray-polygon-collision to handle smaller scenes better. Added better debug logging for texture handling. Fixed a memory leak when unloading textures in a threaded renderer. Added a new variant of the transform()-method to Camera. Fixed World.getBounds() to handle negative max values correctly. Increased performance of FrameBuffer.getPixels(). Added the option to set a shader for blitting. Added an option to preWarm only parts of the TextureManager's content. Added on option to shift the frustum in y-direction. Improved the 3ds loader to handle empty chunks better.
  Version 1.29 2014-11-03
    Added Lobby's ExtendedPrimitives class to the util-package. Changed the parameters of setSourceCoordinates in Overlay to floats. Fixed a bug that created a reference to a removed texture when adding a texture with the same name as the removed one. Added a check that the Matrix.invertXX() methods don't take the same instance as "to fill". Added the option to define a parent object of a Polyline. Added support for applying bloom to parts of the scene only to the BloomGLProcessor. Added the option to set a Matrix[] uniform. Added a getBounds() method to World. Fixed a problem with compiled object that were using environment mapping. Fixed getScale() on cloned objects. It now returns the actual value instead of 1. Fixed buffering of the transformation matrix for threaded renderers. Fixed a problem with the ray-AABB-intersection test. Added a getTranslation()-method to Matrix. Added a method to World to clear all Polylines at once.
  Version 1.28 2014-01-30
    Fixed Object3d.wasTargetOfLastCollision() to return false on objects that don't define the minimum distance when using World.calcMinDistance(). Fixed deserialization of Object3Ds that are affected by lights. Added a MODE_DECAL to TextureInfo. Fixed an error in the OBJ-loader with OBJ-files without a header. Made the DeSerializer aware of the file's mode. Loading a file saved in reduced mode will now trigger an error. Improved support for tangent vectors by making them accessible in the IVertexController and taking them into account when cloning a mesh. Added support for setting the fov angle directly in the Camera class. Added support for overriding a texture's texel data with a buffer's content. Fixed a performance flaw with different fogging distances used in one frame. Added a method to Texture to override the texture id from OpenGL with some other id.
  Version 1.27 2013-07-04
    Added get?Axis()-methods to Object3D that take a vector to be filled as additional parameter. Added a setAdditionalColor()-method to Object3D that takes ints instead of Color-instances. Added the option to dispose/remove a light. Fixed a null pointer when using IRenderHook. Minor performance improvements for high object counts. Fixed Object3D.wasVisible() for compiled objects. Added rotateAxis() to SimpleVector. Added reproject2D3DWS-methods to Interact2D that include a z-parameter. Fixed some documentation flaws. Fixed a flaw in light sorting when distance override is being used. Reverted the changed fov behaviour when setting the near plane that 1.26 introduced.Introduced a method to Camera to adjust the fov to a changed near plane. Fixed shader initialization when using tangent vectors. Added new class VertexAttributes and a method to Mesh to add them. Added an option to Polyline to draw points instead of lines. Added the option to apply a viewport offset to a render target to Config. Fixed SimpleVector.reflect() to not return *-1 of the reflection vector. Fixed culling when virtual dimensions have been set. Added some methods to make jPCT and jPCT-AE more compatible to each other. Removed the lower texture size limit of 8*8. Fixed a dead lock in the AWTGLRenderer. Fixed setting a texture in the PolygonManager on an object that uses less stages than Config allows. Improved performance and accuracy of PolygonManager.getTransformedNormal(); Fixed flat shading in the software renderer if culling has been disabled on an object. Fixed environement mapping on multi-textured, compiled objects.
  Version 1.26 2012-12-18
    Fixed a flaw with fogging when making multiple calls to draw() without calling renderScene() in between. Added support for loading normals from OBJ files. Added clearColorBufferOnly() to FrameBuffer. Fixed Object3D constructor for arrays. Ported Polyline from jPCT-AE back to jPCT. Fixed alpha support for mip-maps in the software renderer. Changed behaviour when setting the near plane. You don't have to manually adjust the fov anymore. Fixed a problem in the obj-loader with loading empty material definitions. Fixed a crash in the PolygonManager when adding a texture with no texture stages left. SkyBox doesn't crash on missing textures anymore. Added a method to get the projection matrix to Camera. Fixed a bug in the DeSerializer that assigned a dummy texture where it shouldn't assign anything. Fixed a problem where texture stages weren't initialized correctly in some cases when cloning a multi-textured object. Fixed a flaw with ellipsoid collision detection on scaled objects.
  Version 1.25 2012-06-06
    Fixed documention for Interact2D.pickPolygon(). Added a method to SimpleVector to calculate a reflection vector. Abandoned support for Java 1.1. If you still need this, jPCT 1.24 is the last version that supports it. 1.25 requires Java 1.4 at least. Fixed jogl support to work correctly when using GL20 features. Added setRotationPivot() to Overlay. Made animated objects use VBOs by default. Fixed a bug when stripping a multitextured object that should be rendered using a multithreaded renderer. Fixed a flaw that the actual problem wasn't reported when a shader didn't compile on some nVidia cards. Fixed some rare bug that caused ambient lighting to be too dark. Added a method setTransparency() to IRenderHook. This is needed only for threaded renderers. All others could get this information from the object directly. Added a method to lock a mesh to Mesh. Reduced temporarily object creation a little bit. Auto-adjusts color depth from 32 to 24bit on Linux. Added a method to Object3D to share texture data between objects. Reduced memory usage of compiled and stripped objects. Fixed a flaw when trying to set non-existent uniforms and attributes in a shader. Serialized objects can now contain an octree. Object3D.clearRotation() now also resets the scale. Fixed a problem when deserializing objects with diffuse colors. jPCT now automatically detects the default thread, so there's usually no need to set it in World. Added a calcAngleFast()-method to SimpleVector. The software renderer now support transparent/alpha mode when setBlending() has been set to true. Fixed a bug that screwed up textures when sharing meshes of objects that use multiple textures and were stripped. Fixed an inaccuracy in the Overlay when the camera matrix wasn't 100% orthogonal. Fixed a bug with not correctly managing states when using tangent verctors. Fixed setOrientation() on scaled objects. Added the option to override the calculated distance of a light to an object. Fixed a synchronization issue when using Object3D.getLightCount() on a multithreaded renderer. Fixed fogging when used in multiple world in one frame. Deprecated Texture.enableGLClamping() and replaced it with Texture.setClamping(). Changed behaviour of animated objects that share compiled data. Now, the parent object doesn't have to touched to update the animation if a child has been animated. Added Config.glAnisotropy= to enable anisotropic filtering. Added support for resizing the FrameBuffer when using the OpenGL-Renderer. Added getProgram() to GLSLShader. Added support for setting a maximum number of lights for an Object3D. Serialized objects now include the name of the object. Added a native buffer cache to work around a problem on some NVidia cards. Configure it with Config.nativeBufferSize=xxx; The rotation pivot will now be serialized and deserialized. Fixed Loader.readTextureNames3DS to actually read texture names. Fixed loading of flawed .mtl-files.
  Version 1.24 2011-10-10
    Fixed a bug when setting the texture matrix. Excluded Object3D's matrix cache from serialization. Fixed the OBJ-loader to handle files that contain "polygons" that only contain two vertices. Added support for diffuse polygon colors to the DeSerializer. Added on option to Config (useRotationPivotFrom3DS) to read the rotation pivot from a 3DS. Added an option to FrameBuffer to override a render target's dimensions for the fov calculations. Extended the IRenderHook-interface by a setCurrentObject3D()-method. Added a method to Object3D to query for the number of used lights at render time. Added support for multi-threaded geometry processing to World. Added a new class called WorldProcessor for this. This feature can help to improve performance in scenes with thousands of objects. Added support for autowiring tangent vectors into shaders that need them (just place a "attribute vec4 tangent;" in your shader). Compiled objects now default to VBOs instead of display lists. GLSLShader has been moved into the core package. Better logging for shaders. Improved documentation.
  Version 1.23 2011-05-29
    Changed exception handling in AWTJPCTCanvas. Added support for VBO as an alternative to display lists. Enable it with Config.glUseVBO=true. Corrected logging output of vertex count of compiled objects. Fixed a sorting issue for transparent objects. Added a SkyBox class to the util-package. Fixed blitting when modifying the near clipping plane. Changed default value for Config.glDynamicBatchSize to 2000. Added new a log level: Debug. Tweaked ellipsoid collision detection a little bit by back-porting some changes from jPCT-AE. Fixed a flaw in getWorldTransformation(). Made bill boards work with the ReflectionHelper. Fixed blitting into a render target as good as possible. It's still not advised to use this combination. Improved performance for the GLSLShader-class up to 30%. Added a new method clear() to the IRenderHook-interface that can be used to optimize some things. Better error handling of concurrent modification of the objects list. Fixed a bug in the obj-loader that ignored some material settings. Fixed a flaw in setting up the lights when mixing lit and unlit objects. Fixed some documentation flaws.
  Version 1.22 2010-11-24
    Added methods to Object3D to get and set a texture matrix. Added a method to load a serialized object to loader (was jPCT-AE only before). Added a method to Interact2D to reproject directly into world space instead of camera space. Fixed a bug in calcMinDistance.... in World. Ported some stuff back from jPCT-AE to make the APIs more similar. World.calcMinDistance now skips invisible objects. Added the option to remove sequences from an Animation and to get the name of a sequence as well as the index for a given name. Fixed a bug when mixing opaque and transparent blitting. Fixed a bug when sharing data of compiled objects with multiple textures. Improved the mergeAll-method to merge up to 1000 times faster. Fixed wrong results of getFirstContact() in the CollisionEvent when used with spherical collision detection. Fixed a flaw in setOrientation in Camera. The up vector now corresponds to jPCT's coordinate system. If you use this method, negate your up vector. Added a new constructor with alpha to Texture. Fixed a bug in get?Axis() when used on a scaled Object3D. Applied some minor tweaks for compiled objects and gross culling. Improved performance for some special cases.
  Version 1.21 2010-06-14
    Fixed a flaw with setting the fov for a render target. Object3D.getPolygonManager() is more lax now, you can now obtain a manager from the stripped object. However, that doesn't mean that you can call all of its methods without running into trouble. Fixed a bug with altering culling mode on an object in a multithreaded renderer. Applying a GenericVertexController to an empty object works fine now. Allowed null for the uvs-coords in Object3D's bulk data constructor. Added a getLogLevel() to the Logger. Fixed a culling bug when using the hybrid pipeline on a large render target. Added the ReflectionHelper to util to ease creation of reflective, planar surfaces like water or a marble floor. Fixed a flaw in the ShadowHelper when using a larger shadow map than the screen size without using fbos. Improved normal calculation and object compiling performance by a factor of 4-10. Added a DeSerializer-class that (de-)serializes Object3Ds into a simple binary format. This is intended to be used to load objects faster on low end platforms. Changed normal calculations from using doubles for some parts to floats. Matrix conversions from jPCT to OpenGL are a bit faster now. Added a method to the collision event to get the position of the first contact. Improved performance of the calcTextureWrapXXX()-methods by the factor of 100. Fixed initialization of the AWTGLRenderer when usign AA or a none-native resolution. Changed behaviour when trying to share compiled data with a mesh compiled in another context. Tripled performance of animated, compiled objects by taking over some optimizations from jPCT-AE. Synchronized camera related parts of the ShadowHelper. Added setRow() and setColumn() to Matrix. Clearing the frame buffer now takes the color's alpha into account. Fixed depth sorting for compiled, transparent objects. Fixed vertex updates of compiled, dynamic objects. Removed animateSync()-methods from Object3D. Added sub() to SimpleVector. Object3D.strip() is more aggressive now. The 3ds loader uses less memory now. Removed some synchronized stuff from the ShadowHelper, because it caused deadlocks in the AdvancedExample and wasn't really useful anyway. Fixed unload behaviour for display lists used by shared objects.
  Version 1.20 2010-01-21
    Improved the load balancer slightly. Added a preWarm()-method to the TextureManager to create some data right now instead of during runtime. Added a finalize-method to the software renderer to clean up things in case that somebody forgets to disable or dispose it before losing the reference to the frame buffer. Fixed a flaw in World that could cause trouble when one overrides the dispose-method. Fixed a bug in the downsampling code of the multi threaded software renderer. Added an option to Config to configure an individual batch size (Config.glDynamicBatchSize) for dynamically compiled objects. Added a hack into the AWTGLRenderer that allows for intialization of a multi sampled canvas on hardware that doesn't support it (i.e. Intel...). Added two more texture blending modes to TextureInfo, ADD_SIGNED and SUBTRACT. Fixed a bug in the multi texturing code of the AWTGLRenderer. Fixed a synchronization problem in the ShadowHelper when using the GLSLHelper in addition. Fixed a bug in World's calcMinDistance, which caused a CollisionEvent to be fired for each object in the ray's way, not just for the closest one. Added a calcMinDistanceAndObject3D() method that returns both, the min distance plus the object. Added a method to the PolygonManager to get all textures for a polygon, not just the first stage's one. A texture using a projector now defaults to no mip mapping to work around a problem that occured on newer ATI cards like the 5870. Added support for vertex alpha to all OpenGL renderers. Fixed fogging in the OpenGL renderers when using different worlds with different settings in one render pass. Fixed a bug in the lighting of compiled object when rendering different worlds with a different light count into one frame buffer. Increased performance when rendering a large amount of compiled objects up to 50%. Increased matrix performance slightly. Fixed 1.1 compatibility. Added a shareCompiledData()-method to Object3D that allows one Object3D to use the compiled data of another one. Improved performance for such objects. Added a contructor to world to allow for the creation of Object3Ds from bulk data. Added a fix for a strange driver problem of ATI's drivers that caused the driver to hang sometimes when combining compiled objects and blitted text in one frame. Added setOrientation()-methods to Object3D and Matrix. Improved performance of the matMul-method in SimpleVector slightly (up to 12%). Added a rotate()-method to SimpleVector. Added the option to re-normalize transformed normals in case that one uses a rotation matrix that doesn't apply to jPCT's "standard". Added a get()- and a transpose()-method to Matrix. Added an option to Config to make the OpenGL renderers use the configured near plane for frustum creation instead of a default value. Reduced space usage of serialized Object3Ds a tiny little bit. Added a method to World to override the clipping plane settings in Config. Multi threaded renderers may now run smoother on systems with only one core (depending on your application). Fixed an internal matrix cache for projective textures. Added a switch to Config to enable aggregation of blitting commands to execute them all at once. It's called Config.glBufferedBlits and it's disabled by default, because it doesn't really help performance wise. Added support for additional clipping planes to the hardware renderers. Added a transform()-method to Camera. Added a createNormal()-method to SimpleVector to create a plane's normal out of three of its points.
  Version 1.19 2009-10-06
    Added GLSLShader-class to util to ease shader handling. Fixed a little flaw in lighting of compiled object when using more than 8 lights in the scene. Fixed a flaw in Matrix.rotateAxis() that caused the direction vector not to be normalized correctly. Added a hack for the 64bit version of LWJGL 2.1. Added a calcAngle-method to SimpleVector. Added some methods to Config to access the configuration variables via their names instead of a direct access. Added support for multi-threading to the software renderer. Activate it by setting Config.useMultipleThreads=true; and have a look at Config.maxNumberOfCores, Config.loadBalancingStrategy and Config.mtDebug to configure it. Config.glMipmap now defaults to true. Added Config.mipmap, which default to false. It's the equivalent of glMipmap for the software renderer. Added support for per polygon mip maps to the software renderer. Added a method to World to add an array of Object3Ds. Fixed some documentation flaws. Worked around a VM-bug when using JOGL with shaders. Fixed a bug when compiling multi textured objects that caused some texture layers to disappear for one frame (usually the first). Fixed the crash that occured when using TextureInfo.MODE_BLEND. Fixed two flaws in the object compiler. Fixed 1.1 compatibility. Fixed a bug in the toXML-method of World. Fixed a naming flaw in the OBJ loader. Fixed a bug in the software renderer's render-to-texture code. Added the option to enable depth buffer writes for transparent objects in the software renderer on a per object base. This can be useful when using per-pixel fog in the software renderer. Fixed a bug in Camera.align(), which caused a problem when the object was being scaled.
  Version 1.18 2009-05-27
    Added support for "compiling" Object3Ds for higher performance when rendering high polygon object. Fixed scaling of child objects (again...). Object3D.getWorldTransformation() now takes bill boarding into account. Added a method to OcTree to disable the usage of the octree for rendering. Changed default collision usage of octree from false to true. The 3ds- and obj-loaders now load transparency information. Setting a render target using frame buffer objects now uses the depth buffer correctly for the image rendered into the target. Config.saveMemory is now true by default. The world's ambient light now defaults to 100,100,100 instead of -100,-100,-100. The purpose of negative light values is long gone with the legacy renderer being outdated. Fixed Object3D.getTransparency() for opaque objects. Added isTransparent() to Object3D. Added the IRenderHook-Interface that can be used to execute own code in the pipeline of a compiled Object3D. Added two helper methods to the ShadowHelper that can be useful in an IRenderHook. Improved overall OpenGL-renderer performance a little bit. Using a render target in the same scene that is rendered now works fine when using the single-threaded GLRenderer with FBOs. Added a setAlpha()-method to Texture. An Object3D can't be assigned as its own parent/child any longer. Added a static mergeAll-method to Object3D. Improved performance and memory usage for loading text based file formats like OBJ. Overlays are no longer selectable by default. Removed a deprecated enableGLCanvasRenderer-variant from FrameBuffer. Added the possibility to use JOGL instead of LWJGL for rendering into an AWT canvas. Removed the manual and the faq from the documentation. They were both outdated and should be replaced by the Wiki. Fixed a crash that could occur when disabling a multi-threaded renderer. Added a class for a simple lens flare effect to util. Added the option to rotate an Overlay.
  Version 1.17 2008-11-26
    Fixed a flaw in FOV-calculation, when yFov is explicitly set. Changed behaviour of Config.autoMaintainAspectRatio if yFov is given. Fixed a bug in the ShadowHelper, that caused the wrong objects to be excluded from the process. Added some helper methods to the ShadowHelper to ease debugging. Changed behaviour when re-uploading a texture that contains no pixel data anymore (i.e. when Config.glAvoidTextureCopies=true;). In former versions, this caused a crash in the upload. Now, it just creates a garbage texture. Changed caching behaviour of the texture upload method. Very large buffers won't be reused but discarded now. Fixed a bug in rotateMesh() when used on scaled objects. The FrameBuffer can now be asked about the maximum texture size that the renderers support. The ShadowHelper is using this information to adapt itself. The BloomGLProcessor now allows for 0-values for all attributes (was a minimum of 1 before) to allow for "blur-only"-effects. Added the options to the TextureManager to remove a texture and to unload it from video memory as well as do both in one step. Added internal caching for short lived object instances like Matrix and Integer (similar to what Java5 does in Integer.valueOf). The matrix cache is used in Object3Ds only and can be disabled. The Integer-cache is always on. Tweaked collision detection performance and memory foot print by reusing Plane instances. Added a variant of drawScene() to the ShadowHelper. Added an equals()-method to Matrix. Added alpha support to the GL-alike software renderer (thanks to Slartibartfast for his efforts). Object3D.setAnimationSequence() now supports null values to remove an animation from an object. Removed the fixed limitation of max textures from the manager. The setting in Config is still in, but its meaning has changed. Added a new Matrix()-constructor to Matrix, unified some code in the Matrix-class. getUpVector() in Camera now returns the correct vector, not the down-vector. Added an option to Config to relax video mode selection somewhat further. Made a formerly private constructor in Object3D public. You can now create an Object3D out of another one while reusing the same mesh. Grabbing the OpenGL screen on a PPC based Mac should now create correct colored images. Fixed a flaw in the 3ds-loader that caused loaded objects to use too much memory. Reduced jPCT's memory usage when Config.saveMemory is set to true. Added paulscode's setOrientation()-method to the camera. Added a getTargets()-method to the CollisionEvent. Ported jPCT to LWJGL2.0. You have to include the lwjgl_util.jar now in addition to the lwjgl.jar, because they moved some stuff over to util.
  Version 1.16 2008-05-05
    Added the possibility to the ShadowHelper to suppress the inversion of the culling when rendering the shadow map. Fixed a bug in the OBJ-loader that caused objects with multiple materials in one group to fail. Fixed some problems with particular models in the OBJ-loader. Fixed a flaw in getPolygonIDs in the GenericVertexController. The (opengl-alike-) software renderer now supports additive blending. Fixed a problem with serializing an Object3D that uses a PolygonManager. All serializable classes now include a serialVersionUID. Did some smaller code cleanups. Replaced the LWJGL1.0 by the current release 1.1.4. Added a HelloWorld-example to the examples-dir (docs are still missing for this). Improved state management to make jPCT work with the current release of FengGUI. Added a switch to autoBuild Object3Ds to Config. It's disabled by default to stay compatible with older versions. Fixed a flaw in normal processing when rendering objects that don't have a bounding box. Fixed a camera related flaw in Interact2D.reproject2D3D. Added the helper class Overlay to the util-package for easier creation of scalable overlays from textures. Fixed an array out of bounds exception in FrameBuffer.blit(int[]). Changed default behaviour for multitexturing with alpha-channels (the alpha inherits the blending mode now). Fixed a bug with projective texturing in the AWTGLRenderer. Added a more flexible blit()-method to FrameBuffer. Added an unbuild()-method to Object3D to allow for adding triangles to already build objects. Added the option to the ShadowHelper to disable an additional color during the shadow pass. Added an option to Config to enable/disable vsync (Config.glVSync). Added the possibility to define a border for shadow maps and render targets (OpenGL only). Added the option to disable an IPaintListener. Applied some minor changes to the GLRenderer that may help performance on some machines and improve error reporting if no valid video mode could be found. Added a dispose()-method to World. Should be called before the world goes out of scope. CollisionListener now extends java.io.Serializable.
  Version 1.15 2007-10-01
    Added a possibility to the TextureManager to get the name for an ID. Fixed a bug when using environment mapping on multi-pass objects. Fixed a flaw in the discrete polygon and triangle strip rendering. Fixed a bug in Object3D.clone() that prevented a transparency setting from being cloned. Simplified the visibility list management. Modified the behaviour of FrameBuffer.update() to make applications work that omit the call to one of the display()-methods. Fixed a bug in the getPosition()-methods for light sources. Fixed a bug in projective texturing that caused a wrong fov-value to be set. Added the possibility to Camera to explicitly set the y-fov. Added shadow mapping using a fixed function pipeline approach with depth textures. A new class in util called ShadowHelper eases shadow mapping. Added some helper methods here and there to ease shadow mapping. Added a method to Texture to add another texture's content to one. Added a new constructor to texture to create a blank x*y texture. Added the option to Config to force environment maps to the second texture stage (by default, they live on the first stage). Added a containsAlpha()-signature to the ITextureEffect-interface. With this, you can inform jPCT that the ITextureEffect supplies an alpha channel and that it should be used. If you are implementing ITextureEffect yourself and don't want to change the current behaviour, make this method return false. Fixed a bug in the OBJ-loader. This format has more variants than anything...
    Added support for FBO (if available) to speed up render-to-texture. Changed texture flipping behaviour for hardware render targets. Fixed a bug in render-to-texture in combination with mip-mapping/trilinear filtering.
    One may now use a dummy Object3D as a base for creating another one (results in another dummy Object3D). Fixed in bug FOV-calculation for projected textures. Fixed a null pointer that occured when trying to blit something to screen before rendering the scene at least once.
    Deprecated enableGLCanvasRenderer(int)...use enableGLCanvasRenderer() instead. Fixed some flaws in the documentation. Added an option to disable ambient lighting on an object. Fixed a flaw in bill boarding when working with parent objects. Added a switch to Config to disable this fix.
  Version 1.14 2007-05-29 (uploaded a fixed version on 2007-06-02)
    Added support for projective textures. Fixed a bug in post processor initialization. A post processor in OpenGL mode will now work without RGB-scaling being used. Improved performance for multi-texturing on some setups. Improved triangle-strip rendering. Videomode selection is now more loose, i.e. if there are problems finding a mode with the desired number of samples or zbuffer-depth, jPCT will try to find at least a similar but working mode. Fixed a bug in FrameBuffer.getOutputBuffer(). Optimized that method while being there. Fixed a bug in triangle strip rendering of the GLRenderer when doing transparency. Added the possibility to choose another transparency mode (=additive blending) on a per object base when using the OpenGL renderers. Made alpha frame buffer compatible with 1.1. Made VisListManager 1.1. compatible. Added some more getters to Object3D on request. Updated documentation. Fixed some minor flaws as reported by findbugs. Tweaked performance of the OpenGL-pipeline a little bit (up to 15% in benchmarks, usually much less in real applications). Improved sorting when using multiple rendering passes for faster rendering. Increased multi-pass processing performance a little bit. Added a method to Texture to disable a texture on all stages but the first one. Fixed a possible deadlock condition when using the threaded native OpenGL-renderer in combination with the KeyMapper. Added some methods to Loader to access the texture names of 3DS files. Fixed a bug in matrix calculation for projective textures. Swapped constants in Camera for left and right movement. This must have been wrong for years now and nobody noticed? Nobody used them? I don't get it!
  Version 1.13 2007-03-02
    Fixed a bug in the new Light class in the util-package. Added support for anti aliasing (2x and 4x) to the hardware renderer. Fixed a stupidity in FrameBuffer. Worked around a problem in the KeyMapper that caused an infinite loop when creating the Keyboard under some circumstances. Added a synchronization object for similar purposes to FrameBuffer. Added support for post processing of the framebuffer as well as an implementation that offers a bloom effect (kind of pseudo-hdr) for the OpenGL renderers. Added support for "render to texture" for all renderers. With this, it's possible to redirect the render into a texture instead of the actual framebuffer. Removed support for the legacy mode for OpenGL. Changed a framebuffer's default mode to software/opengl-alike instead of legacy. This is another step into the direction of dropping legacy support completly in the future. Changed RGB-Scale setting in the OpenGL renderers. Added support for Wavefront's OBJ-format to Loader. The framebuffer's alpha value is no longer 0 but 255 when using the software renderer. In addition, you can enable a framebuffer that supports alpha values for the software renderer by setting Config.useFramebufferWithAlpha to true. Fixed a bug in the per-pixel-fog of the software renderer when combined with oversampling. Modified the KeyMapper to support a key's character in KeyState in addition to a key's code. Reduced memory footprint for Object3Ds. Added a method to Matrix to copy one matrix' content into another. Fixed a bug in the notification of the collision listeners when using calcMinDistance(). There still is a problem with too many objects being notified if they are located closely behind the actually hit object, but i'll leave it like it is for this version.
  Version 1.12 2006-09-05
    Fixed a bug with vertex buffers introduced in 1.11. Fixed two bugs with using multiple FrameBuffers and the AWTGLRenderer. Removed some deprecated methods and did some code clean ups. Fixed a bug in the XML-Parser which caused the parser to fail when it encountered slashes in attribute values. Cleaned up normal calculations. Added some code provided by r.a.f.t to Mesh to allow for a smaller serialization foot print. Improved mesh compression. Added an URL-constructor to Texture that supports alpha. Changed behaviour of Object3D.getParents(). It will now return the actual parents, not the whole array regardless of used parent entries. Added a dispose()-method to FrameBuffer that should be called before the FrameBuffer will become unused by the application. An Object3D no longer holds a reference to a World to which it doesn't belong anymore. Added a Light-class to the util-package to ease handling of light sources.
  Version 1.11 2006-04-19
    Changed the 3DS-Loader. It now parses 24bit wide color chunks in the material as 3*float. This is NOT according to the specs i have, but to a model i tried to load. If it causes trouble, Config.oldStyle3DSLoader=true will take back the change. Fixed a bug in the VisList when a multi-threaded renderer was used and Config.maxTextureStages was set to a value lower than 4. Added a method to World to make the World use its own visibility list even if Config.shareVisibilityList is set to true. This is needed to render multiple Worlds into one frame when using a threaded renderer. Fixed a regression bug in object deserialization. Fixed a bug in Object3D.setName(). Tweaked vertex buffer performance a little bit. Added the option to Interact2D.pickPolygon(...) to ignore transparent and non-pickable polygons in the calculation. Added a method to VisList to get some data on the polygons in the VisList. Added a method to Interact2D that projects any vertex from world space into screen space (if possible). Fixed a bug in Object3D.mergeObjects() when an object with a bounding box was merged to one without. Added the option to override distance fading and discarding values from Config for a specific light to World. If you don't use this option, nothing changes. If you do use it, the settings from Config will be ignored. Added some stuff to the "manual".
  Version 1.10 2006-02-22
    Added support for TextureInfo to the PolygonManager, i.e. it's now possible to play around with multi texturing and/or coordinate modification on a per polygon base. Fixed a flaw in the texture uploading code of the OpenGL renderer. Added support for texture clamping and disabling of bilinear filtering/mip mapping to Texture when using the OpenGL renderer. Added support for multi pass texturing. When there are not enough texture stages available on the underlying hardware, jPCT will use multiple passes and one texture unit instead now. This is slower and may produce somewhat different results depending on the application. Added support for alpha channels to Texture and both OpenGL renderers. They can be used for transparent objects/blits. Fixed a bug in 2D blitting in the OpenGL renderer. Fixed/enhanced some parts of the docs. Removed some alpha related code from the 2d blitting routines...no clue, if it was of any need...i couldn't find any. Changed the state of the "don't use legacy mode when using OpenGL"-message from INFO to WARNING. Cleaned up the GL renderers. They are using a common base class now. Added an experimental version of a multi-threaded GLRenderer. Can be enable by using the normal GLRenderer and setting Config.useMultipleThreads=true before initializing it. Removed explicit polling of the keyboard from the KeyMapper. It's done during the display update anyway. Added a fix for a potential problem in the AWTGLRenderer when switching buffers. Increased performance of the GLRenderer (up to 50% in some scenes). Fixed a bug in the PolygonManager: The max. PolygonID has been calculated wrong. Improved OpenGL blitting performance significantly (up to 150%). Fixed a bug in the calculation of blitting coordinates when using a FrameBuffer of an uneven height and/or width. Added a method to FrameBuffer to clear the z-buffer without clearing the color buffer. Added a method to Object3D to remove multi texturing information from the object. Fixed two bugs in cloning and merging objects when using multi texturing (wasn't correctly cloned/merged before).
  Version 1.09 2005-12-23
    Added a strip()-method to Mesh and Animation to save some memory in keyframe animations. Fixed flaw with setting Config.farPlane in the GLRenderers. Fixed a bug in the triangle strips creation in combination with multi texturing. Triangle strips for multi textured meshes are stil not optimally created, but at least not buggy anymore. Fixed a bug in the software renderer's near plane clipping when setting Config.polygonBufferSize to anything but -1. Applied some minor (hardly noticable) performance tweaks to the AWTGLRenderer's command queue. Improved visibility detection for octree nodes.
  Version 1.08 2005-10-27
    Added support for multi texturing for the OpenGL renderer via the TextureInfo class. Added support for setting the fogs starting position (was fixed at 1 before). This affects the OpenGL renderer only ATM. Added two new constructors for OcTree and changed the documention. The former way of doing things could lead to the conclusion, that octrees are actually created for Object3Ds, which is not the case. The are constructed for Meshes. The new constructors and documentation changes reflect this better. Reworked the octree building a little. The OcTree is no longer implicitly calculating an Object3D's bounding box.Added two new setttings (glTransparencyXXX) to Config to allow the transparency to be adjusted for OpenGL. This won't affect the software renderer and will make the OpenGL renderer to produce significantly different results than the software renderer if changed. Billboarding is now cloned too when cloning an object. Added methods to Object3D to get the additional color and the lighting mode. Added a getParents()-method to Object3D. Fixed a bug in the AWTGLRenderer when using Config.viewportOffsetX and -Y. Changed default for Config.glVertexArrays to true. If you don't want them, disable them. Added some additional methods to the PolygonManager. Fixed a small bug in the GLRenderer that caused the supports()-method in FrameBuffer to fail.
  Version 1.07 2005-08-01
    Fixed a threading issue in the AWTGLRenderer when changing the FOV. Added the option to blit into the backbuffer. This is a fix for a problem that occures when one tries to blit into the background of a over-/undersampled framebuffer. Added on option to modify sorting order of the VisList. Can be helpfull in case of sorting issues with transparent objects. Added on option to Loader to disable vertex sharing (helpfull for loading otherwise unusable keyframes in some cases). Added a new constructor to Texture to create Textures directly from Images. Improved texture loading a little bit.Some fixes for the AWTGLRenderer: Fixed an occasional class cast exception when setting RGB-Scaling. Fixed a stupid bug that caused green color values to be mapped to green and blue when rendering (i can't believe that this one remained unnoticed). Modified frustum handling to cover a problem that could occur if two or more frames lie between two actually painted ones and the fov has been changed in between. Fixed a bug that prevented the command queue from being resized when needed in some cases which could result in some polygon missing for a frame or two. Fixed a bug that caused queued commands to be removed from the queue in some cases. Config.glFixedBlitting defaults to "true" now. Removed the hard coded limitations from the JAW-loader. This piece of code is still ugly as hell...avoid using this format....:-)Added a message when the polygon limit of the visiblity list has been exceeded. The message will only be printed the first time this happens.
  Version 1.06 2005-06-09
    Fixed two bugs in the ray-polygon collision detection. Removed some obviously dead code from ellipsoid collsion detection. Changed the constant NO_OBJECT in Object3D from -1 to -100 to get rid of a potential problem with ray-polygon collision detection. You'll have to recompile your code if you are using this constant. Made rotateMesh() and translateMesh() to affect an attached keyframe animation too. Moved some (non-public) methods from Object3D to Mesh (where they actually belong). Fixed a small bug that prevented the OpenGL renderer from recognizing that it has to set RGB scaling when using multiple Worlds with different scalings. Reworked some parts of the SoftGLRenderer slightly to improve performance in some situations. Fixed a bug with billboarded objects: Scaling wasn't applied to such objects. Fixed a flaw in optimizeBufferAccess(). Added support for LWJGL's new AWTGLCanvas by adding a new IRenderer, the AWTGLRenderer. It's now possible to notify a listener before painting of the actual polygons starts and after is has finished. That's useful for measuring fps with the AWTGLRenderer and may also act as a hook into the AWT event dispatch thread. Removed the loader for the deprecated PCT-format from Loader. Fixed a bug in Object3D.align(...) which caused the scaling to go crazy. Fixed a bug when using Config.polygonBufferSize with a value other than -1.
  Version 1.05 2005-02-23
    Increased performance of the SoftGLRenderer up to 10% in high(er) polygon scenes. Fixed a bug in the software renderer's RGB-scaling on worlds with ambient lighting only. Changed light value clipping behaviour in the lighting pipeline. Fixed a bug in the GenericVertexController: setup() has been called multiple times with incomplete data. Added a possibility to the IVertexController interface to get information about which vertices belong to which polygons. Added two set()-methods to SimpleVector to modify an existing SimpleVector with less code. Improved performance of vertex sharing and added a possibility to disable it on an object. Added an option to Config to make World use a shared visibility list. Added an option to run jPCT in a "save memory"-mode by setting Config.saveMemory to true. Reduced memory usage of Object3D by moving some T&L caches to the World instead. Fixed a bug in the ray-polygon collision detection. Fixed a bug in an optimization for the ellipsoid collision detection that caused wrong results when using very small ellipsoids. Added "polygonBufferSize" to Config to reduce memory usage. Default is -1, which mimics the behavoiur of older versions, but it should be save to set it 10 or 100 or whatever fits your needs.
  Version 1.04 2005-01-06
    Fixed an issue with ellipsoid collision detection: An optimization was applied even in cases where it shouldn't. Modified the code that maintains a World's object list to be smaller and faster for large object counts. Optimized ellipsoid collision detection. Cloning an Object3D now sets the center of the cloned object correctly. Fixed a bug in the ellipsoid collision detection which could result in false sliding planes being calculated when the velocity of an object was quite high. Added a possibility (Config.glAvoidTextureCopies) to get rid of a texture's image data copy in some cases to save memory. Minor changes to the TextureManager and to the documentation. the examples to get rid of the silly threaded timer approach.
  Version 1.03 2004-09-30
    Ported jPCT to LWJGL 0.92. Fixed a division by zero error in projectCenter3D2D() in Interact2D. Added a fix for a numerical problem in Camera.lookAt() and SimpleVector(). Cleaned up some classes to make them a little smaller and maybe a bit faster. Changed the default number of portals per world from 32 to 0. Because portal rendering is not widely used, this may help to save some memory. Fixed FrameBuffer.getOutputBuffer() when used with OpenGL-rendering. Cloning an Object3D now takes the user object into account. Fixed a but in Object3D that occured in combination with the XML-loader only. Added a toXML()-method to World.
  Version 1.02 2004-06-30
    Added a KeyMapper/KeyState class to the util-package to provide a standard way to access the keyboard regardless of hard- or software rendering being used. Fixed a bug in the calcMinDistance(p,d,f)-method. The method applied an optimization that wasn't correct in all cases. It's limited to the correct cases now. Fixed a bug in the rotateY()-method of SimpleVector. Added a new constructor to Object3D to make it possible to extend Object3D while still using loaded/created objects. Added two methods to Object3D to support user objects in case you don't want to/can't extend Object3D. Added getOrigin() to Object3D.
  Version 1.01 2004-06-03
    Fixed a bug in the ray-polygon collision detection (after a collision happened, there was no check for a collision that may be closer to the colliding entity then the detected one). Sphere- and ray-polygon collision detection won't recognize collisions with invisible objects any longer (ellipsoid never did...). Added a getSource()-method to the CollisionEvent to get the object that's the source of a target event. Fixed a bug in the CollisionEvent that caused a null pointer exception in some cases. Added a getRotationMatrix-method() to SimpleVector which can create a rotation matrix to rotate a (0,0,1)-vector to match another vector. Can be used to rotate objects based on surface normals. Fixed a bug in the GLRenderer that caused textures to appear red on systems that use big endian (like macs). Added support for transforming ellipsoids for collision detection. Cleaned up some code and fixed some flaws in the JavaDocs.
  Version 1.00 2004-04-28
    Ported jPCT to LWJGL 0.9. Fixed a flaw in the OpenGL renderer that caused a false OpenGL state in some cases (remained unnoticed but anyway...). Added a new PolygonManager class that allows to access polygons of Object3Ds. Replaced the deprecated setTextureForSinglePolygon() in Object3D with a setPolygonTexture() in PolygonManager that basically does the same thing. Added stuff to the CollisionListener/CollisionEvent that allows to query the Event for a list of polygons that where part of the collision. calcMinDistance() now notifies the CollisionListeners and affects the collision status of the object. Deprecated getPolygonNumber() in Interact2D and added getPolygonID() instead. Added a matMul-method() to SimpleVector. Added a getTextureByID()-method to the TextureManager.
  Version 0.99 2004-03-22
    Did some extended profiling and optimized both software renderers according to the results a little bit. Increased performance of the ellipsoid collision detection a little bit. Fixed a bug in the OpenGL-blitting. The VisList was counting the polygons wrong. This is fixed now. Refactored some parts of the Lights-class. Added support for vertex-arrays to the OpenGL-renderer. This is disabled by default (just because it's a new feature and may need some additional testing).
  Version 0.98 2004-02-12
    Texture, World, SimpleVector and Object3D are no longer final. Added a refresh()-method to the FrameBuffer to offer an easy way to post-process software rendered scenes. Added the possibility to recieve notifications in case of a collision by adding a CollisionEvent- and a CollisionListener-class. ISomeImageBuffer as well as its implementations are no longer public, because they weren't of any interest when using the API. Did some cleanups as suggested by the tools "Find Bugs" and "PMD". Removed some deprecated stuff from Object3D and Config. Added two new methods to SimpleVector. Added a fix for an accuracy(?) problem with ellipsoid collision detection (have a look at Config.collideEllipsoidSmoothing). The fix is enabled by default.
  Version 0.97 2004-01-08
    Modified the TerrainGL-code slightly. Removed the Bounce-example from the distribution. It simply doesn't add anything new compared to the other two examples and its code was quite outdated. Fixed a flaw in the blitting of int-arrays with OpenGL. Added support for loading the diffuse color of a material from 3DS files. This color will be used if a material doesn't contain a texture. jPCT will create a very small, single colored texture for such a color. Made Vectors package-public only. This way, it doesn't appear in the Javadoc anymore, which is a good thing because it wasn't needed to use the API anyway. The same applies to OcTreeNode. Changed the ellipsoid collision detection code to allow for elevators and similar entities.Removed the set- and getCamera()-methods from Camera. They were deprecated for quite some time now. If anybody is still using them, it's time to make your code use set- and getPosition() instead. Fixed some flaws in the Javadocs.Removed the (ugly and slow) postfiltering-code from FrameBuffer and the corresponding setting from Config.
  Version 0.96 2003-11-27
    Fixed a bug in Matrix.scalarMul() that caused this method as well as the scaling-methods in Object3D to produce wrong results. Fixed a flaw in the subpixel-accuracy of both software-renderers. Fixed a bug in the software-renderers 2d-blitting-method that caused incorrect clipping in some cases. Added support for ellipsoid-polygon collision detection based on a swept ellipsoid approach. Modified the FPS-example to use this method. Did some code cleanups and wrote a (still unfinished) section about collision detection for the "manual".
  Version 0.95 2003-11-10
    Fixed a bug in the JAW- and the ASC-loader that caused an Exception when loading files without a "return" at the end. Modified the JAW-loader slightly while being there... Deprecated Config.VERSION. Use Config.getVersion() instead. Fixed a bug in the RGB-scaling in combination with blitting into the framebuffer. Fixed a potential problem with wireframe rendering in OpenGL mode. Added a fix for 2D-blitting in combination with a 16bit z-buffer on some NVidia cards/drivers. Added the possibility to change the framebuffer access mode. This is a kind of workaround for a strange behaviour of some VMs on some CPUs. Added support for per pixel fog (it's not really per pixel in OpenGL, but anyway...). Fixed a bug in the 3DS-loader that caused the naming to be incorrect. Fixed a bug in Object3D.mergeObjects() that caused an ArrayOutOfBoundsException with some meshes. Most classes are now implementing java.io.Serializable.
  Version 0.94 2003-09-25
    Fixed a bug in the GLRenderer that prevented textures from being deleted (present since 0.93). Transparent polygons do no longer cause zBuffer-writes. Fixed an accuracy bug in the sorting of transparent polygons. Changed the behaviour of TextureManager.flush()...it doesn't create a new instance anymore but empties the old one. Added support for rendering a scene in wireframe. Fixed a bug in the ray-polygon collision detection that caused the detection to fail if the ray hits the backface of a polygon after hitting a polygon's frontface earlier in the process. Added support for merging objects.
  Version 0.93 2003-09-15
    Improved performance for discarding lightsources that are too far away from the current vertex. Modified the Logger so that an RuntimeException can be thrown in case of an error. The constants for the on-error-behaviour have changed from boolean to int for this. The World no longer accepts "null" as an Object3D. Fixed a small bug in Object3D regarding lighting. Reworked the Javadocs, so that no more params and return values should be missing. Finally removed setOptilevel() from Object3D. Fixed a bug that caused an ArrayIndexOutOfBounds-Exception on unlit objects. Added support for RGB-scaling to the SoftGL- and the GLRenderer (if hardware supports it). With this, it's possible to simulate (quite good!) overbright lighting even when using hardware acceleration. Added a "don't do this"-message if the OpenGL renderer is used in legacy mode, because i want to see the legacy mode of it go away sooner or later. Added an enableRenderer()-method to the FrameBuffer-class that doesn't support legacy mode anymore for the same reason. Ported the OpenGL-renderer to LWJGL 0.7. Fixed a bug in getPixels() for OpenGL. Added some convience-methods to the Camera-class to ease rotation of the camera.
  Version 0.92 2003-08-28
    Extended matrix-locking to cover the camera too (if locking is used). Worked on Matrix and SimpleVector to increase performance of some methods slightly. Removed unused transparency constants from Object3D. Added support for tiled textures (i.e. texture coordinates below zero and larger than 1) for the SoftGL-renderer. This requires that even the textures used for software-rendering only have to have a height of a power of 2 (jPCT will convert non-power-of-2-textures). Added some methods to SimpleVector, Camera and World to support first-person-shooter-like navigation better. Fixed a bug in the OcTree that caused collisions detection to fail in multi-threaded applications in some rare cases. Fixed a bug in the ray/polygon-collision detection in combination with octrees. Added an algorithm to automatically speed-up collision detection. Modified z-Sorting to ensure a defined sorting order (per frame) even for polygons with equal depth. Removed some unused or now useless configuration variables from Config (public and non-public ones). Reworked both software-renderers to be more pixel-perfect. Removed artifacts from the OptiZ-algorithm. It should work flawless in every situation now. Added the possibility to retrieve an object's center in worldspace. Fixed a bug in Object3D.calcCenter().
  Version 0.91 2003-07-16
    Fixed the docs, so that protected methods and/or members are not longer part of the docs. Added the possibility to exclude current lightsources from the lighting calculation of an object. Fixed a bug in Object3D that could cause an ArrayOutOfBounds-Exception when using portal rendering in a very rare condition. Added a XML-based scene-loader to the Loader-class (the format of the XML is still subject to change a little). Cleaned up some code (especially in the Loader...i hope it's still working...:-)) and reduced memory usage of the Loader and some Object3Ds. Added a first version of a "manual" to the documentation.
  Version 0.90 2003-07-01
    The ray-polygon collision detection routines are now able to utilize OcTrees for improved collision detection performance (was limited to sphere-polygon collisions before). Did some clean-up work on the GLRenderer. Could be little faster now, but very subtle. Did some general code clean-up work here and there. Added support for a kind of "Vertex-Shader" called VertexController. With this, one can modify the vertices of an already constructed object in a fast and simple way, while encapsulation of jPCT's internal vertex processing is still maintained.
  Version 0.89 2003-05-07
    Optimized the OpenGL-renderer a little bit. Added support for adding an offset to the viewport in x- and/or y-direction. Upgraded the OpenGL-renderer to work with LWJGL 0.6. This version won't work with LWJGL versions prior to 0.6. The VideoMode's equals...()-methods had to be changed to reflect the changes of LWJGL. Modified the terrain-example.
  Version 0.88 2003-04-23
    Optimized OcTree generation. The OcTree implementation generated too many nodes without any polygons or children in them. This is fixed now, which should increase tree traversal speed. Added two projectCenter3D2D()-methods to the Interact2D class to allow for projecting the center of an object from 3d objectspace into 2d screenspace. Fixed a flaw in the getWorldTransformation()-method in combination with lazy tranformations.
  Version 0.87 2003-04-06
    Added the possibility to ask an Object3D if it was a target of the last collision detection that took place. Improved frustum culling performance a little bit. Increased accuracy for some SimpleVector calculations. Increased accuracy of the Camera's lookAt()-method. Should be much more accurate now (i.e. less "shaking" of the camera).
  Version 0.86 2003-03-26
    Added some methods for aligning objects with the camera and vice versa. Added a scalar multiplication as well as some other useful methods to SimpleVector. Made some minor changes to some parts of the documentation.
  Version 0.85 2003-03-17
    Added a setScale()-method to the Object3D-class to allow for absolute scalings. Fixed a bug in the scale()-method that caused the normals to screw up after applying more than one scaling. Added a call to gl.finish() to the OpenGL renderer when switching buffers. Switched to LWJGL 0.5 for OpenGL support. This improves performance up to 10% and offers a much better handling for windowed OpenGL output. Added support for (faked) flat shading. It will look like flat shading but it won't be any faster than using gouraud shading.
  Version 0.84 2003-02-27
    Increased performance of the sphere-polygon collision detection by taking AABBs and the Octree (is available) into account. Improved performance of matrix multiplications and inverting. Added support for "lazy transformations" to speed up calculations for static (not moving or rotating) objects. This has to be enabled by calling enableLazyTransformations() in the Object3D-class. Improved performance of the octree. Improved support for reading materials and texture-coordinates out of 3DS-files.
  Version 0.83 2003-02-17
    Added support for octrees. Every object may now use an octree for rendering. Octrees can't be combined with portals for the time being but that shouldn't be too much of a problem. Removed FastMath from the documentation. I really don't know how it managed to appear there. It was intended to be a library for faster math calculations and i started with an optimized sqrt...which was actually slower due to some native call overhead...:-) Improved performance of the addTriangle()-methods significantly (up to 10 times faster object creation!).
  Version 0.83 beta 3 2003-02-05
    Fixed an accuracy flaw in the software renderer. Added support for sphere-polygon collision detection in addition to the former ray-polygon based one.
  Version 0.83 beta 2 2003-01-22
    Added some more methods to the Primitives-class to allow for non-uniform scaling on some more primitives. Added a 3DS-loader to the Loader-class. Fixed a little performance flaw in the frustum-clipping. Improved the MD2-Loader a little bit and cleaned up the Loader-class. Improved T&L performance for OpenGL.
  Version 0.83 beta 1 2003-01-20
    Added support for different renderers via the IRenderer interface. Added support for OpenGL via the LWJGL. Splitted the software renderer into a legacy one and a renderer similar to OpenGL (but in software). Fixed a flaw in the constructor of the FrameBuffer concerning motion-blur. Improved performance of the lighting calculations. Added a method to rebuild objects to use triangle strips. Added support for ignoring lightsources in the lighting calculations of a vertex that are too far away from the vertex (see Config.lightDiscardDistance). Fixed a flaw in the calcMinDistance()-method. Improved performance for the software renderer's texturemapping a little bit.
  Version 0.82 ????
    Added get- and setPosition()-methods to the Camera class and changed the get- and setCamera()-methods (that are doing exactly that) to deprecated. The naming of this methods was just stupid, so i finally decided to replace them. Fixed the convertDEGAngleIntoFOV()-method of the Camera class to work with Java 1.1.
  Version 0.81 2002-12-19
    Added some methods to the BufferedMatrix-class to allow more advanced handling of the Camera. Fixed a performance flaw in the collision detection. Added a new version of calcMinDistance() for optimizing some calculations where possible. Added a new and much faster normal calculation method (for complex objects). jPCT decides which method is faster depending on the object's size and uses the appropriate one. Reworked some parts of the documentation.
  Version 0.80 2002-11-18
    Added a calcTextureWrapSpherical()-method to the Object3D class. With this, it's easy to assign good looking texture-coordinates to primitives (and other objects too). Added a getBox()-method to the Primitives-class. Revived the linear distance fog option (fogging can now be enabled from within the World-class). The fog is per vertex only and not as powerfull as a real per-pixel fog would be. Support for real per-pixel fog will be implemented later. Changed some collision methods so that the return value is no longer a boolean but the ID of the object a collision took place with. If someone uses this methods, the sources have to be modified. I'm not happy with this, but i had to change it. Returning just a boolean isn't enough if it is important WHAT has been hit (and not just if).
  Version 0.79 2002-10-29
    Added a getPlane() method to the Primitives class. Added support for billboarded objects. Added a "useLatestFixes" switch to the Config class that may be helpfull when debugging things. Fixed the Loader documentation (return values were documented wrong). Done a rewrite of the edge-interpolation-method to get rid of some flaws that the sub-pixel correction caused on horizontal edges.
  Version 0.78 2002-10-22
    Added support for 1.5 x 1.5 oversampling. This is a faster alternative to the real slow 2 x 2 oversampling. Cleaned up the framebuffer code (should be more memory-friendly now). Fixed a bug when using undersampling for framebuffers with an odd width. Optimized the geometry pipeline by moving the OBB-culling to an earlier stage in the pipeline.
  Version 0.77 2002-10-16
    Added support for loading textures and objects from an InputStream. This is useful to access data-files stored in a JAR. Reduced memory-usage of the Loader-class. Reworked some parts of the documentation.
  Version 0.76 2002-10-12
    Added support for blitting pixel-data out of int-arrays into the framebuffer. Added a getPixels()-method for the framebuffer to gain access to the actual pixel-data of the framebuffer from outside of jPCT. Can be used for copying parts of the framebuffer into other images and/or back into the framebuffer using the mentioned blit()-method. Removed none sub-pixel accurate rendering from the mapper. Fixed some flaws in the documentation.
  Version 0.75 2002-07-20
    Added support for locking matrices when working with threads. Fixed some flaws for multi-sectored objects other than the main world (not recommended, but still supported). Added a method to allow to define an object as multi-sectored. Fixed a bug in the transformation code. Added a Logger-class for logging error and engine messages in a more flexible way. Added a lookAt-method for the Camera and a rotateAxis-method for matrices and objects. Improved accuracy in some Matrix- and SimpleVector-methods. Improved performance of the MD2-loader significantly. Fixed a bug in the getAxis()-methods for matrices. Implemented a work-around for a bug in older Microsoft VMs. Increased performance of filtered texture-mapping. 0.75 is the first version that is released as an API for download. The sample applet and application on this site are still using an older version, because i'm lazy with updating them.
  Version 0.74 2002-06-08
    Changed the innermost loop of the mapper for opaque, filtered textures. I thought that this would help with performance but it doesn't look like it. Anyway, it's in for now... Added support for loading MD2-files (Quake2 model files) and keyframe animation/interpolation. So finally, jPCT is able to load and handle animated objects. Various interpolation modes are available. Cleaned up the code, documented it and reworked some parts. Decreased memory usage by a small amount (some work is still required in this area). Fixed a bug in the clearObj()-method. Improved collision detection code and performance. Added AABB-checks (SLAB) for further speeding up collision detection. Fixed a bug in object-object-collision (wasn't working any more...). Moved object loading methods into the loader class. Fixed another bug in the collision detection methods that caused the detection to fail if no sectors had been defined. Added some more "API"-method that i'm currently not using myself but that may be useful depending on the application. 0.74 is NOT available for download, because i want to show the keyframe animations in the demo but some copyright issues have to be solved before.
  Version 0.73 2002-05-21
    Fixed a bug in the texturing of the planet in the application version. Improved rasterizer accuracy for the subpixel-correct mapper (edges are more accurate now). Fixed a bug in the transformation for lightsources. The transformation must have been wrong for ages...anyway, it's fixed now and should work as expected. This changes lightsources' behaviour in the demos...i have to adjust this, but i'm too lazy right now.
  Version 0.72 2002-05-09
    Improved culling performance a little bit. Added support for 'inverting' objects. Renamed some methods. Fixed a bug in the collision detection, which has been "introduced" in 0.71. This fix is the reason for this release....:-)
  Version 0.71 2002-05-02
    Added a possibility to reset the object counter from outside. This can be useful in applets, where the static counter is not set back to zero when reloading the page. Did some work on the API to make it cleaner and more logical. Splitted the mesh-data into a static (re-usable for other objects) and a dynamic (object-specific) part. Fixed a bug in the object-picking method. Added some more methods for API use. Added support for cloning of 3d objects. A cloned object uses the static mesh-data from the object of which it has been cloned from to save memory. Removed some now unused bounding-box stuff. Fixed a flaw in the OBB-Clipping. Added support for an automatic, bounding-box based sector-detection for (animated) objects. Cleaned up the code of the camera-class, renamed some methods and moved some properties. Changed object loading and initialization to be more logical. Added support for automated generation of OBB and AABB structures where needed. Added support for generating primitives via some static get"Primitive"() methods. Changed sector-detection of static, non-multisectored objects. Added support for collision detection on other objects than the main world. Optimized collision detection performance. Added support for collision detection between objects (but needs improvement). Reworked collision detection to get rid of a historical 'uglyness'...:-)
  Version 0.70 2002-04-14
    Improved support for cameraspace-based environment mapping. Improved lighting performance and the handling/calculation of vertex-normals. Removed a historical 'hack' in the calculation of the vertex-normals. Changed optional texture-wrapping (around objects) to look better. Made a lot of changes to start to make an API-like thing out of the mess that is jPCT... :-). Changed texture loading method to determine the size of the texture by itself. If the width isn't a power of 2, the texture will by scaled to a width of 256. Fixed a bug in the texture-coords calculation for the bumpmaps. Added a reference to the orginal polygon of a clipped polygon to the visibility list. With this, every polygon in the visibility list is associated with its 'source'-polygon. Added support for object- and polygon-picking via the mouse (or via whatever :-)). Implemented object-picking and zooming into the application version (use left and right mousebutton). Added support for hierachical object bindings. Removed the golden droid from sector and placed a bumpmapped globe with a spinning moon there instead to demonstrate the hierachical object bindings. Updated the benchmark-path and the reference values. Improved subpixel and subtexel,-bumptexel and -gouraudshading quality (former versions weren't really sub-correct at all). Correction can be toggled by pressing 'x'. Improved performance of the mapper a little bit. Added a very simple cache (one entry...the last :-)) for object-files. Changed the applet-demo (finally).
  Version 0.69 2002-03-06
    Replaced the (rather faked) cameraspace-based environment mapping with a worldspace-based one. Press 'i' to switch between them. The later represents 'real' spherical environment mapping while the former is a kind of trick that looks better on static objects (IMHO). Anyway, the worldspace-based approach is used by default.
  Version 0.68 2002-03-06
    Changed the readme.txt. This version was intented to be published on a CD by a portuguese magazine, not for download. It also features some code cleanups.
  Version 0.66 2002-01-14
    Added support for the 'zTrick' to avoid clearing the zBuffer between two frames. This approach reduces zBuffer-accuracy by one bit, but improves performance by up to 10% and more. The optimization fitted quite nicely in jPCT's rendering concept. It can be toggled by pressing 'r'. The zTrick requires the whole zBuffer to be filled in each frame, so it is only suitable for indoor scenes and therefor not used in the applet.
  Version 0.65 2001-12-29
    Fixed a bug in the clipping of transparent objects. Changed the object-modell a little: Moved some properties from the world.class to the portal.class. Cleaned up the code. Changed priority for the texture-loading thread (applet only). Hopefully this fixes some problems with loading the textures on slower machines.
  Version 0.64 2001-10-23
    Added support for specular lighting using the half-way-vector method as described by Blinn. Looks great on more complex models. At the moment, only the applet-version makes use of it, because it doesn't look too good in the application (the used level has a too low poly count to look good with specular highlights). The highlights can be calculated in the 'correct' way Blinn describes as well as in a way Schlick describes it. By default, Schlick's approximation is used. It's faster and (IMHO) better looking. You may change this by pressing 'k'. Changed the lights in the applet a little bit. Added a 'Loading textures...'-message to the applet.
  Version 0.63 2001-10-23
    Implemented a simple postfilter (2x1) to soften the rendered image. Looks good or bad, depending on the image. It's just an experiment...it's still in jPCT, but there's no way to enable it in the demo for now. (Note: This version was never available for download).
  Version 0.62 2001-07-24
    The mapper now uses some local references to the pixels-, zbuffer- and texels-array to avoid expensive dereferences in the inner loop. This speeds up texturemapping a little bit. As usual, the speedup is not as great as it was supposed to be...anyway...:-)
  Version 0.61 2001-06-17
    Reconfigured the renderer by changing some 'historical' settings to better fitting ones. This increased texturemapping accuracy. Added a simple loader for Crystal Space world-files. I used this one to load a converted DOOM-map into jPCT for testing purposes. This DOOM level had 400 sectors, 1002 portals and around 5000 polygons. I wanted to find out how the engine behaves under heavier load and i have to say that it handled the many portals and sectors (at least compared to the level i'm normally using) with ease. I'm very pleased with the results. Anyway, the loader and the level are not included into the public demo, because the loader is too buggy and the level is not really suited for jPCT (culling must be turned off for all polygons to be displayed and such stuff).
  Version 0.60 2001-05-28
    Reduced memory usage a little bit by removing useless object creations (by re-using objects). Removed some float-to-int-conversions from the mapper.
  Version 0.59 2001-04-07
    Did some work on the texture mapping methods here and there.
  Version 0.58 2001-03-17
    Improved accuracy of the texture mapping. Tested a little optimizer program called jOPT. While it decreases size of the class-files, it costs some performance...so i decided against it...:-)
  Version 0.57 2001-03-15
    Fixed some flaws in the 3d clipping code (again). Reworked the lighting calculation to fix a bug in the environment mapping.
  Version 0.56 2001-03-14
    Added support for blending bumps together with a base texture. While this kills fillrate some more, it looks very nice (sometimes...). The effect is used on the dragon at the moment (when bumpmapping is turned on) and on the cube in the applet version. Fixed two bugs in the filtering of bumpmapped polygons and one in the clipping of bumpmapped polys. Made bumpmapping bound to objects and not to the whole world.
  Version 0.55 2001-03-08
    Improved OBB culling and changed some environment textures. Improved performance of the filtered texture mapping (more optimized for JITs now).
  Version 0.54 2001-02-28
    Fixed a flaw in the mapper that could cause small gaps between polygons where none should be. Removed some unused code. Fixed a bug in the OBB culling method.
  Version 0.53 2001-02-26
    Added a bounding box for the objects. It's used for view frustum and portal culling. Improved edge interpolation for the polygons to be more precise.
  Version 0.52 2001-02-08
    Replaced 'normalized culling' with a normal view-frustrum-culling. I was doing this anyway, but later in the pipeline. I moved it to an earlier stage, where the benefits are greater. I must have been a little stupid not to do so from the start.
  Version 0.51 2001-02-07
    Improved filtering and increased lighting performance a little bit. Improved polygon culling by adding 'normalized culling'...at least i think it's called like that.
  Version 0.50 2001-01-24
    ..........the filtering was wrong since...i don't know...too many polygons were filtered that shouldn't have been. I improved this situation but am not 100% satisfied with it. Anyway, it's ok for now.
  Version 0.49 2001-01-23
    Redesigned the matrix-classes (had two, one for 3x3 and one for 4x4...don't ask...it's all 4x4 now) and the camera class. Due to historical reasons (which i can't recall nowadays), the camera's postion was stored as -1* it's actual position. This unlogical flaw is fixed now. Implemented the calculation of a bounding box for each sector. This information is used for the sector-detection (in which sector is the camera?) and the collision detection. Fixed a bug in the processing of clipped portals. Updated the reference values for the benchmark.
  Version 0.48 2001-01-19
    Bound some sector information to the objects (were part of the portal class). This removes the limit of one multi-sectored object only. Additionally, this is the more logic and clear approach. T&L now make use of the PVS. This way, the number of unnecessary transformations is reduced greatly. Anyway, the demo-level is too small to show any benefits of this.
  Version 0.47 2001-01-08
    Improved the spanbased HSR approach to cover more cases. While this increases the overhead of this method slightly, the benefits are greater. Moved the portals to their own object (they were part of the main world before). This allows me to make use of the PVS even when rendering the main world. In the demo this wouldn't help much, but if levels get more complex, it should be useful. Fixed a bug in the calculation of the normals.
  Version 0.461 2001-01-03
    Damn! 0.45 and 0.46 suffered from bad performance when rendering the ladydeath object, because it was rendered twice for every frame. This was caused by a bug in the scene3d file. It's fixed now. A new benchmark-path is in, but the reference numbers are not updated at the moment. Results from the new benchmark should be a bit higher.
  Version 0.46 2001-01-01
    Added collision detection (a fast ray-triangle intersection method to be exact). Used in the application only and still not fully optimized.
  Version 0.45 2000-12-28
    Added support for transparency. Adapted visibility list to maintain an object's configuration (environment mapped, transparent...) on a per polygon base for clipped polygons. Implemented a workaround for an accuracy issue with transparent objects and the ZBuffer...still not perfect, but it works for now.
  Version 0.44 2000-12-18
    Added a (still experimental) span-based HSR extension. This should help to save fillrate by not drawing spans that can't be seen. It's most efficient with low-poly objects that are close to the viewer. Fixed a flaw in the texture mapping methods. The mapping should be a bit faster now.
  Version 0.43 2000-12-16
    Moved the redundant code for loading files into its own class (loader.class). Moved parts of the scene-description out of the code into a file and added a loader/parser for this file. Fixed application and applet main classes to handle the new scene-description file without crashing. Added one-way-wireframe (once you entered it ('w') there's no way back...) for the application.
  Version 0.421 2000-12-09
    Implemented a workaround for a bug(?) in Netscapes JVM that caused the clipping at the left part of the screen to fail. IE's JVM and JAVA2 worked fine...well...Netscape!!! Tested a little tool called Javago for bytecode optimization. The current version is optimized with this tool for testing purposes, but it doesn't seem to have any benefits.
  Version 0.42 2000-12-09
    Improved clipping performance and fixed a flaw in the ZBuffer optimization.
  Version 0.41 2000-12-09
    Improved polygon throughput for objects that are bound to a specific sector in the case that only one portal into that sector is visible. Cleaned up portal clipping code.
  Version 0.40 2000-12-08
    Improved the clipping code's accuracy a little bit. Added possibility to optimize loaded objects in polygon/vertex count. Added possibility to define an object as not cullable (no backface culling will be performed on that object). Added three mushrooms to the scene. Added a method that calculates a dynamic PVS to prevent invisible objects from being processed before they are discarded anyway.
  Version 0.39 2000-12-06
    Increased lighting calculation performance by moving some redundant called code out of the gouraud shading loop. Cleaned up the methods in the mapper class. Changed clipping at the portals from per polygon to per pixel clipping. That speeds up rendering up to 20% in some situations.
  Version 0.38 2000-12-04
    Added possiblity to presort the polygons in the visibility list according to their depth. This makes rendering of overlapping objects more efficient, but decreases performance when no overlapping is present. Whether or not it's a good thing highly depends on the displayed scene. In general, it should help to keep the framerate more constant.
  Version 0.37 2000-12-03
    Added a portal-to-portal-clipping and fixed a flaw in the clipping methods that caused too many invisible polygons to be added to the render pipeline. They weren't rendered anyway, but they consumed processing power with no need. Improved sector detection for portal rendering. The applet version doesn't feature the indoor scene like the application version does. If you want to see jPCT in all it's glory, you'll have to download the application version.
  Version 0.36 2000-11-29
    Some major changes and additions: jPCT is now able to load and convert a legacy PCT world incl. lightsources and portals. To assure good indoor rendering performance with these worlds, portal rendering hsr has been added to the engine. The used approach is quite simple as the clipping takes places only at the portal's bounding box and it's based on polygon clipping only. The determination method for the position of the viewer (in which sector is the viewer?) is still not very powerfull and makes some mistakes here and there...work is needed in this place. Increased projection performance. This speeds up the engine when displaying larger objects.
  Version 0.35 2000-11-25
    Implemented a little benchmarking tool (application only). This goodie is activated by pressing 'p'. Fixed a bug in mapper.class that caused an array out of bounds exception in very rare situations.
  Version 0.34 2000-10-17
    Fixed a flaw in the texture-coordinate handling that caused the last row/column to be skipped by the mapper. Tweaked performance of the mapper.class a tiny little bit. Changed scaling-calculation to maintain aspect ratio when resizing the framebuffer.
  Version 0.33 2000-10-12
    replaced the filtering algorithm with a faster AND better looking one. The decision filter/don't filter is still span-based but modifications may be necessary for the new algorithm. Anyway, for this version i won't make any.
  Version 0.32 2000-10-06
    Stored the most important engine-configuration-parameters and -methods in the new config.class. While this may not follow a pure object-oriented-approach (depends on the view of things...), it's easier to maintain and it seems also a little bit faster due to faster access to the configuration variables.
  Version 0.31 2000-08-04
    added application-support in the ASC-loader (was applet-only). Enhanced applet ASC-loader to handle files of any size (but still limited to a hardcoded # of polys). Improved processing of add. texture-coords in ASC-files. Changed filtering to be completely spanbased. This is still not 100% perfect but better than before. It removes the need to filter env-mapped objects all the time. Added some new objects, but because of unresolved copyright issues with the used models, this version is not av. online.
  Version 0.30
    Improved the bumpmap (the bitmap, not the algo). Added a little optimization for the ZBuffer called OptiZ (tm :-)). With this, reading from the ZBuffer is reduced from 0% (one read every pixel) up to 100% (no read at all) depending on the scene. This improves performance of the mapper-class slightly (up to 10%).
  Version 0.29
    Done a complete rewrite of the transformation and the corresponding matrix code. Transformation performance should benefit from this. Added environmental mapped bump mapping using a sub-optimal bumpmap :-)
  Version 0.28
    improved transformation performance a little bit. Removed some hardcoded texture limits (256x256) from most parts. Some parts still assume 256x256 to be the size of a texture. These parts can be changed, if i figure out how to detect the size of a texture before loading it. Added possibility to resize the application's window while jPCT is running.
  Version 0.27
    Added possibility to compile jPCT as an application. Therefor, only another main-class has to be used: jPCT.java instead of Basics.java. Some methods are modified to behave different when called from an applet or an application. Increased texturemapping accuracy by a factor of 128.
  Version 0.26
    Added beta wireframe-mode (w, applet only) without any further optimizations. Removed call of draw_visible_polygon() and calling the draw_shaded... and draw_wire...methods directly. Cleaned up the sources by removing some unused vars.
  Version 0.25
    Improved the mapper-performance by moving some float-to-int-conversions out of the outer loop. This way, the mapper uses the interpolated int values over the whole span, which is (in theorie) less accurate but the difference is to little to be important.
  Version 0.24
    Added a simple kind of motion blur. This feature kann be activated by pressing 'm'.
  Version 0.23
    increased accuracy of the normal-calculations from float to double. Defined own colormodel to use instead of the default one. This 'skips' the processing of the useless alpha-channel of the default model and results in faster screen updates. Additionally, it removes the need for 0xff000000 in the mappers innerloop, so it should speed up this part too (but just a little bit).
  Version 0.22
    Improved polygon-thruput to handle objects with higher polygon count better.
  Version 0.21
    Added support for changing the engines parameters from outside (Javascript) via Liveconnect. Added possibility to enable/disable FSAA (achieved by simple oversampling) on the fly. This increases memory consumption because of the two different buffers but it's nice anyway. Added support for a Low-Res-mode with half the selected resolution. The resulting image will be zoomed to fit the screenbuffer. Tried to change framebuffer-management to use less memory, but this resulted in some 'performance-leakage'. Very strange...i removed this modification.
  Version 0.20
    Added a loader for 3DS-ASC format. Improved polygon-setup performance in the scanline drawing method. Reduced memory usage of the object class significantly.
  Version 0.19
    Added support for (moving and rotating) lightsources. Changed Gouraud-Shading from simple distance-shading to lightsource-based. Added two lightsources (a static bright blue one and a moving yellow one).
  Version 0.18
    Improved T&L-Performance a little bit. Changed env-mapping parameters a little. Added support for wrapping textures around objects (kind of static env-mapping).
  Version 0.17
    Improved texture loading to take place while rendering. This decreases startup time as it allows the renderer to work without every needed texture loaded.
  Version 0.16
    Improved Env-Mapping, added support for more textures and objects (press t+o).
  Version 0.15
    Added Environment-Mapping/Faked-Phong-Shading. Improved object processing performance. Changed one of the demo-objects to make use of the env-mapping.
  Version 0.14
    Reduced memory-usage and the size of the mapper.class a little bit. Changed (and hopefully improved) filtering to avoid "overfiltering" and some of the filtering artifacts.
  Version 0.13
    Added a (DOS-)PCT-like texel-filtering. Even if the colordepth would permit a real bilinear filtering, this approach is much faster and looks not too bad. Decreased color-intensity for the shading.
  Version 0.12
    Added support for a 6DOF movement using the cursor-keys and the num-block. The object's turning can now be toogled by clicking into the applet.
  Version 0.11
    Added a 2D bounding box clipping for the framebuffer. This helps to update only parts of the offscreen image, which improves performance.
  Version 0.10
    Increased shading performance. This optimization helps most on Netscapes's JIT to bring it's performance close to IE's.
  Version 0.09
    Fixed a bug in the W-Buffer code that reduced accuracy. Tested some alternative methods for clearing the buffers, but they all weren't faster than the one i previously used. Implemented a workaround for a bug in either JAVAC/JIKES or MS JVM (i haven't tested it further), that caused an ArrayIndex...exception where none was present. Made some performance improvements in the rendering code.
  Version 0.08
    Added support for a W-Buffer (a floatingpoint Z-Buffer using the reciprocal of Z) with 32Bit accuracy. Due to the fact that jPCT's performance is not very memory-bandwidth limited, the performance hit is quite small.
  Version 0.07
    Added support for (perspective corrected!) Gouraud-Shading. There is still no lightsource present, so the shading is static (just for testing...).
  Version 0.06
    Added the possibility to configure most of the engines aspects with the param-tag in the calling html-page. Added support for 2x2 oversampling. This decreases performance significantly, but improves image quality.
  Version 0.05
    Implemented 3D-Clipping. Replaced the RAW-texture-loader with a JPG-Loader. This decreases startup time because of much smaller texture files. Added support for different texture sizes (2^x). jPCT now uses a 256*256 texture by default.
  Version 0.04
    Changed (lower level) rendering from object-oriented to visibility-list oriented.
  Version 0.03
    Improved clipping code and enhanced the texture class to handle a different texture per polygon. Optimized the mapper class regarding both, speed and accuracy.
  Version 0.02
    Replaced the texturemapper with a more sophisticated one that uses scanline-subdivision to gain speed. Added a basic texture class. Implemented a simple kind of edge-clipping.
  Version 0.01
    First version implementing the basic object model and a totally unoptimized version of a perspective texturemapper.



imprint