BS Contact VRML/X3D 6.2


BS Contact VRML/X3D

Version 6.2



This document provides information about the new features and improvements in the 6.X release of BS Contact VRML/X3D.

New Features of Release 6.2

DirectX 9 Support

A new high speed DirectX 9 Render has been integrated. Microsoft DirectX 9 is the latest API for PC 3D graphics hardware allowing to access advanced features. If not installed the DirectX 9.0c update can be installed from

In the ImageTexture node DDS 2D Textures, Cube map Textures and Volume Textures are supported. Also only in this renderer HDR (EXR PFM) High Dynamic Range image formats and TGA are supported.

The Occlusion culling functionality is implemented for the DirectX 9 Renderer if supported by hardware.

Composite Texture (Render to texture) is supported using RGB RGBA and other custom DirectX surface formats. Advanced formats like 16-Bit per pixel (A16B16G16R16F, G16R16F), and 32 Bit Floating point (R32F, A32B32G32R32F) are usable, if supported by the hardware. These formats are needed for hardware shadow mapping support and HDR (high dynamic range) lighting. To find out the supported formats for a given board/driver combo the DXCapsViewer.exe from the Direct X SDK can be used.

Also Particle Systems and Font Texture are implemented.

Unimplemented features currently: Transparent HTML rendering, render to video.

DirectX 9 removes the restriction of the maximum render area size of 2048*2048 pixels, this is important in order to support dual or triple head monitor/projector display setup.

DDS cube map environment mapping: cubemap_teapot

DDS volume map rendering: volume_texture


Programmable Shader support (DirectX 9 Renderer only)

Contact implements extension nodes for accessing programmable shaders running on the graphics cards. HLSL Shading language Vertex and Fragment (Pixel) Shaders as well as the DirectX FX Effect file format are supported.

For more information see: Shader Support.

New Nodes: ShaderAppearance, VertexShader, FragmentShader

User Interface

New Menu Entries and Preference Settings:

Select Renderer

Switch 3D Render device through "Settings->Renderer" to DirectX 9, DirectX 7 or OpenGL. The renderer option can also be set using a PARAM on the object tag.

Screen shot generation

In the Tools menu screen shots can be saved to a BMP file with prompting for filename , the DirectX 9 Renderer supports different other image formats like JPG.

Direct3D 9 Device Settings

New preferences settings for DirectX 9 including Alpha, Stencil and Multi Sample (AntiAliasing) control.

The Quick Windows Resize (Default) for DirectX 7 can be turned off for incompatible DirectX 7 drivers.


New Field types

The new field type SFVec4f is supported for better mapping to shader parameters, where float4 is the most common type. COM SFVec4f interfaces and vrmlscript SFVec4f vrmlscript object, with the same methods as SFVec3f are implemented.

BS Contact Stereo

As an extra version Bs Contact Stereo supports hardware stereographic modes like quad buffered OpenGL Stereo, split viewports etc. The basic edition of Contact supports Red-Blue stereo. Stereo options can be set via keys and the F8 key dialog.


Extension to nodes

TextureCoordGen allows the generation of Tangent and Binormal Vector stored as 3D texture coordinates. This is needed for many per pixel lighting and bump mapping effects. Several 3D texture coordinate generation modes are added.

MultiTextureCoordinate allows to specify 3D TextureCoordinates per channel by using a Normal or Coordinate node instead of a TextureCoordinate node.

TextureMatrixTransform does now support full 4*4 perspective texture transformation on the DX Renderers and is allowed in the MultiTexture Node.

The vrmlscript VrmlMatrix object has been extended with a setView method:
setView(position, orientation) Sets the VrmlMatrix to a view Matrix looking from position with orientation. position is an SFVec3f object, orientation is a SFRotation object. The fields have the same meaning as in the VRML Viewpoint node. This function simplifies projective texture mapping.

There are new DrawGroup examples for using Clipping Planes and the Stencil buffer.

An SFBool global field has been added to PointLight and SpotLight to allow scoping of positional lights.

The ViewVolume node allows setting custom perspective and orthographic transforms (See SDK).

Projective Texture Mapping

Projective Texture mapping allows perspective projection of texture images on arbitrary geometry similar to a slide projector (or a video projector if using MovieTextures).

Example use of TextureMatrixTransform VrmlMatrix and setView to project a "light" texture on to geometry : teapot_projective
Using a cube map : teapot_projective_cubemap
Using a movie : teapot_projective_movie


Projective Light Map: a sub scene is rendered each frame to a black-white CompositeTexture3D from a spotlight's point of view. This light map is then used as a projective texture map together with a circular spotlight mask to project a shadow on a plane : ct_shadowmap
Using DirectX9 and a shader the result is better because of more flexible blending: ct_shadowmap_shader

In the scenes there is one viewpoint corresponding to the projector's view. The simulated light is display with a cone. The elimination of the ghost projection is not done.

DX9 only: Using floating point CompositeTexture (NVidia GeForce FX++ latest driver, ATI Radeon 9700++) real shadow maps can be computed ct_depthmap_shader.
The scene is rendered without shading from the light's point of view. Instead of color the depth value at each visible pixel is written to a R32F texture.
In the next step the scene is rendered with a custom pixel shader in an FX file. The pixel shader computes a light, but also tests the shadow map if the pixel of question is in shadow or not. This is the most general technique. See comments in the files for more hints and explanations.

Compared to the ShadowGroup technique these technique are better for arbitrary shadow receiving geometry.


X3D Event utilities nodes

These nodes gives authors the capability to gate, convert, or sequence numerous event-types for common interactive applications without the use of a Script node.

Nodes: BooleanFilter BooleanSequencer BooleanToggle BooleanTrigger IntegerSequencer IntegerTrigger TimeTrigger

See specification


X3D XML parser improvements

Some bugs are fixed, Strings are now stored UTF8 converted in the Contact scene graph. A scene is not validated on parse for parsing speed up, this can be set via registry options.

Other New Features

The "RENDERER" object param and setOption allows to pre-select a renderer.

A new Browser.setOption call has been added for speedup of scenes managing dynamic loading and unloading of content.

DrawOp, Browser.getCap() and Browser.getOption/setOption have been expanded

The embedded WebBrowser in the Object node now also accepts relative URLs.

The OpenGL Renderer now supports DDS L8 formats including 3D Volume Texture Maps.

Url string passed to the OCX can now be several MB long.

Strings in X3D XML parsing can now be several MB long.

The OpenGL renderer supports additional render modes like
Solid, Hiddenline (2 path using polygon offset), Silhouette, Boundingboxes

Fixes for Intel Integrated Graphics Adapters.

Discreet 3DS Max Exporter

An updated version supporting Max 6 is available in the SDK.
MultiTexture coordinates with several channels and channel remapping are now supported.
Higher output precision is supported for accuracy problems in Transforms.


Features introduced in 6.1X

Encrypted Content

VRML content files can be encrypted via different encryption/authorization schemes. This allows Content creators to protect their content from simple copy and paste re-use. Content developers acquiring a BS Contact VRML Content license are getting an encryption tool. The encryption tool supports different encodings (DES,3DES, RC2, RC4 etc.) and authorization modes. The encrypted files together with the content license file are then placed on a Web-Server or CD-ROM. For more information please contact


Basic X3D XML Support and Internet Explorer XML integration

Contact 6.1 supports the X3D XML Encoding of VRML scenes. With Internet Explorer MSXML DOM Trees or strings with VRML or XML Encoding can be directly passed from HTML via Active X to Contact. This allows custom client side XML Processing.

More X3D information and examples in the SDK


Large Scene optimization

The range of large scene support tools have been completed with the support for OctTree and QuadTree Nodes. The higher level TreeGroup Node supports creating of OctTree, QuadTree and BspTree hierarchies on the fly. The Nodes can be mixed. Such scene sorting helps the overall performance. In the OpenGL Driver for certain graphics cards additional support for hardware assisted Occlusion Culling can be enabled. Occlusion Culling can cull scene grouping nodes or geometry nodes, if they are hidden by other geometry.

More information in the SDK

Automatic-CAB Installer

An automatic CAB installer with Verisign certificate for Microsoft Internet Explorer is available.

Example of an object tag with CAB-Installer:

classid=clsid:4B6E3013-6E45-11D0-9309-0020AFE05CC8 width="100%" height="100%"
type=application/x-oleobject standby="Loading BS Contact VRML Viewer">
<PARAM NAME="SRC" VALUE="../layer/bar2_43_layer3d_bg.wrl">
<EMBED TYPE="application/x-cc3d"

The latest CAB file is available as



The installer supports installation of the Contact Netscape 4.x plugin to Mozilla and Opera, but without Java EAI support.



Important changes

The 6.1 release also addresses url loading problems introduced by the Microsoft Internet Explorer Security update.



Native H-Anim 2001 node support

H-Anim 2001 nodes are supported as native nodes, including optimized vertex deformation code.
The 3DS MAX-Exporter available in the Bitmanagement SDK has been extended as well. The following examples have been exported from Discreet 3D Studio Max :

Dr. X Dr. X From Max Tutorial
ex Avatar Studio Model
Same with kick

H-Anim 2001 example boxman from James Smith,
boxman_contact_native Vertex Deformation done by Contact
boxman_contact Vertex Deformation done in a Script with optimized vrmlscript native function
boxman Original boxman, vertex deformation done completely in vrmlscript

Native H-Anim nodes are asy to use, simple change the EXTERNPROTO definitions, or add the urn "" for Contact as first url.

The H-Anim nodes are also available with the HAnim prefix in the X3D XML encoding: NancyDiving from NPS Kelp Forest.




Text Rendering via Textures

A new variant of Text rendering is introduced by using on the fly generated Textures.
This can greatly improve the readability and performance of text display.

Compared to the Contact 5 Texture Text technique, the Textures are generated internally on the fly and the font is proportional spaced and antialiased.


Texture Text can be made a global default in the Settings-Performance dialog.


Game like navigation style

You can now control your avatar the same way as in many games:
Use the mouse to look around and the A, S, D and W keys to move around.

More on GAME mode


Joystick Device driver

An joystick device driver supporting all Direct Input 8 capable devices is shipped with the installer.
Connect an input device (Gamepad, Joystick etc.) and try this test example.



Improvements in DirectX 7 renderer

Environment mapped Bump Mapping

Bump Mapping has been added to the MultiTexture frame work.

This feature again improves the quality of available rendering effects.

Bump Mapping documentation (SDK)

Example: interactive bump test (DirectX 7+, Nvidia Geforce 3+ / ATI Radeon 9700 / Matrox G400 + required )

Example: cyberhood_bump.wrl

DrawOp and Browser.getOption/setOption have been expanded.

CompositeTexture3D supports the parameter field, RGBA texture formats are possible. The repeatS repeat T fields have been added.

Radial fog support. (See Fog-Lab)



Improvements in OpenGL renderer

Bump-Mapping mode BUMPENVMAP and texture format DUDV is available on some ATI cards.

Basic support for CompositeTexture3D is available, including support for RGB,RGBA type textures. However in the current implementation the lights of the main scene are disabled. It works best on NVIDIA, with some ATI Drivers versions there are stability issues.

Anisotropic Mip-Map Texture Filtering provides better, crisper filtering for mip-mapped textures. In-depth article about Anisotropic Filtering.

Compressed Textures

If this option is checked in the preferences static textures (ImageTextures) are compressed by the OpenGL Driver. This requires an OpenGL extensions. CompressedTexture could allow to fit more textures onto the graphics board, for complex textured models.

MovieTexture rendering speed is optimized for the case repeats FALSE repeatT FALSE.

Additions to Hardware supported TextureGen modes:
The modes CAMERASPACEREFLECTIONVECTORR, NORMAL are now supported. These modes are especially useful with OpenGL cube maps imported via DDS Textures.

MultiTexture Mode DOTPRODUCT3 is available.

Support for DDS Textures in the ImageTexture node including Cube-Maps, Volume Maps and DXT compressed formats. DDS Textures are basically a memory dump of DirectX Texture Surfaces, the benefit is that Texture MIP-Levels, Cube maps, Volume maps and non-color Pixel formats can be represented.

For the OpenGL Driver this requires some OpenGL ARB extensions


OpenGL only example: dds cubemap and teapot_DDS hardware reflection mapping using a true cube map (6 Textures in one DDS file) and CAMERAPSPACEREFLECTIONVECTORE Texture coordinate generation. 3D DDS Volume textures are supported with the ARB 3D Texture extension, the TextureMatrixTransform node and 3D texture coordinate generation modes can be used to create 3D or 4D Texture coordinates.

DirectX & OpenGL examples: basic DDS textures with different DXT compression modes.

DDS Textures can be created with the NVidia DDS Photoshop plugin. For more information see Texture Compression Tools
Discreet 3D Studio Max has support for DDS Texture as well.
DDS Textures can be inspected or created using the DXTex Tool from the Microsoft DirectX SDK. This is archived copy of DXTEX. The texconv tool can be used to batch convert images from/to DDS.

In 6.1 DDS textures are now applied flipped in vertically to the VRML texture coordinate model.

Per default the default fullscreen size is now the desktop size.

PixelTexture CompositeTexture3D and ImageTexture have been expanded with the parameter field. Custom native Texture Format options are supported dependent on hardware support. (i.e. alpha textures, different 8 -16 - 24 -32 Bit formats, bump formats)

Radial fog support on Nvidia. (See Fog-Lab)

z-Buffer resolution setting.

Linepattern and LineWidth support

IndexedLineSet and IndexedLineSet2D are supporting the MPEG-4 Material2D and LineProperties node.

The OpenGL renderer implements line width, line patterns and line anti-aliasing.


IndexedLineSet with thick lines using Material2D and LineProperties node
IndexedLineSet with global lineWidth setting "options:lineAntialiasing=true,lineWidth=3"
IndexedLineSet with normal lines
IndexedLineSet with line pattern
Proto Example used from EMI - eminfo


Multi Monitor tips

Microsoft Windows does not yet support good 3D support for Windows spanning several monitors with the DirectX 7 interface. This has changed with Direct X 9 and multihead display cards.
With Nvidia multihead cards in the NView Display Driver Settings the Windows Desktop can be set to one large display, spanning 2 Monitors.
In OpenGL switching two fullscreen gives an display area covering both monitors. Similar with Matrox cards the desktop can be configured to span 2 or even 3 output monitors.
With DirectX 7 there is an internal limitation to a maximum of 2048 pixels display size in one direction, one solution for fullscreen display on two monitors/beamers is to use a Fullscreen mode setting with 2048 or less pixels resolution.

This 3D on two monitors/beamers feature is great for 3D presentations on trade shows, installations and the like.


Important changes

The Text node now decodes character codes in the string as UTF-8. The Editor program on Windows XP allows to save Text Files in the UTF-8 Encoding.
Some characters like äöüÄÖÜßé?are looking in UTF-8 äöüÄÖÜßéÃ?

This finally allows support for asian language, choose an appropriate True Type Font Name for font with an extended character range.
Example with 3D extruded text: textutf8

Example with Chinese text: text_utf8_chinese. This examples used a True Type font named "NSimSun" which might not installed on your system.

In the MulitTexture node the setting transparent true is required to force the Appearance node to be processed with alpha blending. With the complex set of multi-texturing options it is not possible to easily determine if a given setup results in an alpha output or not.

In Contact 6.1 for backward compatibility if the text string contains non valid UTF-8 sequences, the encoding of the text is treated as ANSI.

Layer nodes without a specified translation fields are transformed as specified in MPEG, use translation 0 0 for a Contact 5 compatibility.





Window less rendering allowing 2D Transparent HTML / FLASH composition with Contact 3D has been upgraded to newer Internet Explorer version. See information and demos here.


Screenshot function in the DirectX and OpenGL Renderer, use Shift-F11 to save the current screen as BMP file to the Contact cache directory. For best quality use a Desktop color settings with 32 Bit and enable Anti-Aliasing.

The Preferences flag "reload resources" forces Contact during the initialization phase to load local available resources (e.g. local files, cached files) to the maximum extent, even if the resource might not yet be used because its invisible.

The center of rotation in EXAMINE mode can now be controlled by setting the 4th, 5th and 6th element in the avatarSize field of the NavigationInfo node. These coordinates are interpreted in the coordinate system of the bound Viewpoint node.

When a .wrl file contains no Viewpoint and no NavigationInfo node (single object) then BS Contact defaults to the EXAMINE navigation mode.

For debugging purposes the console can be shown and hidden by VrmlScript with the function Browser.showConsole(bool). Call it with true as argument to show the console. Call it with false as argument to hide the console.

Radial Fog
The Fog2 node now supports an additonal field SFBool radial with the default FALSE, if TRUE radial fog based on radial distance around the viewer is enabled if supported by the hardware.

Embedded Webrowser as 2D overlay using the Object node
Example: object_webbrowser.wrl Click on WebBrowser to open/close an fixed Browser Window.

Sound System


The Sound2 node extends the Sound node to support the sound cone model of Microsoft Direct Sound, this finally allows a directed cone sound model and some more effects.

Example: sound2_test.wrl Turn on Speakers and rotate the model, so that the view position is inside the cone.

6.1 : Uncompressed Multi-channel WAV Audio files are supported. Example: 6channel.wrl , all channels are heard only with a 6.1 speaker set-up. There is no automatic 2 channel downmix, with stereo speaker setup only the front-left and front-right channels are audible.


MovieTexture in DirectShow mode now supports the speed field. Depending on the seeking capabilities of the media and the supported speed range playback speed can now be controlled.

Example: timetime2.wrl (Warning big movie trailer) Movie plays at a different rate.

MovieTexture has been tested with OGG Vorbis Direct Show Filters.
Example: test_ogg.wrl



Additions to Browser.setOption and the corresponding COM-EAI call.

Default scene options can be put into an WorldInfo node, several options can be separated by a comma.

Example: change the default tessellation for Spheres, Cylinder primitives from 16 to 32 :

WorldInfo { info "options:primitiveTessellation=32" } Example

Example: change the VRML time base to relative, time 0 ist as start of the scene :

WorldInfo { info "options:relativeTime=true" }


Additions to Browser.getCap


Additions to DrawOp modes


XML Playlist support (experimental)

Example: playlist_demo.wrl


ProceduralTexture node
Procedural texture computes Texture images on the fly based on Ken Perlin's noise function.
Example: proctexture.wrl



The left mouse button double click menu has been moved to the middle mouse button.


The plugin has been renamed to bsContactVRML.



New API calls are supported at the Contact Active X control level:

saveWorld2 - for exporting VRML with expansion of Proto Instances / Inlines

addVrmlFromString - for adding VRML (including PROTO definitions, ROUTE, DEF Names) to the current world namespace

load - for streaming and parsing VRML/X3D content directly from an in memory string or IDOMDocument or IStream interfaces.




Sphere Cylinder Cone are now always treated always solid (even if parts are removed)

EXTERNPROTO default value propagation was fixed.

Support for different JPEG color spaces.

DX7 mode switching and XP user switching was made more reliable.

Mipmapping generation for PixelTexture with DirectX7 Driver

vrmlscript SFNode a==b, !a operations have been fixed.

vrmlscript new SFXXX(SFString)


Compatibility with blaxxun Contact

bsContactVRML is fully upwards compatible with blaxxun Contact 5.1. For the ease of upgrading all COM Interfaces, CLASSID's and even the string returned by Browser.getName() are left the same. The location of registry keys has been changed.


Further Info

Contact 5 Release Notes

Node Extensions


Related links:

VRML 97 Specification

Vrmlscript Specification






Intel for sponsoring developments like the NURBS and trimmed NURBS Extension, specifically Michael Vollmer and Dean Macri for providing assistance for the Intel Pentium III ISSE code and NurbsSurface implementation.

Silicon Graphics, Inc - Chris Marrin and Jim Kent for the VRMLScript reference implementation.

The Independent JPEG Group's for providing libjpeg ?
„this software is based in part on the work of the Independent JPEG Group".

Jean-loup Gailly and Mark Adler for providing zlib. ZLIB Homepage

Guy Eric Schalnat and contributors for providing libpng. PNG Homepage

S. Gottschalk - The University of North Carolina for providing Rapid & V-COLLIDE

Laurent Gauthier - incremental

Universal Media