Calerga VR Implementation
Calerga VR is an experimental implementation of the VRML and X3D standards developed by Calerga. VRML is a markup language for the description of 3D scenes in virtual reality, developed in the 1990. X3D is its successor, with better extensibility and multiple encodings, including one based on XML. Calerga implementation relies on modern web technologies such as JavaScript and WebGL. If WebGL is not available, a wireframe representation is displayed in a 2d canvas.
This document is a complement to VRML and X3D standards; neither a user manual or tutorial, nor even a self-contained description of Calerga VR.
Files
Default encoding is VRML 97. The parser recognizes as X3D the files starting with the header comment #X3D V3.? utf8. In X3D, the following features of the Classic VRML encoding are supported:
- X3D keywords
- X3D field types
- Block comments
Support for the XML encoding is still basic, with incomplete field types. Support for the JSON encoding (not a standard yet) is also partial.
Nodes
For the VRML standard, see web3D standards, VRML 97 (ISO/IEC 14772-1).
For the X3D standard, see web3D standards, X3D Architecture and base components V3 (ISO/IEC IS 19775-1:2013) and X3D Classic VRML encoding (ISO/IEC 19776-2 IS).
This sections gives the implementation status of nodes and fields. The tables contain the following columns:
- field access ([] or [in,out] for stored values, [in] or [out] for events; noted respectively initializeOnly, inputOutput, inputOnly and outputOnly in X3D, or field, exposedField, eventIn and eventOut in VRML)
- field type
- field name
- "b" if valid in both VRML and X3D, "v" if only in VRML, empty if only in X3D
The implementation status of each field is shown by its color. The table below gives the number of fields in each class; but it isn't an accurate statement of completion, because X3D nodes which don't exist in VRML are omitted.
supported | ? |
ignored | ? |
not implemented | ? |
custom | ? |
The container field is the name of the default field of the parent the node is attached to. It is used in XML encoding (default value of the attribute containerField) or, as a non-standard extension, in the Classic VRML encoding when the field name is missing (see section Default field names).
Anchor
Container field: children
[in] | MFNode | addChildren | b |
[] | SFVec3f | bboxCenter | b |
[] | SFVec3f | bboxSize | b |
[in,out] | MFNode | children | b |
[in,out] | SFString | description | b |
[in,out] | SFNode | metadata | |
[in,out] | MFString | parameter | b |
[in] | MFNode | removeChildren | b |
[in,out] | MFString | url | b |
Appearance
Container field: appearance
[in,out] | SFNode | material | b |
[in,out] | SFNode | metadata | |
[in,out] | SFNode | texture | b |
[in,out] | SFNode | textureTransform | b |
AudioClip
Container field: source
[in,out] | SFString | description | b |
[out] | SFTime | duration_changed | b |
[out] | SFBool | isActive | b |
[in,out] | SFBool | loop | b |
[in,out] | SFNode | metadata | |
[in,out] | SFTime | pauseTime | |
[in,out] | SFFloat | pitch | b |
[in,out] | SFTime | resumeTime | |
[in,out] | SFTime | startTime | b |
[in,out] | SFTime | stopTime | b |
[in,out] | MFString | url | b |
Background
Container field: children
[in,out] | MFString | backUrl | b |
[in,out] | MFString | bottomUrl | b |
[in,out] | MFString | fronUrl | b |
[in,out] | MFFloat | groundAngle | b |
[in,out] | MFColor | groundColor | b |
[out] | SFBool | isBound | b |
[in,out] | MFString | leftUrl | b |
[in,out] | SFNode | metadata | |
[in,out] | MFString | rightUrl | b |
[in] | SFBool | set_bind | b |
[in,out] | MFFloat | skyAngle | b |
[in,out] | MFColor | skyColor | b |
[in,out] | MFString | topUrl | b |
Billboard
Container field: children
[in] | MFNode | addChildren | b |
[in,out] | SFVec3f | axisOfRotation | b |
[] | SFVec3f | bboxCenter | b |
[] | SFVec3f | bboxSize | b |
[in,out] | MFNode | children | b |
[in,out] | SFNode | metadata | |
[in] | MFNode | removeChildren | b |
BooleanFilter
Container field: children
[out] | SFBool | inputFalse | |
[out] | SFBool | inputNegate | |
[out] | SFBool | inputTrue | |
[in,out] | SFNode | metadata | |
[in] | SFBool | set_boolean |
BooleanSequencer
Container field: children
[in,out] | MFFloat | key | |
[in,out] | MFBool | keyValue | |
[in,out] | SFNode | metadata | |
[in] | SFBool | next | |
[in] | SFBool | previous | |
[in] | SFFloat | set_fraction | |
[out] | SFBool | value_changed |
BooleanToggle
Container field: children
[in,out] | SFNode | metadata | |
[in] | SFBool | set_boolean | |
[in,out] | SFBool | toggle |
BooleanTrigger
Container field: children
[in,out] | SFNode | metadata | |
[in] | SFTime | set_triggerTime | |
[out] | SFBool | triggerTrue |
Box
Container field: geometry
[] | SFFloat | bevel | |
[in,out] | SFNode | metadata | |
[] | SFVec3f | size | b |
[] | SFBool | solid |
The new field bevel (default: 0) is the size of a bevel along the 12 edges of the box.
Collision
Container field: children
[in] | MFNode | addChildren | b |
[] | SFVec3f | bboxCenter | b |
[] | SFVec3f | bboxSize | b |
[in,out] | MFNode | children | b |
[in,out] | SFBool | collide | b |
[out] | SFTime | collideTime | b |
[in,out] | SFNode | metadata | |
[] | SFNode | proxy | b |
[in] | MFNode | removeChildren | b |
Color
Container field: color
[in,out] | MFColor | color | b |
[in,out] | SFNode | metadata |
ColorInterpolator
Container field: children
[in,out] | MFFloat | key | b |
[in,out] | MFColor | keyValue | b |
[in,out] | SFNode | metadata | |
[in] | SFFloat | set_fraction | b |
[in,out] | SFColor | value_changed | b |
Cone
Container field: geometry
[] | SFBool | bottom | b |
[] | SFFloat | bottomRadius | b |
[] | SFFloat | height | b |
[in,out] | SFNode | metadata | |
[] | SFBool | side | b |
[] | SFBool | solid |
Coordinate
Container field: coord
[in,out] | SFNode | metadata | |
[in,out] | MFVec3f | point | b |
CoordinateInterpolator
Container field: children
[in,out] | MFFloat | key | b |
[in,out] | MFVec3f | keyValue | b |
[in,out] | SFNode | metadata | |
[in] | SFFloat | set_fraction | b |
[in,out] | MFVec3f | value_changed | b |
Cylinder
Container field: geometry
[] | SFFloat | bevel | |
[] | SFBool | bottom | b |
[] | SFFloat | height | b |
[] | SFFloat | innerRadius | |
[in,out] | SFNode | metadata | |
[] | SFFloat | radius | b |
[] | SFBool | side | b |
[] | SFBool | solid | |
[] | SFBool | top | b |
The new field bevel (default: 0) is the size of a bevel along the base and top of the cylinder.
The new field innerRadius (default: 0) is the radius of a cylindric hole, concentric with the external cylinder. 0 means none.
CylinderSensor
Container field: children
[out] | SFFloat | angle_changed | |
[in,out] | SFNode | autoOffset | b |
[in,out] | SFString | description | |
[in,out] | SFFloat | diskAngle | b |
[in,out] | SFBool | enabled | b |
[out] | SFBool | isActive | b |
[in,out] | SFFloat | maxAngle | b |
[in,out] | SFNode | metadata | |
[in,out] | SFFloat | minAngle | b |
[in,out] | SFFloat | offset | b |
[out] | SFRotation | rotation_changed | b |
[out] | SFVec3f | trackPoint_changed | b |
The new output event angle_changed gives the 4th element of the rotation rotation_changed, which can simplify routing in some cases.
DirectionalLight
Container field: children
[in,out] | SFFloat | ambientIntensity | b |
[in,out] | SFColor | color | b |
[in,out] | SFVec3f | direction | b |
[in,out] | SFFloat | intensity | b |
[in,out] | SFNode | metadata | |
[in,out] | SFBool | on | b |
DistanceSensor
Container field: children
[in,out] | SFBool | enabled | |
[in,out] | SFNode | metadata | |
[in,out] | SFFloat | value |
Node DistanceSensor is a sensor node which gives the distance to the nearest shape from its position along the positive x axis in local coordinates. If no shape intersects the positive x axis, the value which is output is infinity. This node type can be used to simulate proximity sensors in robotics.
ElevationGrid
Container field: geometry
[] | SFBool | ccw | b |
[in,out] | SFNode | color | b |
[] | SFBool | colorPerVertex | b |
[] | SFFloat | creaseAngle | b |
[] | MFFloat | height | b |
[in,out] | SFNode | metadata | |
[in,out] | SFNode | normal | b |
[] | SFBool | normalPerVertex | b |
[in] | MFFloat | set_height | b |
[] | SFBool | solid | b |
[in,out] | SFNode | texCoord | b |
[] | SFInt32 | xDimension | b |
[] | SFFloat | xSpacing | b |
[] | SFInt32 | zDimension | b |
[] | SFFloat | zSpacing | b |
Extrusion
Container field: geometry
[] | SFBool | beginCap | b |
[] | SFBool | ccw | b |
[] | SFBool | convex | b |
[] | SFFloat | creaseAngle | b |
[] | MFVec2f | crossSection | b |
[] | SFBool | endCap | b |
[in,out] | SFNode | metadata | |
[] | MFRotation | orientation | b |
[] | MFVec2f | scale | b |
[in] | MFVec2f | set_crossSection | b |
[in] | MFRotation | set_orientation | b |
[in] | MFVec2f | set_scale | b |
[in] | MFVec3f | set_spine | b |
[] | SFBool | solid | b |
[] | MFVec3f | spine | b |
Fog
Container field: children
[in,out] | SFColor | color | b |
[in,out] | SFString | fogType | b |
[out] | SFBool | isBound | b |
[in,out] | SFNode | metadata | |
[in] | SFBool | set_bind | b |
[in,out] | SFFloat | visibilityRange | b |
FontStyle
Container field: fontStyle
[] | SFString | family | b |
[] | SFBool | horizontal | b |
[] | MFString | justify | b |
[] | SFString | language | b |
[] | SFBool | leftToRight | b |
[in,out] | SFNode | metadata | |
[] | SFFloat | size | b |
[] | SFFloat | spacing | b |
[] | SFString | style | b |
[] | SFBool | topToBottom | b |
Group
Container field: children
[in] | MFNode | addChildren | b |
[] | SFVec3f | bboxCenter | b |
[] | SFVec3f | bboxSize | b |
[in,out] | MFNode | children | b |
[in,out] | SFNode | metadata | |
[in] | MFNode | removeChildren | b |
ImageTexture
Container field: texture
[in,out] | SFNode | metadata | |
[] | SFBool | repeatS | b |
[] | SFBool | repeatT | b |
[] | SFNode | textureProperties | |
[in,out] | MFString | url | b |
IndexedFaceSet
Container field: geometry
[] | SFBool | ccw | b |
[in,out] | SFNode | color | b |
[] | MFInt32 | colorIndex | b |
[] | SFBool | colorPerVertex | b |
[] | SFBool | convex | b |
[in,out] | SFNode | coord | b |
[] | MFInt32 | coordIndex | b |
[] | SFFloat | creaseAngle | b |
[in,out] | SFNode | metadata | |
[in,out] | SFNode | normal | b |
[] | MFInt32 | normalIndex | b |
[] | SFBool | normalPerVertex | b |
[in] | MFInt32 | set_colorIndex | b |
[in] | MFInt32 | set_coordIndex | b |
[in] | MFInt32 | set_normalIndex | b |
[in] | MFInt32 | set_texCoordIndex | b |
[] | SFBool | solid | b |
[in,out] | SFNode | texCoord | b |
[] | MFInt32 | texCoordIndex | b |
IndexedLineSet
Container field: geometry
[in,out] | SFNode | color | b |
[] | MFInt32 | colorIndex | b |
[] | SFBool | colorPerVertex | b |
[in,out] | SFNode | coord | b |
[] | MFInt32 | coordIndex | b |
[in,out] | SFNode | metadata | |
[in] | MFInt32 | set_colorIndex | b |
[in] | MFInt32 | set_coordIndex | b |
Inline
Container field: children
[] | SFVec3f | bboxCenter | b |
[] | SFVec3f | bboxSize | b |
[in,out] | SFNode | metadata | |
[in,out] | MFString | url | b |
IntegerSequencer
Container field: children
[in,out] | MFFloat | key | |
[in,out] | MFInt32 | keyValue | |
[in,out] | SFNode | metadata | |
[in] | SFBool | next | |
[in] | SFBool | previous | |
[in] | SFFloat | set_fraction | |
[out] | SFInt32 | value_changed |
IntegerTrigger
Container field: children
[in,out] | SFInt32 | integerKey | |
[in,out] | SFNode | metadata | |
[in] | SFBool | set_boolean | |
[out] | SFInt32 | triggerValue |
LOD
Container field: children
[in] | MFNode | addChildren | |
[] | SFVec3f | bboxCenter | |
[] | SFVec3f | bboxSize | |
[] | SFVec3f | center | b |
[in,out] | MFNode | children | |
[] | SFBool | forceTransitions | |
[in,out] | MFNode | level | v |
[out] | SFInt32 | level_changed | |
[in,out] | SFNode | metadata | |
[] | MFFloat | range | b |
[in] | MFNode | removeChildren |
Material
Container field: material
[in,out] | SFFloat | ambientIntensity | b |
[in,out] | SFColor | diffuseColor | b |
[in,out] | SFColor | emissiveColor | b |
[in,out] | SFNode | metadata | |
[in,out] | SFFloat | shininess | b |
[in,out] | SFColor | specularColor | b |
[in,out] | SFFloat | transparency | b |
MetadataBoolean
Container field: metadata
[in,out] | SFNode | metadata | |
[in,out] | SFString | name | |
[in,out] | SFString | reference | |
[in,out] | MFBool | value |
MetadataDouble
Container field: metadata
[in,out] | SFNode | metadata | |
[in,out] | SFString | name | |
[in,out] | SFString | reference | |
[in,out] | MFDouble | value |
MetadataFloat
Container field: metadata
[in,out] | SFNode | metadata | |
[in,out] | SFString | name | |
[in,out] | SFString | reference | |
[in,out] | MFFloat | value |
MetadataInteger
Container field: metadata
[in,out] | SFNode | metadata | |
[in,out] | SFString | name | |
[in,out] | SFString | reference | |
[in,out] | MFInt32 | value |
MetadataSet
Container field: metadata
[in,out] | SFNode | metadata | |
[in,out] | SFString | name | |
[in,out] | SFString | reference | |
[in,out] | MFNode | value |
MetadataString
Container field: metadata
[in,out] | SFNode | metadata | |
[in,out] | SFString | name | |
[in,out] | SFString | reference | |
[in,out] | MFString | value |
MovieTexture
Container field: texture
[in,out] | SFString | description | |
[out] | SFFloat | duration_changed | b |
[out] | SFTime | elapsedTime | |
[out] | SFBool | isActive | b |
[out] | SFBool | isPaused | |
[in,out] | SFBool | loop | b |
[in,out] | SFNode | metadata | |
[in,out] | SFTime | pauseTime | |
[] | SFBool | repeatS | b |
[] | SFBool | repeatT | b |
[in,out] | SFTime | resumeTime | |
[in,out] | SFFloat | speed | b |
[in,out] | SFTime | startTime | b |
[in,out] | SFTime | stopTime | b |
[] | SFNode | textureProperties | |
[in,out] | MFString | url | b |
NavigationInfo
Container field: children
[in,out] | MFFloat | avatarSize | b |
[in,out] | SFBool | headlight | b |
[out] | SFBool | isBound | b |
[in,out] | SFNode | metadata | |
[in] | SFBool | setBind | b |
[in,out] | SFFloat | speed | b |
[in,out] | MFString | type | b |
[] | SFFloat | visibilityLimit | b |
Normal
Container field: normal
[in,out] | SFNode | metadata | |
[in,out] | MFVec3f | vector | b |
NormalInterpolator
Container field: children
[in,out] | MFFloat | key | b |
[in,out] | MFVec3f | keyValue | b |
[in,out] | SFNode | metadata | |
[in] | SFFloat | set_fraction | b |
[in,out] | MFVec3f | value_changed | b |
NumberInput
Container field: geometry
[in,out] | SFBool | enabled | |
[in,out] | SFNode | fontStyle | |
[in,out] | SFFloat | maxValue | |
[in,out] | SFNode | metadata | |
[in,out] | SFFloat | minValue | |
[in,out] | SFString | prefix | |
[in,out] | SFFloat | step | |
[in,out] | SFString | suffix | |
[in,out] | SFFloat | value | |
[in,out] | SFBool | wrap |
Node NumberInput is a geometry which displays a number like the text node, with optional prefix and suffix strings. It lets the user change the value of the number by clicking arrows at the right of the string.
OrientationInterpolator
Container field: children
[in,out] | MFFloat | key | b |
[in,out] | MFRotation | keyValue | b |
[in,out] | SFNode | metadata | |
[in] | SFFloat | set_fraction | b |
[in,out] | SFRotation | value_changed | b |
OrthoViewpoint
Container field: children
[out] | SFTime | bindTime | |
[in,out] | SFVec3f | centerOfRotation | |
[in,out] | SFString | description | |
[in,out] | MFFloat | fieldOfView | |
[out] | SFBool | isBound | |
[in,out] | SFBool | jump | |
[in,out] | SFNode | metadata | |
[in,out] | SFRotation | orientation | |
[in,out] | SFVec3f | position | |
[in,out] | SFBoolean | retainUserOffsets | |
[in] | SFBool | set_bind |
PixelTexture
Container field: texture
[in,out] | SFImage | image | b |
[in,out] | SFNode | metadata | |
[] | SFBool | repeatS | b |
[] | SFBool | repeatT | b |
[] | SFNode | textureProperties |
PlaneSensor
Container field: children
[in,out] | SFBool | autoOffset | b |
[in,out] | SFString | description | |
[in,out] | SFBool | enabled | b |
[out] | SFBool | isActive | b |
[in,out] | SFVec2f | maxPosition | b |
[in,out] | SFNode | metadata | |
[in,out] | SFVec2f | minPosition | b |
[in,out] | SFVec3f | offset | b |
[out] | SFVec3f | trackPoint_changed | b |
[out] | SFVec3f | translation_changed | b |
[out] | SFFloat | x_changed | |
[out] | SFFloat | y_changed |
The new output events x_changed and y_changed give the 1st and 2nd elements of the translation vector translation_changed, respectively, which can simplify routing in some cases.
PointLight
Container field: children
[in,out] | SFFloat | ambientIntensity | b |
[in,out] | SFVec3f | attenuation | b |
[in,out] | SFColor | color | b |
[in,out] | SFFloat | intensity | b |
[in,out] | SFVec3f | location | b |
[in,out] | SFNode | metadata | |
[in,out] | SFBool | on | b |
[in,out] | SFFloat | radius | b |
PointSet
Container field: geometry
[in,out] | SFNode | color | b |
[in,out] | SFNode | coord | b |
[in,out] | SFNode | metadata |
Polyline2D
Container field: geometry
[in,out] | MFVec2f | lineSegments | |
[in,out] | SFNode | metadata |
Polypoint2D
Container field: geometry
[in,out] | SFNode | metadata | |
[in,out] | MFVec2f | point |
PositionInterpolator
Container field: children
[in,out] | MFFloat | key | b |
[in,out] | MFVec3f | keyValue | b |
[in,out] | SFNode | metadata | |
[in] | SFFloat | set_fraction | b |
[in,out] | SFVec3f | value_changed | b |
ProximitySensor
Container field: children
[in,out] | SFVec3f | center | b |
[in,out] | SFBool | enabled | b |
[in,out] | SFTime | enterTime | b |
[in,out] | SFTime | exitTime | b |
[in,out] | SFBool | isActive | b |
[in,out] | SFNode | metadata | |
[in,out] | SFRotation | orientation_changed | b |
[in,out] | SFVec3f | position_changed | b |
[in,out] | SFVec3f | size | b |
Rectangle2D
Container field: geometry
[in,out] | SFNode | metadata | |
[] | SFVec2f | size | |
[] | SFBoolean | solid |
ScalarBundle
Container field: children
[in,out] | MFNode | children | |
[in,out] | SFNode | metadata | |
[out] | MFFloat | value_changed |
Node ScalarBundle bundles multiple nodes which have an SFFloat field "value". When at least one of them changes, it sends an event with all the values as an MFFloat.
ScalarInterpolator
Container field: children
[in,out] | MFFloat | key | b |
[in,out] | MFFloat | keyValue | b |
[in,out] | SFNode | metadata | |
[in] | SFFloat | set_fraction | b |
[in,out] | SFFloat | value_changed | b |
Scope
Container field: children
[in] | MFFloat | addVector | |
[in] | SFBool | clear | |
[in,out] | SFNode | metadata | |
[in,out] | SFVec2f | size | |
[in,out] | SFFloat | timeWindow | |
[in,out] | MFNode | traceMaterial | |
[in,out] | MFFloat | vectorMax | |
[in,out] | MFFloat | vectorMin |
Node Scope is a geometry which displays one or several traces, scrolling continuously to the left. New data are appended to the right with input event addVector. The Scope geometry is a rectangle centered at 0 in the z=0 plane whose size is given by field size. Like Text nodes, no background is displayed. The value range and the material (color) of each trace are given by the corresponding elements of fields vectorMin, vectorMax and traceMaterial.
Script
Container field: children
[] | SFBool | directOutput | b |
[in,out] | SFNode | metadata | |
[] | SFBool | mustEvaluate | b |
[in,out] | MFString | url | b |
Shape
Container field: children
[in,out] | SFNode | appearance | b |
[in,out] | SFNode | geometry | b |
[in,out] | SFNode | metadata |
Sound
Container field: children
[in,out] | SFVec3f | direction | b |
[in,out] | SFFloat | intensity | b |
[in,out] | SFVec3f | location | b |
[in,out] | SFFloat | maxBack | b |
[in,out] | SFFloat | maxFront | b |
[in,out] | SFNode | metadata | |
[in,out] | SFFloat | minBack | b |
[in,out] | SFFloat | minFront | b |
[in,out] | SFFloat | priority | b |
[in,out] | SFNode | source | b |
[] | SFBool | spatialize | b |
Sphere
Container field: geometry
[in,out] | SFNode | metadata | |
[] | SFFloat | radius | b |
[] | SFBool | solid |
SphereSensor
Container field: children
[in,out] | SFBool | autoOffset | b |
[in,out] | SFString | description | |
[in,out] | SFBool | enabled | b |
[out] | SFBool | isActive | b |
[in,out] | SFNode | metadata | |
[in,out] | SFRotation | offset | b |
[out] | SFRotation | rotation_changed | b |
[out] | SFVec3f | trackPoint_changed | b |
SpotLight
Container field: children
[in,out] | SFFloat | ambientIntensity | b |
[in,out] | SFVec3f | attenuation | b |
[in,out] | SFFloat | beamWidth | b |
[in,out] | SFColor | color | b |
[in,out] | SFFloat | cutOffAngle | b |
[in,out] | SFVec3f | direction | b |
[in,out] | SFFloat | intensity | b |
[in,out] | SFVec3f | location | b |
[in,out] | SFNode | metadata | |
[in,out] | SFBool | on | b |
[in,out] | SFFloat | radius | b |
Switch
Container field: children
[in] | MFNode | addChildren | |
[] | SFVec3f | bboxCenter | |
[] | SFVec3f | bboxSize | |
[in,out] | MFNode | children | |
[in,out] | MFNode | choice | v |
[in,out] | SFNode | metadata | |
[in] | MFNode | removeChildren | |
[in,out] | SFInt32 | whichChoice | b |
Text
Container field: geometry
[in,out] | SFNode | fontStyle | b |
[in,out] | MFFloat | length | b |
[in,out] | SFFloat | maxExtent | b |
[in,out] | SFNode | metadata | |
[in,out] | MFString | string | b |
TextTexture
Container field: texture
[in,out] | SFNode | fontStyle | |
[in,out] | SFNode | metadata | |
[in,out] | SFVec2f | size | |
[in,out] | MFString | string |
Node TextTexture is a texture defined by text. The text is rendered with its font size (default: 1) in a rectangle whose size is specified by field size (default: 1 1), then stretched like other textures. Alignment is based on the whole rectangle, not the bounding box of the text; i.e. centered text is centered in the middle of the texture.
TextureCoordinate
Container field: texCoord
[in,out] | SFNode | metadata | |
[in,out] | MFVec2f | point | b |
TextureMatrixTransform
Container field: textureTransform
[in,out] | SFMatrix3f | matrix | |
[in,out] | SFNode | metadata |
Node TextureMatrixTransform can be used in field textureTransform of node Appearance in lieu of node TextureTransform. The texture transform is provided as a 3x3 matrix which describes the homogeneous transform of texture coordinates. It is more general than TextureTransform, which cannot describe shear transforms.
TextureTransform
Container field: textureTransform
[in,out] | SFVec2f | center | b |
[in,out] | SFNode | metadata | |
[in,out] | SFFloat | rotation | b |
[in,out] | SFVec2f | scale | b |
[in,out] | SFVec2f | translation | b |
TimeSensor
Container field: children
[in,out] | SFTime | cycleInterval | b |
[out] | SFTime | cycleTime | b |
[in,out] | SFBool | enabled | b |
[out] | SFFloat | fraction_changed | b |
[out] | SFBool | isActive | b |
[in,out] | SFBool | loop | b |
[in,out] | SFNode | metadata | |
[in,out] | SFTime | startTime | b |
[in,out] | SFTime | stopTime | b |
[out] | SFTime | time | b |
TimeTrigger
Container field: children
[in,out] | SFNode | metadata | |
[in] | SFBool | set_boolean | |
[out] | SFTime | triggerTime |
Torus
Container field: geometry
[in,out] | SFFloat | innerRadius | |
[in,out] | SFNode | metadata | |
[in,out] | SFFloat | outerRadius | |
[in,out] | SFBool | solid |
TouchSensor
Container field: children
[in,out] | SFString | description | |
[in,out] | SFBool | enabled | b |
[out] | SFVec3f | hitNormal_changed | b |
[out] | SFVec3f | hitPoint_changed | b |
[out] | SFVec2f | hitTexCoord_changed | b |
[out] | SFBool | isActive | b |
[out] | SFBool | isOver | b |
[in,out] | SFNode | metadata | |
[out] | SFTime | touchTime | b |
Transform
Container field: children
[in] | MFNode | addChildren | b |
[] | SFVec3f | bboxCenter | b |
[] | SFVec3f | bboxSize | b |
[in,out] | SFVec3f | center | b |
[in,out] | MFNode | children | b |
[in,out] | SFFloat | factor | |
[in,out] | SFNode | metadata | |
[in] | MFNode | removeChildren | b |
[in,out] | SFRotation | rotation | b |
[in,out] | SFVec3f | scale | b |
[in,out] | SFRotation | scaleOrientation | b |
[in,out] | SFVec3f | translation | b |
The value of new field factor is used to weight the effect of rotation, scale and translation:
- rotation
- the angle of rotation (fourth component) is multiplied by factor;
- scale
- each of the 3 components s is replaced by sign(s)*exp(log(abs(s))*factor) if s is nonzero;
- translation
- the translation vector is multiplied by factor.
- texture:none
- No texture (maximum intensity specified for the material everywhere).
- texture:grid
- Grid, with a 10% band at the bottom and left of the cell at maximum intensity, and the remaining area at 40% of the maximum intensity.
- texture:checkerboard
- 2x2 checkerboard, with the bottom-left and top-right squares at maximum intensity, and the remaining area at 40% of the maximum intensity.
- texture:spot
- Centered spot (disk) with maximum intensity, with an area of 50%, on a background at 40% of the maximum intensity.
- texture:trispot
- Two elliptic spots for triangular grid pattern. To obtain disks and a grid with main directions 60 degrees apart (its intended usage), the texture u axis should be stretched by a factor sqrt(3) (e.g. scale 1 1.732 in a TextureTransform node).
- texture:tennisball
- Line aimed to be used on a Sphere node to reproduce the motif of tennis balls.
TriangleSet2D
Container field: geometry
[in,out] | SFNode | metadata | |
[] | SFBoolean | solid | |
[in,out] | MFVec2f | vertices |
Viewpoint
Container field: children
[out] | SFTime | bindTime | b |
[] | SFString | description | b |
[in,out] | SFFloat | fieldOfView | b |
[out] | SFBool | isBound | b |
[in,out] | SFBool | jump | b |
[in,out] | SFNode | metadata | |
[in,out] | SFRotation | orientation | b |
[in,out] | SFVec3f | position | b |
[in] | SFBool | set_bind | b |
VisibilitySensor
Container field: children
[in,out] | SFVec3f | center | b |
[in,out] | SFBool | enabled | b |
[out] | SFTime | enterTime | b |
[out] | SFTime | exitTime | b |
[out] | SFBool | isActive | b |
[in,out] | SFNode | metadata | |
[in,out] | SFVec3f | size | b |
WorldInfo
Container field: children
[] | MFString | info | b |
[in,out] | SFNode | metadata | |
[] | SFString | title | b |
ImageTexture URL
Predefined image textures:
Scripts
Inline JavaScript is supported, with url starting with ecmascript:, javascript: or vrmlscript:.
Object Browser contains a custom method rk4 to integrate ordinary differential equations using Runge-Kutta order 4 with fixed time step:
Browser.rk4(state, t0, tFinal, maxTimeStep, opt);
Arguments:
- state
- Object which contains the state in any suitable format, including the time for time-variant systems. Individual state values can be given descriptive names or even grouped in sub-objects or vectors for large systems.
- t0
- Start time (typically the time of the last call to Browser.rk4)
- tFinal
- Final time (typically the current time)
- maxTimeStep
- Maximum time step, should be chosen to take into account the dynamics of the system (typically 2-5 times smaller than the fastest mode). The interval from t0 to tFinal is split into an integer number of steps not larger than maxTimeStep
- opt
- Object containing functions describing the system, in the following fields:
-
- getContStates
- function (state) retrieving as an array the continuous-time states to be integrated from state object
- setContStates
- function (state, contStateVec) setting continuous-time states in state object from an array
- setT
- function (t) setting the current time (can be undefined for time-independent systems)
- der
- function (state) calculating the derivative of the continuous-time states, returned as an array.
Example: simple pendulum
The current time is stored in the state object field t0 for convenience, even if the system is time-invariant.
// Simple pendulum, length L L = 1; g = 9.81; var opt = { getContStates: function (state) { return [state.theta, state.thetaDer]; }, setContStates: function (state, stateVec) { state.theta = stateVec[0]; state.thetaDer = stateVec[1]; }, der: function (state) { return [ state.thetaDer, -g/L * Math.sin(state.theta) - d * state.thetaDer ]; } }; state = {t0: 0, theta: 1, thetaDer: 0}; // Simulation until t Browser.rk4(state, state.t0, t, 0.01, opt); state.t0 = t;
Extended syntax
In addition to custom nodes, Calerga VR extends the syntax of the Classic VRML encoding.
Default field names
In Classic VRML encoding, the default container (default field name associated to each Node type as defined for X3D XML) can be omitted. Multiple values can be defined for MFNode fields. This also works with prototypes: a node referring to a prototype has the default container of its first child. Fields with a type different than SFNode or MFNode, or with a USE reference, must have an explicit field name.
Transform { rotation 1 0 0 1.58 Shape { Box { size 3 0.5 3 } Appearance { Material { diffuseColor 1 0 0 } } } Shape { Sphere {} Appearance { ImageTexture { url "texture:checkerboard" } } } }
Expressions
Expressions are a powerful extension to field references in prototype definitions and to routes. They can often replace simple scripts with a much more compact and more readable syntax.
In VRML Classic encoding, wherever IS name is permitted, the syntax (expr) stands for an expression which must be evaluated the first time the scene is rendered and when the values it refers to change.
In routes, ROUTE FROM srcNode.srcField FILTER (expr) TO destNode.destField replaces the value associated with srcNode.srcField with the result of the expression, where value refers to srcNode.srcField.
In XML encoding, expressions in <IS> elements are written as <connect nodeField="f" expression="expr"/>; filter expressions in routes are written as a filter="expr" attribute in <ROUTE> elements.
In JSON encoding, expressions in connect arrays are written as {"@nodeField":"f", "@expression":"expr"}; filter expressions in routes are written as a "@filter":"expr" field in ROUTE arrays.
The expression syntax is described below. It aims at simplicity and compactness.
Types
- number, compatible with all X3D scalar numbers: SFFloat, SFInt32, SFTime...
- boolean
- string
- node (reference to X3D fields), including null
- empty array, compatible with all MF* types
- flat 1D array of numbers, compatible with all numeric array-like X3D types (SFVec3f, SFColor, SFMatrix3f etc.) and their MF* versions
- flat 1D array of booleans
- flat 1D array of strings
- flat 1D array of nodes
Operators
- arithmetic: + - * / % ^ (power), + - also as prefix operators, + also for string concatenation
- comparison == != < > <= >=
- logical && ||
- conditional ?:
- 1D arrays [a,b,...]
- same precedence as JavaScript with parenthesized subexpressions
Functions
- trigonometry: sin cos tan asin acos atan atan2
- logarithms: log log10 exp
- miscellaneous math: abs round floor ceil sqrt
- logical: xor
- string: toFixed(x,n)
Arrays
Arrays are built by enclosing comma-separated values between brackets: [item1,item2,...]. The array type is defined only if the array is not empty. An array cannot contain items of different types.
Array indexing consists in getting a single scalar value from an array. The type of the scalar value is a number, a boolean, a string or a node, depending on the array type. The indexing syntax is array[index], where both array and index can be expressions. The first element has index 0. An out-of-bound index causes a run-time error.
Values
- literal numbers and strings with X3D syntax
- true false null pi (lowercase)
- prototype field names for initializeOnly and inputOutput
Example: led with boolean state
#X3D V3.3 utf8 PROTO Led [ # default size: same as Box inputOutput SFVec3f size 2 2 2 # default off color: dark gray inputOutput SFColor diffuseColor 0.2 0.2 0.2 # default on color: bright green inputOutput SFColor emissiveColor 0 1 0 # default state: off inputOutput SFBool state FALSE ] { Shape { geometry Box { size IS size } appearance Appearance { material Material { diffuseColor IS diffuseColor emissiveColor (state ? emissiveColor : [0, 0, 0]) } } } } Led { # off: dark red diffuseColor 0.3 0.1 0.1 # on: bright red emissiveColor 1 0 0 state TRUE }