view3dscene 3.1, engine 1.5 release: Scripting, VRML browser components, and more

October 15, 2008view3dscene 3.1.0 release, along with underlying Kambi VRML game engine 1.5.0 release. Most notable improvements are:
Simple game implemented in pure X3D with KambiScript
Particle engine programmed in pure X3D with KambiScript
Texture editor (pure X3D with KambiScript)
  • Scripting in KambiScript language. KambiScript is a simple scripting language, invented specially for our engine. It's powerful enough for many tasks, you can process all VRML data types with it (including vectors, matrices, arrays, images).

    Screenshots on the right show example uses of KambiScript. Endless possibilities are available now for VRML authors, you can write complete interactive 3D games and run them with view3dscene (or any other VRML browser using our engine). Kambi VRML test suite 2.3.0 contains source VRML files with KambiScript tests (see kambi_script/ in there, like kambi_script_ball_game.x3dv or kambi_script_particles.x3dv), you can simply open them in view3dscene.

  • Animating camera by animating Viewpoint position (or it's transformation) works.

  • Various navigation improvements for scripted worlds: NavigationInfo.type = "NONE" and NavigationInfo.speed = 0 cases are supported. They are useful when you implement whole navigation yourself, by KeySensor and scripting.

    Also view3dscene key shortcuts changed, to allow easily avoiding collisions with keys that you handle through KeySensor and scripting. All menu shortcuts are now with Ctrl modifier (for example, previously you switched collision detection with C, now you have to press Ctrl+C).

  • For programmers using our engine, we have VRML browser components. Two flavors: TGLWindowVRMLBrowser (a descendant of our TGLWindow) and, for Lazarus LCL, TKamVRMLBrowser (a descendant of TOpenGLControl). Using them is trivial, just drop TKamVRMLBrowser on the form and call it's Load method — whole rendering and navigation will automatically work. Other Lazarus packages fixes were made, to make them more easily usable. Thanks to De-Panther for pushing me to implement this :)

  • Script protocol "compiled:" is implemented, to easily link VRML scripts with compiled-in (written in ObjectPascal) handlers.

  • Other improvements: using quaternions for EXAMINE navigation, simple nodes Circle2D, TextureTransformMatrix3D, TextureTransform3D, MultiTextureTransform.

Plans for the next release: first of all octree updating problems will be solved. Right now they are a weak point of our engine — animating geometry by VRML events is unnecessarily time-consuming when collision detection has to be up-to-date. Also more rendering optimizations for animating by VRML events will be done (optimize case when you often change Switch choice, automatically detect when roSeparateShapeStates / ...NoTransform / roNone is suitable).