whitedune(1)
graphical vrml97 editor and animation tool
Description
whitedune
NAME
whitedune - graphical vrml97 editor and animation tool
SYNOPSIS
whitedune [ variantoptions ] [ stereoviewoptions ] [ inputdeviceoptions [ axisoptions ] [ miscoptions ] [ file.wrl file.x3dv file.xml ... ]
whitedune [ conversionoption ] filename
whitedune -illegal2vrml [ -prefix prefix ] protofile.wrl file.wrl ...
DESCRIPTION
whitedune
/ white_whitedune is a graphical editor for the Virtual
Reality Modeling Language (VRML97), ISO/IEC 14772-1:1997.
Additionally it has support for the NurbsSurface Node
described in VRML97 Amendment 1.
white_whitedune can also load and store VRML encoded X3DV
files
It can also load X3D files with XML encoding, if configured
to use a commandline vrml97/x3d translator.
A filename of - means standart input.
Dune has some basic support for stereographic view usually
with shutterglases in OpenGL "quadbuffer" mode.
When used with the conversionoptions or the
-illegal2vrml commandline argument, white_whitedune
is a non graphical commandline program.
The conversionoptions are used to convert the VRML/X3DV file
into sourcecode or a other 3D graphics format. This options
are used in the commandline, but some options require a
graphics context (e.g. in the simplest case a usage within a
xterm command), cause some of the conversion options
require the usage of OpenGL commands. To create a OpenGL
context, there are 3 different ways.
First open a temporay graphics window, do the conversion and
close the graphics window and exit. This is currently used
under M$Windows.
Second is to use Mesa off screen rendering (the program was
compiled with the --with-osmesa configure option). With Mesa
off screen rendering it is possible to use OpenGL commands
in a pure commandline program.
Third is to use glx based off screen rendering under
Linux/UNIX/MacOSX. In this case, no the program do not open
a graphics window, but requires a working X11 display
anyway. On a text console the Xvfb X11 server program
can be used to get a working X11 display.
The -illegal2vrml option is used to repair VRML97
files with illegal extensions.
See the illegal2vrml(1) manpage for more information.
VARIANTOPTIONS
-4kids
start whitedune with a simplified GUI as simple 3D modeller for kids.
|
-x3dv |
if no file is loaded, start whitedune with a new X3DV file. |
Per default, whitedune is started with a new VRML97 file.
-kambi
start whitedune with support for unportable extension nodes only usable with the kambi VRML gameengine.
-cover
start whitedune with support for unportable extension nodes only usable with the special immersive VRML97 viewer cover/covise.
-4catt
start whitedune with a simplified GUI as a exporter/converter for users of the CATT 8 sound simulation software.
|
-bw |
Use black and white icons instead of colored icons |
-german
Use german menu, dialogs and errormessages
-italian
Use italian menu and dialogs, errormessages are still in english language
-english
Use english menu, dialogs and errormessages. This is the default can be used to overwrite the setting of the LANG environment variable.
CONVERSIONOPTIONS
-vrml97
Convert file to VRML97 ISO/IEC 14772-1:1997, write it to standart output and exit.
-vrml97levelx3dv
Convert file to VRML97 ISO/IEC 14772-1:1997 compatible parts of X3D classic VRML encoding ISO/IEC ISO/IEC 19776-2:2005, write it to standart output and exit.
|
-x3d |
Convert file to XML encoded X3D, write it to standard output and exit. |
-kanim filenamepattern
Convert file to the kanim
fileformat and write it to standard output.
The kanim fileformat is a XML file with references to
different VRML files. The VRML files are generated too,
their name is generated based on filenamepattern: The
filenamepattern is shortend from the fileextension and then
extended with a underscore, a increasing number and the .wrl
extension.
All VRML files describe the same VRML scene with same the
nodes, but some numeric fields are animated.
This type of file is used by the open source VRML based
Kambi gameengine. It makes no sense to export a kanim file,
if the exported VRML file do not contain
timesensor/interpolator based animation.
-wonderland moduleDirectory
Convert file to a java source
file included in a directory structure needed to build a SUN
wonderland version 0.5 module and exit.
If the root directory of the module is build from the input
filename (without extension) as
moduleDirectory/exportX3dv/filename
If this directory and the other needed files do not exists,
this files are also created. If the other files exist, they
are not overwritten, only the target java source itself is
overwritten. The name of the target java source file is
moduleDirectory/exportX3dv/filename/src/classes/org/jdesktop/wonderland/modules/filename/client/jme/cellrenderer/filename.java
The first character of the target java source file is
uppercase.
To get a wonderland module from the
moduleDirectory/exportX3dv/filename directory,
chance into this directory and run the ant command. A
usual jar file of the wonderland module can then be found in
the moduleDirectory/exportX3dv/filename/dist
directory.
When compiling the output of the wonderland java source
export with the command ant, the java compiler may
get out of memory resources.
To fix the problem, you can set the memory limits by
extending the javac tag in the file
wonderland/build-tools/build-scripts/build-setup.xml e.g.
<javac ...
...
fork="true"
memoryinitialsize="256m"
memorymaximumsize="1024m"
>
Currently, the -wonderland option only support static
3D modeller output without animation or interaction.
These features are work in progress and are still to be
done.
This option uses OpenGL commands.
-x3d4wonderland
Convert file to XML encoded X3D
for import in SUN wonderland 0.4, write it to standard
output and exit.
SUN wonderland 0.4 only support IndexedFaceSets with
colorPerVertex and fullsize Color nodes. This exporter tries
to convert other nodes to this IndexedFaceSets, but can
(currently) not correctly convert nodes with colorPerVertex
false and fullsize Color nodes.
This option uses OpenGL commands.
|
-ac3d |
Convert file to the AC3D format (Version AC3Db), write it to standart output and exit. This option uses OpenGL commands. |
The AC3D file format is the
input/output file format of the 3D modeller ac3d.
The ac3d 3d modeller do not support several features of
VRML/X3D (e.g. the ac3d 3d modeller do not support animation
or interaction). Therefore the AC3D file format can not keep
the complete information of a VRML/X3D file in general.
-catt8geo outputdir_with_material_geo
Convert file to the catt geo
format (Version 8), write it to several .geo formats to the
directory outputdir_with_material_geo and exit.
The catt geo file format is the input geometry file format
of the catt acustic simulation program.
The master.geo file in this directory
outputdir_with_material_geo will hold include
commands for the other produced .geo files.
In the directory, a file material.geo with the needed ABS
commands must exist before conversion. The material names
for the ABS names are generated from the DEF names of the
VRML nodes.
If the material.geo file do not exist in the
outputdir_with_material_geo directory,
white_whitedune fails with a errormessage.
Despite the catt programm can export VRML97 files, it do not
support several features of VRML/X3D.
Therefore the catt geo file format can not keep the
information of a VRML/X3D file in general.
This option uses OpenGL commands.
-ldraw
Convert file to the major part
of the ldraw fileformat and write it to standard output.
The header of the ldraw file is not generated. The header is
a important part of a ldraw file and should have been
written to standard output earlier (typically this is done
from a batch script).
The ldraw fileformat is a ASCII fileformat which is used to
exchange 3D data between several open source plastic brick
description programs. A example for such a program is
LeoCAD.
-prefix prefix
The -prefix option in
conjunction with conversion is only used for the following
options to create source code. It can be used to define a
leading prefix for the name of the data structures in the
source code output.
For example, the source code creates data types named
"Node", "Scenegraph" and
"Callback". To avoid problems with other
libraries, adding options like for example
"-prefix X3d" would change the names to
"X3dNode", "X3dSceneGraph" and
"X3dCallback".
|
-c |
Converts file to a C header/source file, write it to standard output and exit. |
Currently, information about
routes are not exported.
See section C/C++/JAVA SOURCE EXPORT for more
information.
+c prefix
This option is very similar to
the -c option, but writes a incomplete source file,
which can be concatinated to a sourcefile written by the
-c option.
The names of the new defined datatypes in the sourcefile
start with the prefix argument.
|
-3c |
This option is similar to the -c option, but surfaces are first triangulated and then exported as TriangleSet nodes. |
This option uses OpenGL commands.
+3c prefix
This option is very similar to
the -3c option, but writes a incomplete source file,
which can be concatinated to a sourcefile written by the
-3c option.
The names of the new defined datatypes in the sourcefile
start with the prefix argument.
-meshc
This option is similar to the -c option, but surfaces are first converted to a polygon mesh and then exported as IndexedFaceSet nodes.
+meshc prefix
This option is very similar to
the -meshc option, but writes a incomplete source
file, which can be concatinated to a sourcefile written by
the -meshc option.
The names of the new defined datatypes in the sourcefile
start with the prefix argument.
|
-c++ |
Converts file to a C++ header/source file, write it to standard output and exit. |
Currently, information about
routes are not exported.
See section C/C++/JAVA SOURCE EXPORT for more
information.
+c++ prefix
This option is very similar to
the -c++ option, but writes a incomplete source file,
which can be concatinated to a sourcefile written by the
-c++ option.
The names of the new defined datatypes in the sourcefile
start with the prefix argument.
|
-3c++ |
This option is similar to the -c++ option, but surfaces are first triangulated and then exported as TriangleSet nodes. |
This option uses OpenGL commands.
+3c++ prefix
This option is very similar to
the -3c++ option, but writes a incomplete source
file, which can be concatinated to a sourcefile written by
the -3c++ option.
The names of the new defined datatypes in the sourcefile
start with the prefix argument.
-meshc++
This option is similar to the -c++ option, but surfaces are first converted to a polygon mesh and then exported as IndexedFaceSet nodes.
+meshc++ prefix
This option is very similar to
the -meshc++ option, but writes a incomplete source
file, which can be concatinated to a sourcefile written by
the -meshc++ option.
The names of the new defined datatypes in the sourcefile
start with the prefix argument.
|
-java |
Converts file to a java source file, write it to standard output and exit. |
Currently, information about
routes are not exported.
See section C/C++/JAVA SOURCE EXPORT for more
information.
+java prefix
This option is very similar to
the -java option, but writes a incomplete source
file, which can be concatinated to a sourcefile written by
the -java option.
The names of the new defined datatypes in the sourcefile
start with the prefix argument.
-3java
This option is similar to the
-java option, but surfaces are first triangulated and
then exported as TriangleSet nodes.
This option uses OpenGL commands.
+3java prefix
This option is very similar to
the -3java option, but writes a incomplete source
file, which can be concatinated to a sourcefile written by
the -3java option.
The names of the new defined datatypes in the sourcefile
start with the prefix argument.
-meshjava
This option is similar to the -java option, but surfaces are first converted to a polygon mesh and then exported as IndexedFaceSet nodes.
+meshjava prefix
This option is very similar to
the -meshjava option, but writes a incomplete source
file, which can be concatinated to a sourcefile written by
the -meshjava option.
The names of the new defined datatypes in the sourcefile
start with the prefix argument.
-manyclasses
Only valid after the
-java, -3java, -meshjava or
-wonderland options.
This option is a brute force attempt to fight against the
"too much constants" problem in java. It may be
impossible to compile the output of a normal java based
source code export, cause the current format of java class
files are limited to 64K so called "constants".
Not only real constants like 1, 2 or 3 are counted, but also
things like member variable definitions in classes etc.
With the -manyclasses option, all data is distributed
into many seperated classes.
The -manyclasses option should help, if you run into
the "too much constants" problem. In case of a
large number of DEF commands in the vrml/x3dv file, you can
still run into "too much constants" problem, cause
each DEF commands leads to extra member variable in the main
scenegraph class. In this case, you should reduce the number
of DEF commands with the menupoint actions ... rest of
scenegraph branch ... remove ... DEF name
Beside the need to increase the memory limits of the
javac compiler (-Xms/-Xmx) options, you
may also need to increase the PermSize memory limits
(-XX:PermSize=/-XX:MaxPermSize=) of the
java interpreter.
STEREOVIEWOPTIONS
-nostereo
force non stereoview mode on Linux/UNIX (e.g. if you do not own shutterglases)
-stereo
force stereoview mode.
Stereo is only supported for hardware/software combinations,
that allow quadbuffer stereo ("stereo in a
window"), NOT splitscreen stereo (eg.
"OpenGlVR").
Examples for hardware/software combinations with support for
quadbuffer stereo are graphicscards with support for
shutterglasses or "stereo cloneview" to connect
beamers of a onewall.
-anaglyph glassestype
force expermential stereoview
mode for use with colored anaglyph glasses.
glassestype can be red_green, green_red, red_blue or
blue_red.
This option uses the OpenGL accumulation buffer. This is not
hardware-supported by a lot of graphics cards/graphics
drivers and can result in miserable performance.
-eyedist eyedistinmeter
Distance between the two eyes
of the viewer.
Default eyedistinmeter is 0.06, it can be negative to
swap eyes (no need to reconfigure your hardware if eye
swapping problems occure).
-screendist screendistinmeter
Distance between the eyes of
the viewer and the mid of the monitor screen.
Default screendistinmeter is 0.8.
-fieldofview fieldofviewindegree
Overwrite Field of View field
in VRML viewpoints and set to fieldofviewindegree in degree.
Good stereoviewing may want need to ignore the fieldOfView
field of viewpoints. The fieldOfView of the human eye is
about 18 degrees, the VRML default is 45 degrees.
INPUTDEVICEOPTIONS
The following
options are only valid, if whitedune was compiled with
matching inputdevice driver support (e.g. there is not
support for a Linux joystick under IRIX).
-joystick joystickdevice
Only valid under Linux or
M$Windows.
Under Linux, joystickdevice is the device of a Linux
joystick (usually something like /dev/input/js0 or
/dev/js0).
Under M$Windows, the joystickdevice is a number.
Depending from the M$Windows version, this number is either
0, 1 or a number from 0 to 15.
-SDLjoystick joystickdevice
Currently only valid under MacOSX. The joystickdevice is a number (e.g. 0, 1, 2, ...).
-spaceball spaceballdevice
spaceballdevice is the
serial device connected to the spaceball (usually something
like /dev/ttyd2 or /dev/ttyS0).
Only valid if binary was compiled with libsball support.
-nxtdials usbdevice
This option support a dials
like inputdevice made of mindstorms nxt motors. Just attach
a wheel or gear to each of 3 motors, connect them to the
brick and connect the brick to the computer via USB.
This option is only valid, if white_whitedune was compiled
with support of the libusb library e.g. available under
Linux.
usbdevice is the number of the mindstorms nxt brick
connected via USB (0 for the first nxt brick, 1 for the
second nxt brick, etc).
The -nxtdials option automatically set the wheel
axisoption.
-xinput xinputname
xinputname is the
devicename supported by the Xinput Protocol (usually
something like magellan or dialbox).
Valid on most Unix/X11 implementations.
-xinputlist
Print a list of Xinput
devicenames that can be possibly used as xinputname
for the -xinput option and exit.
Valid on most Unix/X11 implementations.
-xinputlistlong
Print a list of Xinput
devicenames with axis information and exit.
Valid on most Unix/X11 implementations.
-aflock aflockdevice [ aflockoptions ] -tracker birdaddr -wand birdaddr
aflockdevice is the
serial device connected to the Ascension Flock of Birds
master transmitter (usually something like /dev/ttyd2 or
/dev/ttyS0).
Dune assumes the following configuration:
Multiple FOBs with single RS232 Interface to Host Computer
(see "The flock of Birds, Installation and Operation
Guide, Standalone and Multiple Transmitter/Multiple Sensors
Configurations", Page 3 (chapter
"Introduction"), Figure 2).
birdaddr is the adress of the Bird Unit of the magnetic
head tracker (-tracker) or "3D Mouse"
(-wand) in the Fast Bird Bus (FBB adress) as
configured with the dipswitches on the Bird Unit.
This program need to have the Flock of Birds configured in
the Normal Address Mode only (see Page 12, Figure 4 of the
manual decribed above).
-headnavigation
Use current transformmode
(including rotations) when using a headtracker.
Default without -headnavigation is using only the
translation mode. This default gives you a very natural
reaction, when your head moves, the virtual world moves, but
if your head only rotates, the virtual world stand still.
With the headnavigation option, the virtual world reacts to
head rotations, depending of the current transform mode. Be
carefull when you use this feature while talking to a
audience. Talking cause small and fast head rotations and
will cause small and fast rotations of the virtual world.
Your audience may get a impression like in a earthquake and
is more in danger to get motion sickness.
-sendalways
Tell whitedune that the device
sends (almost) always values. This values will then not be
interpreted automatically as transform commands.
Automatically used for Ascension Flock of Birds device
(-aflock).
-dontcarefocus
Inputdevice actions dont care
about the window focus.
This can be useful in situations, when you only work with
one whitedune window, e.g. when using a onewall.
AXISOPTIONS
-x|-y|-z|-xrot|-yrot|-zrot=[-][integer_axisnumber]
[,[factor][,[accel][,[wheel][,ignore]]]]
-all|-allxyz|-allrot=[factor][,[accel][,[wheel][,ignore]]]
-none=integer_axisnumber
-axes=max_number_axes
AXISLEGEND
|
- |
used to swap sign of value from axis |
integer_axisnumber
Integer with the number of the
axis, that should be used for the x y z xrot yrot zrot
directions.
This number may not be greater than the number of axes of
the inputdevice.
The integer_axisnumber in the none option is used to disable
this axis.
factor
Float with a multiplicator for
the axes
The factors of the all, allrot and allxyz options are
independend of the factors of the single axes.
|
accel |
Float with a expotential accelerator for the axes | ||
|
wheel |
The string "wheel" means this axis of the inputdevice will not deliver zero if released |
ignore
Float with the value (relative to the maximal value from the device) which will be ignored (insensitivity)
max_number_axes
Number of used axes, one of
(2,3,4,5).
This must be equal or less to the physical available axes of
a device. Main usage of this option is to disable bad
designed or mechanical defect axes e.g. when you wish, this
axis on a joystick would not exist
AFLOCKOPTIONS
This options are
only valid for the Ascension flock of birds magnetic
tracking system.
-baud baudrate
Baudrate of the serial line
communicating with the transmitter.
According to the flock of bird manual, the following
baudrates are valid for serial line communication: 2400,
4800, 9600, 19200, 38400, 57600 and 115200.
Default: 38400
-numbirds numberbirds
Number of "data
delivering" birds attached to the transmitter (e.g. not
counting the transmitter itself, if it is a Extended Range
Controller (ERC)).
Default: 2 (tracker and wand).
-master birdaddr
Adress of the master
transmitter in the Fast Bird Bus (FBB adress) as configured
with the dipswitches on the transmitter unit.
Default: 1
-masterIsErc
Used to differ between
configurations, where the master is a ERC (Extended Range
Controller) or not. If the master is not a ERC, the FBB
adress is the same as the FBB adress of the tracker or the
wand.
Default: not set
-hemisphere FRONT_HEM|AFT_HEM|UPPER_HEM|LOWER_HEM|LEFT_HEM|RIGHT_HEM
Hemisphere used. Sit on the
antenna block (with the legs near on the side of the text)
to see, what is left or right 8-)
Default: RIGHT_HEM
-sync 0|1
Synchronise (1) or not (0) data
output to a CRT (Monitor) or your host computer.
Synchronisation is used to elimiate magnetic effects of a
Monitor using the CRT sync cable.
Default: 0
-block 0|1
Set (1) or do not set (0) the
FNDELAY flag to the filedescriptor of the serial port.
Default: 0
-filter AC_NARROW | AC_WIDE | DC_FILTER
Enable different filters. Read
the Flock of Birds manuals for more information.
This option can be repeated to use multiple filters.
Default: no filter set, using filter set by Flock
autoconfiguration.
-suddenchangelock 0|1
Allow (0) or disallow (1)
setting of messured position and orientation when a sudden
large messurement occure.
Default: 1
-calfile calibrationfile
Use a VR Juggler style file to calibrate position messurement.
-ignoresize delta
Ignore position jumps from
flock bigger than delta. This is much like suddenchangelock,
but pure software based.
Default: 0
MISCOPTIONS
-tessellation integer
Set the default tessellation of
NURBS and superformula based parametric shapes to
integer.
The meaning of tessellation decide how many edges are
generated in one direction.
A low default tessellation result in faster rendering of
related shapes with tessellation set to 0 inside the
white_whitedune application, but can give a reduced view, so
details of a shape may be hidden.
If no -tessellation option is used, the default
tessellation is 32.
-indirect
Forces indirect OpenGL
rendering, even when 3D hardware rendering accelleration is
available. In case of possible 3D hardware rendering
accelleration this option can drastically slow down the
program.
This option is most usefull on machines with problematic
graphic drivers or halfbaken 3D desktop features like
compiz.
-uninstall
Output information (if
available) on the commandline, how the white_whitedune
application can be uninstalled and exit.
Under Micro$oft Windows it additionally clears all
information activly set by white_whitedune (under
HKEY_CURRENT_USER) in the Windows registry.
-psn_???
Only valid under MacOSX.
Options starting with the string "-psn_" are
generated by the Aqua desktop under on some versions of
MacOSX and are silently ignored.
-fn font
Only valid under
Linux/UNIX/MacOSX.
Set the unix font. Check for valid fonts with the
xlsfonts(1) command.
-demomode timeout
This options is intended for
running the program as eyecatcher eg. on a fair.
The option is only usefull, if a viewpoint animation is
running. In case of input from the mouse (mouseclick),
keyboard or a 3D inputdevice, the animation is stopped an
the user can navigate through the 3D world.
timeout seconds after the last input, the viewpoint
animation is not supressed anymore.
-filedialogdir directory
Change to a specific directory before opening a filedialog.
-proto category protofile
Adds the VRML PROTO in the file protofile to the list of available PROTOs in the create => proto menu in the category submenu and exit.
-renderslower
This option uses a slower render mode.
--version
Print out version information and exit.
--copyrightdetails
Print out detailed copyright informations and exit.
MOUSE/KEYS
In the 3D view,
whitedune support the following mouse / keyboard commands:
Mouse Button 1 click:
Select objects/3D handlers (e.g. arrows or white boxes) under the cursor (or under the top of 3D cursor in stereoview)
Mouse Button 2 click:
Additionly select white box 3D handlers under the cursor (or under the top of 3D cursor in stereoview)
Mouse Button 1 drag:
Drag objects/3D handlers around
CTRL-Mouse Button 1 drag:
Virtual trackball navigation
SHIFT-Mouse Button 1 drag:
Forward/backward navigation
CTRL+SHIFT-Mouse Button 1 drag:
up/down/left/right navigation
ALT-Mouse Button 1 drag: (SGI style)
Virtual trackball navigation
ALT-Mouse Button 2 drag: (SGI style)
up/down/left/right navigation
ALT-Mouse Button 1+2 drag: (SGI style)
forward/backward navigation
Navigation icon pressed-Mouse Button 1 drag:
Virtual trackball navigation
Navigation icon pressed-Mouse Button 2 drag:
forward/backward navigation
Navigation icon-Mouse Button 1+2 drag:
up/down/left/right navigation
In the route view, whitedune
support the following mouse / keyboard
commands:
Mouse Button 1 click to event socket of a node and drag to a
matching event
socket:
create a ROUTE connection
Mouse Button 1 click to nothing and drag:
cut a ROUTE connection
Mouse Button 1 click to a node and drag:
move node in the route view
Mouse Button 1 click to a node,
hold Mouse Button1, pressing Page Up/Down
key
move node in the route view by one page (works only on correct motif/lesstif implementations)
Information about other keyboard
usage can be found in the toolbar.
Tips how to use whitedune can be found in the docs directory
of whitedune
(http://129.69.35.12/whitedune/docs/)
C/C++/JAVA SOURCE EXPORT
The export to
source code is a export of the information (numbers and
strings) of the VRML/X3D scenegraph tree.
White_whitedune do not export something like C source with
OpenGL commands. The exported code is independend of any
rendering engine, but can be used with any 3D API.
Additional code is needed to render the scenegraph with a 3D
API. Currently white_whitedune comes with only one set of
such additinal code for the Java Monkey Engine (JME). This
code can be used as a model for writing code for additional
renderengines.
The information of the scenegraph is written into a
class/struct with a name concatinated from the string of the
prefix argument (default "X3d") and the
string "SceneGraph". The scenegraph class/struct
is filled with references to the different VRML/X3D commands
("nodes"). The name of the type of such a node is
concatinated from the string of the prefix argument
(default "X3d") and "Node". Each node
type contains the data of the VRML/X3D node in variables
named in the same way as the VRML/X3D fields.
The following table shows the mapping from the VRML/X3D
field type to the C, C++ and java datatypes:

(***) The "X3d" part
of the name is the default, it can be replaced by the string
of the prefix argument.
For any MF* type field (and a SFImage type field) the number
of int, float etc. values in the array is stored in a
variable of the X3dNode struct/class composed from
"m_", the name of the field and
"_length" in case of a C/C++ export. Java do not
need such a variable, cause the length of a array is always
available as with the .length component of the array.
The scenegraph
is a tree of nodes. The root of the scenegraph is (similar
to the white_whitedune internals) a VRML/X3D Group node
named "root".
In a Group node, the contained nodes are attached via a
field named "children" of type MFNode.
For example imagine the following VRML file:
#VRML V2.0 utf8
Group
{
children
[
Group
{
}
Group
{
}
DEF NAME_OF_FOGNODE Fog
{
color 1 0.50000000 1
}
]
}
If no
prefix argument is used, the first node in a VRML/X3D
file is represended in the exported C source as
"root->children[0]" in the
"X3dSceneGraph" struct.
If the first node in the VRML/X3D file is also a Group node
and contain three other nodes, the third of this nodes is
represended as
"root->children[0]->children[2]" in the
"X3dSceneGraph" struct.
If the third of this nodes is a Fog node, the
"color" field of the Fog node is represended in
the exported C source as
"root->children[0]->children[2]->color"
in the "X3dSceneGraph" struct.
The type of the "color" field of the Fog node is
SFColor. The SFColor type is represented as a array of 3
floating point values in the C source, used to store the
red, green and blue part of the color.
So the green part of the fog color is represended in the
exported C source as
"root->children[0]->children[2]->color[1]"
in the "X3dSceneGraph" struct.
A C++ export would also use
"root->children[0]->children[2]->color[1]"
in the "X3dSceneGraph" class.
A java export would similarly use
"root.children[0].children[2].color[1]" in the
"X3dSceneGraph" class.
There is a
second way to access the fields of the Fog node.
In VRML/X3D it is possible to name nodes with a
"DEF" command. The string behind the DEF command
("NAME_OF_FOGNODE" in the example) also occures in
the in the "X3dSceneGraph" struct and can be
directly used to access the matching VRML/X3D data.
So the green part of the fog color is represended in the
exported C source as
"NAME_OF_FOGNODE->color[1]" in the
"X3dSceneGraph" struct.
A C++ export would also use
"NAME_OF_FOGNODE->color[1]" in the
"X3dSceneGraph" class.
A java export would use similarly
"NAME_OF_FOGNODE.color[1]" in the
"X3dSceneGraph" class.
A problem can occure, if the string behind the DEF command
is a reserved keyword in the target language. For example,
the 3D modeller wings3d often uses the DEF name
"default" when exporting VRML97 files.
In this case, the DEF name will be renamed (e.g. to
"default1") and a warning would be written to
standard error during the export.
Beside the
access of node data directly, there are also 2 sets of
callbacks to handle the data of a whole scenegraph (or a
branch of it): a set of callbacks to render the content of
the scenegraph branch ("*RenderCallback") and a
additional set of callbacks for other tasks
("*DoWithDataCallback").
There are also callbacks to replace the functions, which per
default alltogether traverse the Scenegraph
("*TreeRenderCallback" and
"*TreeDoWithDataCallback").
The callback mechanism and the scenegraph initialization
differs from programming language to programming
language.
C:
The scenegraph (default argument "X3d" for prefix)
can be declarated with
struct X3dSceneGraph sceneGraph;
and initialized with
X3dSceneGraphInit(&sceneGraph);
A callback function for any X3D node type (like Fog, Text,
IndexedFaceSet etc.) has the declaration
void mycallbackFunction(X3dNode *self, void *data)
To access the fields of the X3D node, you usually cast the
X3dNode pointer to a pointer to the type build from the
string of the prefix argument (default
"X3d") and the name of the X3D node type you
access with this callback (e.g. X3dFog, X3dText,
X3dIndexedFaceSet etc.).
X3dFog *node = (X3dFog *)self;
X3dText *node = (X3dText *)self;
X3dIndexedFaceSet *node = (X3dIndexedFaceSet *)self;
etc.
With this variable "node" the fields the X3D node
can be accessed.
To install the callback, simply assign you function pointer
to "callbackFunction" to a variable build from the
string of the prefix argument (default
"X3d"), the the name of the X3D node and the
string "RenderCallback" or
"DoWithDataCallback". E.g.
X3dFogRenderCallback = mycallbackFunction;
X3dTextDoWithDataCallback = mycallbackFunction;
X3dIndexedFaceSetRenderCallback = mycallbackFunction;
To run the Render or DoWithData functions with the
scenegraph tree, just use
X3dGroupTreeDoWithData(&sceneGraph.root, NULL);
Instead of using NULL, other data can be passed to the
"data" argument of the callback functions.
C++:
The callback mechanism is very similar to the C mechanism.
The main difference is the storage of the callback
functions. While the callbackfunctions in C are stored in
global space, the C++ callbackfunctions are stored in the
static part of the matching node type.
Instead of using
X3dFogRenderCallback = mycallbackFunction; // C
a C++ program would use
X3dFog dummy;
dummy.renderCallback = &mycallbackFunction; // C++
In C++ there is no need to call a initialization function. A
constructor is called when the
X3dSceneGraph sceneGraph;
declaration is used.
To run the Render or DoWithData functions with the
scenegraph tree "sceneGraph.render(NULL);" or
"sceneGraph.doWithData(NULL);" is used.
NULL can be replaced by other data, that will be passed to
the "data" argument of the callback function.
java:
The java callback mechanism is a bit different, it is based
on inheritance.
The callback function is part of a class, that extends a
matching class:
class MyCallbackClass extends X3dFogRenderCallback {
public void render(X3dNode node) {
The new class is used in the following example:
MyCallbackClass myCallback = new MyCallbackClass();
X3dSceneGraph sceneGraph = new X3dSceneGraph();
X3dText.setX3dTextRenderCallback(myCallback);
sceneGraph.render();
With the the
-manyclasses option, the last line changes to
"X3dSceneGraph.render();". The access to a node
with a DEF command in the x3dv/vrml file changes also to a
static variable in a similar way.
See the directories docs/export_example_c,
docs/export_example_c++ and docs/export_example_java of the
source archive for examples.
EXAMPLES
whitedune -nostereo
start whitedune this way, if you have a stereo capable visual, but no shutterglases or other shutterbased technology.
whitedune -xinput magellan
-allxyz=10,100,,0.0000002 -xinput dialbox-1 -x=0
-y=2 -z=4 -xrot=1 -yrot=3 -zrot=5 -all=1000,,wheel
starts whitedune with a
magellan xinputdevice with factor 10, acceleration 100 and a
ignore value of 0.0000002 on the xyz axes and a dialbox
device with
x axis = 0. axis
y axis = 2. axis
z axis = 4. axis
rotation around x axis = 1. axis
rotation around y axis = 3. axis
rotation around y axis = 5. axis
all axes use factor 1000 and all to not deliver zero if
released
whitedune -joystick /dev/input/js0 -z=,3 -axes=3
starts whitedune with a linux joystick, set acceleration of the z axis to 3 and disables the 4. (5., 6., ...) axis.
whitedune -xinput magellan -z=3 -xrot=2 -none=2
starts whitedune with a xinput/magellan device, swapping axis number 2 and axis number 3, with axis number 2 disabled.
whitedune -nxtdials
starts whitedune with a mindstorms nxt usb device, all axes are automatic handled as wheels.
whitedune -aflock /dev/ttyS1 -numbirds 2 -master 1 -wand 2 -tracker 3
starts whitedune with a Ascension Flock of Birds. Master transmitter (a Extended Range Controller (ERC)) at FBB adress 1 is connected to the serial device /dev/ttyS1, use 2 Birds, one attached to a "3D Mouse" device at FBB adress 2 and one attached to a head tracking device at FBB adress 3.
whitedune -wonderland wonderland/modules -manyclasses Test.x3dv
Exports the content of
Test.x3dv as java source for wonderland 0.5 to the directory
wonderland/modules/exportX3dv/test.
To compile the java source to a wonderland module
wonderland/modules/exportX3dv/test/dist/test.jar change the
directory to wonderland/modules/exportX3dv/test and use
ant.
FILES
$HOME/.whitedunerc
default file to load/store settings
(see WHITEDUNERC environment variable for more
information)
$HOME/.whitedune_crash_*_*.wrl
stores the vrml file in case of a crash
ENVIRONMENT
WHITEDUNERC filename to load/store details of whitedunes screen layout and
settings of the
"options" menupoint.
If this filename is not writable, settings are only loaded,
not stored.
If WHITEDUNERC is not set, the file
$HOME/.whitedunerc is used under Linux/UNIX/MacOSX or
the registry under Micro$oft Windows.
WHITEDUNEDOCS path to
documentation directory
LANG the first two characters of then environment
variable LANG
are compared to the ISO 3166 country shortcut of the supported languages. For example, if LANG is set to de_DE, german menu, dialogs and errormessages are used.
COPYRIGHT
Dune, graphical
vrml97 editor and animation tool
Copyright (C) 2000-2002 Stephen F. White and others
This program is free software; you can redistribute it
and/or modify it under the terms of the
GNU General Public License
as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later
version.
BUGS
Dune need valid
vrml97/x3dv code to work, it can not load a invalid
VRML97/X3DV file.
White_whitedune can load XML encoded X3D files via a
translator.
Use the menupoint Options -> Input Settings... to
configure a X3D/XML to X3DV translator.
whitedune is software in development, it is not 100% free of
bugs. Unsucessful crashes should be rare, lucky crashes
allow to get back the data. (see "EXIT STATUS").
Currently not all VRML97/X3D nodes are displayed (e.g.
MovieTexture, NurbsSweptSurface or NurbsSwungSurface) or
displayed correctly (e.g. Text or Viewpoint).
Please send bugmessages to the old whitedune bugtracker
sourceforge page 〈URL:
http://sourceforge.net/tracker/?group_id=3356&atid=103356
〉
DIAGNOSTICS
Exit status is 0
for sucessfull operation.
Exit status is 1 if inputfile can not be sucessfully read or
other initialisation error.
Exit status is 2 in case of a X11 server crash.
Exit status is 11 in case of a X11 initialisation error.
Exit status is 97 in case one of the inputfiles is a VRML 1
file (the VRML 1 format is not supported).
In case of a coredump/crash, the exit status can be
undefined.
EXIT STATUS
In case of a crash (e.g. X11 server crash or signal (coredump) in case of a internal error), whitedune tries to write it’s contence to the file $HOME/.whitedune_crash_*_*.wrl
SEE ALSO
illegal2vrml(1),
javac(1), java(1), Xvfb(1), xterm(1), v2x3d(1), x3dv2(1),
FreeWRL(1), lookat(1), cc3dglut(1), xj3d(1), cosmoplayer(1),
cosmoworlds(1),
ISO/IEC 14772 〈URL:
http://www.web3d.org/x3d/specifications/vrml/ 〉
ISO/IEC 19776-2 〈URL:
http://www.web3d.org/specifications/ 〉
NIST vrml97/x3d translators 〈URL:
http://ovrt.nist.gov/v2_x3d.html 〉
AUTHORS
Stephen F. White
and others
See README file for details