Java 3D Engine

 Env3D is an innovative 3D engine written in Java. With Env3D, it is fun and easy to create 3D video games while learning Java Programming.

New Method for Uploading Applets!

Projects that are created using the newest version of the Env3d_Template project, which can be downloaded here, will have a new option under applet creation that will generate the necessary files and upload them directly to the server.

Using this method will only upload the files that are unique to your applet and there for durastically decrease the time it takes compared to uploading the entire directory.

A little history of Env3D

One of my students asked me recently about the history of Env3D. I thought I'd share it here:

It was 2002, I wanted to learn opengl and see if there was any way Java can use hardware acceleration. During my research, I came across 2 opengl wrapper libraries: LWJGL and JOGL. LWJGL is a community driven project while JOGL is supported by Sun (the company behind Java).

While the logical decision was to go with JOGL, I decided to use LWJGL instead as it has a much more active and vibrant community (just visit to see for yourself). The result was a simple 3D engine which I used to create a few simple demos, but nothing that students can actually use.

Site redesign and new version

I have completely redesigned the env3d website. Besides looking way better, I have also included complete lessons on how to use env3d in CS1. You can find them under the "Learn" section of the website.

A new version of env3d is also available. A couple of major changes:

* No need to "install" the extension anymore. Simply download and open the blank project, and follow the lessons to add your own code.

* You can now create 3D-accelerated applets for online distribution.

If you like env3d or have questions or comments, feel free to drop me a line.

I'm back!

After working in industry for over a year, I am now back teaching. In my absence, some of my colleagues have used env3d in their courses with positive results. I'm glad and will continue to develop and support the software.

The code repository is now subversion and I have cleaned up the code a bit. The latest version will work on both mac and windows and the bluej extension will work with BlueJ version 2.5.2. In this new version, you no longer have to install the env3d extension for BlueJ, the extension will work on a per project basis.

The OSX 64bit conversion is a bit of a mess to deal with. It seems that BlueJ 2.5.2 on the Mac will default to use 64bit Java 1.6 and will not honor the Java Preferences setting.

Wrapping up for the year

Well, I have just finished using env3d in my first year class. Feedbacks from students are very positive. I have also learned a lot about designing a good API and have been making changes to env3d through each assignment. Lots of work but I think the results are worth it. Here are some students videos on youtube.

New features and some lessons learned

The latest version of env3d (still in cvs, not released yet) will have the following new features:

  • Transparent sprite support
  • Setting of camera angles
  • All resources can be loaded from a jar file.

Since all resources are now loaded from a jar file, you can distribute your application very easily. If you are using BlueJ, you can simply export the project to a jar file. Make sure that the lwjgl native library (lwjgl.dll in windows) is in the same directory as your jar. You can now execute the jar file directly.

This also means any application written using env3d can be setup to use java webstart technology. This will be a big plus for students who want to show off their projects! In the future, I may even incorporate applet support.

Introducing env3d

I created env3d to help with my introductory Java course. The internal 3d engine was written a couple of years ago to help me learn OpenGL. Since then, I have been trying to find a way to apply some real-time 3d graphics into my teaching.

What I am planning to do is to cover the first 7 chapters of the bluej textbook using env3d as a tool for in-class demonstration and projects. That's why you'll find that I have used java reflection instead of interface for all 3d objects definitions in my examples.