GeeXLab: Laboratory for Real Time 3D Learning and Experiments



GeeXLab



GeeXLab is my new piece of code and now it’s available to play with. GeeXLab is a heavily modified version of my previous demotool Demoniak3D. Those who already know Demoniak3D will start to code with GeeXLab in a couple of seconds and for the others, it will take a couple of … minutes.

But why a new name? Is it a new soft? Yes. We can consider GeeXLab as a new soft because there are so many modifications that old Demoniak3D scripts (mainly Lua scripts) are no longer compatible with GeeXLab new API. And GeeXLab scripts can’t be loaded by Demoniak3D. That’s why a new name for the tool was a better solution. What’s more, GeeXLab will be mostly used (I speak for myself) for Geeks3D.com tutorials and tests, so a new name in close relation with Geesk3D was a good idea.



GeeXLab (Python + Lua):

[ DOWNLOAD ]
Left-click to download (right-click disabled)

This version of GeeXLab requires the latest Python 32-bit installer.



GeeXLab (Lua only):

[ DOWNLOAD ]
Left-click to download (right-click disabled)


To be fully operational, GeeXLab needs Python (32-bit) and the latest WHQL PhysX System Software.

Several code samples are available HERE. Just unzip the archives, and drop the xml file in GeeXLab (or load the xml file with the menu: File – Load XML Scene File).

Developer’s guide is available HERE.

Now, let’s have a closer look at GeeXLab.

GeeXLab is a Windows 32-bit (XP/Vista – not yet tested under Seven) standalone application. There are two versions: one free and the other commercial. The free version has few limitations compared to the commercial one but they are not a real problem (unless you plan to make million dollars with your GeeXLab code!). I will use GeeXlab for Geeks3D articles so trust me, limitations of the free version won’t disturb you. More details about the limitations of the free version can be found here.

To start coding with GeeXLab, you need a source code editor. A good choice is Notepad++. This editor is free and supports all languages used in GeeXLab.

GeeXLab can be seen as a real time 3D scene browser (like Firefox for html scripts). You code your 3D scene in one or several source code files, you load the main scene file in GeeXLab and GeeXLab displays the scene. That’s all.

Sounds simple? Yes it’s simple to code real time 3D scene with GeeXLab. GeeXLab is especially adapted for newbies in graphics programming. But now if you’re a hardcore graphics programmer guru, I think you should give a look at GeeXLab programming capabilities: there’s a chance you gonna love it ;)

GeeXLab is able to fit the user programming skills. You can code your 3D scene or demo with several languages: XML, Lua, Python and GLSL. For a newbie, the XML description is well suitable. The following piece of code shows how to load a textured 3DS model:

<geexlab>
  <scene name="myScene" />

  <camera name="Main_Camera" navigation_mode="FLY" >
    <position x="0.0" y="50.0" z="130.0" />
  </camera>

  <model name="myModel" filename="baked_sphere.3ds" />
</geexlab>

I think any 3D artist is able to understand and modify this code.

The result of this code looks like:

GeeXLab - Backed Spheres demo

You can now fly through the scene and examine the spheres from another point of view:

GeeXLab - Backed Spheres demo

Now, for a programmer or a technical 3D artist with programming skills, GeeXLab offers more powerful tools like scripting or real time shading language.

Currently, GeeXLab supports two scripting languages: Lua and Python. And the nice thing is you can use both languages at the time in a demo. Both languages are not mutually exclusive. For example, you can code a demo where you use Python to manage transactions with internet and Lua to deform a mesh.

Lua - Scripting language

Python - Scripting language

Python is one of the great features of GeeXLab, and one of the multiple advantages of Python is the countless number of libraries (or packages) available for almost every task:

Lua and Python programs interacts with GeeXlab via the Host-API. The Host-API is the set of libraries and functions that defines the interface between scripting language and GeeXLab core. The Host-API is the same for Lua and Python. So you can easily convert a Lua script to Python (I talk only for functions of the Host-API…).

Here is a code snippet that is valid for Lua and Python:

meshId = HYP_Mesh.CreatePlane()
HYP_Object.SetMaterial(meshId, matId)
HYP_Object.SetPosition(meshId, posX, posY, posZ)

I will go back over Lua and Python scripting very shortly, so stay tuned ;)

In the side of real time shading language, GeeXLab only supports the GLSL, the OpenGL shading language. I will add later a support for Cg too.

OpenGL logo


Here is a code sinppet of a simple GLSL shader:

<shader_program name="SimpleShader" >
  <raw_data><![CDATA[	 
[Vertex_Shader]
void main()
{	
  gl_Position = ftransform();		
}
[Pixel_Shader]
void main (void)
{
  vec4 color = vec4(0.8, 0.2, 0.2, 1.0);
  gl_FragColor = color;			
}
  ]]></raw_data>
</shader_program>

In the next days and weeks, I will use GeeXLab as my main platform for writing tutorials, demos and testing new features of graphics cards. So if some functionalities are missing to complete my articles, of course I will add them. So don’t panic if you don’t find now such or such function, chances are good to see it quickly.

GeeXLab supports the programming of post processing effects. Post processing effects or PostFX filters allow you to add a custom image processing to scene final image. Here are two examples: bloom and depth of field.

GeeXLab - Bloom post processing
PostFX: bloom

GeeXLab - Depth of Field or DoF
PostFX: Depth of Field or DoF

Among the other features, we can find the support of NVIDIA PhysX engine. So expect to see shortly some demos using this physics engine.

GeeXLab - NVIDIA PhysX
PhysX: simple cube drop

GeeXLab - NVIDIA PhysX
PhysX: many cubes…

GeeXLab can be seen as a game engine in the sense it has many built-in functionalities. GeeXLab is not locked to a specific demo or game. Depending of your programming skills, your idea or your mood, you can code a GLSL test demo, a graphics benchmark, a demoscene like prod, an Internet tool (RSS reader for example), a video game, a virtual visit…

GeeXLab - RSS Reader
RSS Reader – Powered by Python ;)

Here are the main features of GeeXLab:

  • 3D rendering based on OpenGL
  • Media loading: models (.*3ds, *.obj, *.dae, …), textures (*.jpg, *.bmp, *.tga, …), audio file (*.mp3, *.wav, *.xm, …).
  • Sound system (via FMOD or OpenAL)
  • Scripting languages (Lua, Python)
  • Post processing effects
  • Physics with NVIDIA PhysX

GeeXLab is a kind of laboratory for graphics programming (and more…). Then each time I can, I’ll add new features or new libraries (for example, OpenCTM is on my GeeXLab todolist).

Here is a small overview of the next cool features that will be added:
- HDR cubemaps
- PhysX fluid and clothes
- OpenCTM
- AngelScript
- Hardware geometry instancing
- OpenGL 3.x renderpath
- etc…

For all questions, bug report, features requets, work in progress, anything that is related to GeeXLab, you can post a message in GeeXLab forum.

And thanks to SPRINGER and Satyr for their countless tests and feedbacks. Thanks guys!

To end up this presentation, here is a demo made by SPRINGER, one of the first GeeXors (what? GeeXor? yes a GeeXor is GeeXLab coder…):



Enjoy!




Geeks3D.com

↑ Grab this Headline Animator