Not logged in, Join Here! or Log In Below:  
News Articles Search    

Submitted by Helge Foerster, posted on January 09, 2001

Image Description, by Helge Foerster

this is a screenshot taken from my current project JPCT, a 3d engine for Java. It requires Java 1.1 or higher and makes no use of the Java3D Api. Everything is done using software rendering. An online (applet) version of the engine (limited features because of loading time) can be found at The more advanced application/offline version can be downloaded from there. The image was taken from the application version.

JPCT features:
  • perspective correct texture-mapping with 16 pixel scanline-subdivision
  • environment-mapping
  • environmental mapped bump mapping
  • sub-pixel and sub-texel accuracy
  • 24 bit RGB perspective correct Gouraud-shading
  • 24 bit textures and framebuffer
  • 32 bit W-Buffer
  • texel-filtering (faked bilinear filtering)
  • any texture-size supported (256*256 used in the demo)
  • FSAA using 2x2 oversampling
  • portal rendering
  • collision detection
  • Best regards,

    Helge Foerster

    Image of the Day Gallery


    Message Center / Reader Comments: ( To Participate in the Discussion, Join the Community )
    Archive Notice: This thread is old and no longer active. It is here for reference purposes. This thread was created on an older version of the flipcode forums, before the site closed in 2005. Please keep that in mind as you view this thread, as many of the topics and opinions may be outdated.

    January 09, 2001, 02:15 PM

    Really cool! Another software engine! :-)
    I'll take a look at the applet, and I'll give you my impressions. The screen shot looks pretty good!


    January 09, 2001, 02:25 PM

    Cool! The offline version works here, about 5 fps on my bi-P3 450MHz under win2k. Pretty good engine, reminds me that I need to implement zclipping in my relativly new software engine.

    What technique are you using for the bump mapping? Do you compute the u and v offsets from the bump map to index that in the envmap and then add it to the base texture (this is what I do)?

    Continue the good work, and I hope thet MC BAXTON will have something positive to say about that. :-)

    Jean-Francois Dube


    January 09, 2001, 02:51 PM

    Hi Helge!

    I've just tested the offline version of your engine. Looks pretty good (especially with the FSAA enabled, although that can be very slow). I got around 16 to 26 FPS flying around the scene and 6 FPS with FSAA. Obviously your engine is fill-rate limited (its in software ... and in JAVA).

    I also liked the 'int' and 'float' performance comparison against a P3. My Athlon (800 MHz) has the floating point performance of a 910 MHz P3 .... that really made me smile :) Oh ok, so int performance was in the 700s ... but it was still rather nice.

    I also liked the bump-mapping you have in there.

    Anyways, a fine piece of work,



    January 09, 2001, 03:02 PM

    Your screenshot looks really interesting.It slightly looks like my worst nightmare, but it's really colorful :) I wonder what is that strange red beast, or maybe it's just piece of raw meat ? However, this picture definitely attracts attention.


    January 09, 2001, 03:10 PM

    i had a look at the applet and it looks cool while not looking like every other 3d engine in the world (i guess that's because it doesn't use a 3d card)

    well done


    January 09, 2001, 04:03 PM

    After running your engine I've noticed that this is dino, eating mushrooms...


    January 09, 2001, 04:10 PM

    Why don't you use Java3D? Is it because you want to use your engine in applets or because of the complexity of Java3D or maybe because you want to learn how the stuff internally works?
    Did you optimize your Java code (final methods for instance or C-style variable use)?

    The shot does really look good but I guess for some time at least, Java (without Java3D) won't be fast enough for this purpose.


    Mads Andersen

    January 09, 2001, 04:12 PM

    Your engine looks really interesting. I read the feature list on your web site, and that it has "32 bit high accuracy W-Buffer featuring OptiZ". What is OptiZ?

    I'm also interested in hearing about "texel-filtering (faked bilinear filtering)".

    Cool job.


    January 09, 2001, 04:29 PM

    Mads Andersen: for the filtering, just take a look at this


    January 09, 2001, 05:03 PM

    I grabbed the download and got avg of 17fps on this cruddy little P400 with 64meg (work machine). I like the 6-Degrees of freedom in the engine. Nice work!


    Scrambled Monkey

    January 09, 2001, 05:12 PM

    Cool. Very wierd looking screen shot :) The online version runs pretty good, about 40fps, 35fps with bump mapping on, though it drops to about 12fps with fsaa (looks nice though!). The offline version runs at about 22-32fps in the default window size with bumb mapping on, but it slows to a crawl ( 5-8fps ) maximized at 1024x768. I have a 866mhz PIII. At times it looks almost like a painting, the texture filtering I guess? Really cool looking.


    January 09, 2001, 06:14 PM

    I'm very impressed, with the applet I get around 10FPS on my crusty old P200 (without FSAA), and even with bump mapping it barely drops.

    James Matthews

    January 09, 2001, 06:23 PM

    Hey, that's really nice. I got 12FPS with bump mapping and FSAA on the online version (32FPS with both off), that HalfLife box looks cool...well, so does the kettle.

    It'd be cool to see the HalfLife box reflected in the kettle :)

    I downloaded your offline version, and ran a benchmark. I got a rather disappointing result:

    Frames per second: 14.855263

    With these benchmark results:
    P-III(E) - 910 Mhz - Win2K - MS-JVM 1.1 - Voodoo5-5500 - AGP : 21.14 fps

    And my computer:

    P-III - 933 Mhz - Win98 - No idea - GeForce2 GTS - AGP

    That seems a tad What do you think is the cause of that?



    January 09, 2001, 06:32 PM

    This is awesome!



    January 09, 2001, 07:31 PM

    I think what you mentioned as your benchmark is actually a reference. The actual benchmark result is displayed before that.



    January 09, 2001, 07:42 PM

    Thanx for the response so far!

    hdmx : I'm not using Java3d because i want to do software rendering. I'm having fun with it and as an important bonus, it runs with Java1.1 too. Of course, i tried to optimize the engine for Java, but without using native stuff. I'm trying to leave it 100% pure Java.

    Mads : OptiZ is a kind of marketing term :-) It's nothing mind-blowing at all. In some cases, the engine is able to determine if a span is 100% visible and it skips the ZBuffer read in these cases. This speeds up the mapping slightly (albeit it introduces some rare artifacts...oh, did i say that...:-)) I'm using the term OptiZ because it sounds more important (like HyperZ, you know...)

    deks : Thanx for the tip with the offsets. I'll give it a try.

    James : 14.855263 fps is really slow for a PIII-933. Which file did you use to start the engine (run_jview.bat or run_java2.bat)? If you used the second one, you may try it with jview instead. It usually is the faster solution of the two. Java1.3 with hotspot comes close to it, but can't surpass it. Older JVM's may be slower...


    January 09, 2001, 08:03 PM

    Very impressive!

    I have my own 3D java engine that has been my hobby for about 3 years now. I would love to share some ideas with you if you are interested. Let me know if any of the following features I have implemented could help you: very realistic terrain (procedural texturing and lighting according to steepness/height), bsp trees, lightmaps with support for stained glass, skeleton based animation, bilinear filtering, partical system for explosions, sprays, etc, 3D painting, 3D rigid-body physics support, Z-buffered/Sorted modes, and more.

    I'd be interested in discussing optimization techniques specific to java rendering and your rasterization routines/fsaa.

    Here is some benchmarking for your engine on my P4 1.5 gz/geforce ultra/256 RDRAM at 640x480 resolution:
    fps without fsaa: 17
    fps with fsaa: 7

    Here is similer benchmarking from a recent test of my terrain engine (6000 on screen polys, 3/5 screen filled with about 1/4 screen overdraw, perspective corrected texture mapping):
    fps without bilinear filtering - 26/32
    fps with bilinear filtering - 15

    I think the faster frame rate on my engine is due to less screen fill and pregenerated lighting, thus I suspect our engines run at about the same speeds.

    Again, excellent work, and I hope to hear from you,
    Kris (


    January 09, 2001, 08:54 PM

    I like the fact that the engine is software and runs well. And, it's in Java. Why did you pick Java? Do you know it better? Or because it is cross-platform? i'm just wondering :-) I wanted to do a Java engine myself...

    I like the scene. It is not the same old scene you see usually. It's original ;-)



    January 09, 2001, 10:13 PM

    I was wondering if your engine supported cubic environment mapping. If so, how can you calculate texture coordinates and triangle splitting lines. I suppose i'm going to have people tell me just to use hardware for this, but not everyone has a happy-go-hardcore gforce under the hood.

    Pictures and uploaded applet are of astounding quality (i wasn't sure if it was hardware or software until i read the descritpion more carefully)


    January 09, 2001, 10:17 PM

    MY GOD... a constructive post... the end of an era has come...


    January 09, 2001, 11:04 PM

    Very cool. We've been talking at work about creating a 3D java applet for our own applications. I'm curious as to why you didn't use the Java 3D extentions. Wouldn't it be faster because it can use more native CPU code?

    I'm not exactly sure what's going on in your picture there but it is pretty.


    January 10, 2001, 05:36 AM


    what do you feed your engine regarding meshdata/meshformat?


    January 10, 2001, 06:25 AM

    EGreg : I'm using Java because i like it and i think that a software renderer for Java (even if it is slower than native code) makes more sense nowadays than for a C/Windows combination or similar. Cross plattform is also cool, but suffers from the fact that JITs are not so widely available in the non-Windows world.

    Kezza : No, JPCT doesn't support cubic environment mapping.

    Vortex : Java3D may be faster, but would be less fun (at least for me). And it requires Java2, which is not available in current browsers (except Netscape6) without using the Java2 plugin (which not everybody has installed).

    Cybok : Nothing fancy. Just plain 3DS ASC format, JAW (from an older engine i found on the web some time ago and i still own some objects for it) and the format of my prior DOS-based engine.

    This thread contains 23 messages.
    Hosting by Solid Eight Studios, maker of PhotoTangler Collage Maker.