VRML : Shapes
Generally speaking, in VRML the shapes can be split into 2 groups: 
"ready-made" shapes, and author-defined shapes.  The ready-made shape nodes 
are AsciiText, Cone, Cube, Cylinder, and Sphere.  
The author-defined shape nodes are IndexedFaceSet, IndexedLineSet, 
and PointSet.  All shapes are affected by the 
current cumulative transformation and rotation values.  All shapes are drawn
 using the most recent material definition.  It is very easy for 
a shape to end up in the wrong place unless you carefully use 
Separator nodes.  For info on the transformation and rotation
nodes, see the Transformations topic.  For info 
on the material nodes, see theMaterials and Separators
 topic.
Ready-Made Shapes
- AsciiText
- The AsciiText node produces characters from the ASCII character set.  
You specify the text under the stringparameter.  The first 
line of text appears with it's baseline at (0,0,0), with additional strings 
drawn below, with y decreasing bysize * spacing(the "size" 
value is set under theFontStylenode).  The
justificationparameter is used to state wether theLEFT, 
RIGHT, orCENTERof the string is located at x = 0.  Thewidth parameter gives a suggested width for the text, and 
it's default value is the natural width of the string.  A 0 for this 
parameter uses the natural width of the text.
 
| Parameter | Default Value | Data Type | 
|---|
 | string | "" | String |  | spacing | 1.0 | Float |  | justification | LEFT | Enumerated - LEFT | RIGHT | CENTER |  | width | 0 | Float |  
 
 Example: drawing the word "hello".
 
AsciiText {
	string "hello"
}
 
- Cone
- This creates a cone with it's central axis lying along the y axis.  The 
bottomRadiusparameter sets the radius of the bottom of the 
cone.  Theheightparameter sets the height, from apex to 
base, of the cone.  Thepartsparameter defines which parts of 
the cone are drawn.  The Cone is always drawn with it's center at (0,0,0), 
so use transformations and rotations to get it to where it is wanted.  The 
apex of the cone is by default at the top (i.e. +ve y), and the default 
height is 2, making the base of the cone at y = -1.
 
| Parameter | Default Value | Data Type | 
|---|
 | bottomRadius | 1.0 | Float |  | height | 2.0 | Float |  | parts | ALL | Enumerated - ALL | BOTTOM | SIDES |  
 
 Example: a cone 0.5 units tall, and with radius of 2 (very flat!).
 
Cone {
	bottomRadius 2
	height 0.5
}
 
- Cube
- Creates a cuboid with each face parallel to one of the axes. The 
width, height, and depthparameters control the 
dimensions of the object.  The cube will be centered at (0,0,0).  The 
default dimensions of the cube are 2 in each dimension (i.e. from -1 to +1 
in each direction).  As with all objects, use transformations and rotations 
to get the cube where you want it.
 
| Parameter | Default Value | Data Type | 
|---|
 | depth | 2.0 | Float |  | height | 2.0 | Float |  | width | 2.0 | Float |  
 
 Example: A concrete slab (large and thin cuboid).
 
Cube {
	depth 10
	height 0.5
	width 10
}
 
- Cylinder
- This node creates a cylinder (or tube) centered on the y axis.  The 
heightparameter defines the height of the cylinder (or length 
of the tube).  Theradiusparameter defines the radius of the 
cylinder (or how fat the tube is).  Thepartsparameter 
selects which parts of the cylinder are to be draw, selecting from
SIDES, TOP, BOTTOM, and ALL.  TheTOPwill 
be the "cap" at the positive y end.  The cylinder is drawn centered at 
(0,0,0), and has a default height of 2 (i.e. from y = -1 to y = +1), and 
default radius of 2.
 
| Parameter | Default Value | Data Type | 
|---|
 | height | 2.0 | Float |  | parts | ALL | Enumerated - ALL | BOTTOM | SIDES | TOP
 |  | radius | 1.0 | Float |  
 
 Example: a coin (a very flat, wide cylinder).
 
Cylinder {
	height 0.1
	radius 2
}
 
- Sphere
- Draws a sphere (or ball) centered at (0,0,0).  The radiusparameter specifies the radius of the sphere.  Obviously, a sphere does not 
look differant if rotated, so a single transformation is all that is needed 
to get it into the desired position.
 
| Parameter | Default Value | Data Type | 
|---|
 | radius | 1.0 | Float |  
 
 Example: a marble.
 
Sphere {
	radius 0.4
}
 
Author-Defined Shapes
Of the 3 available author-defined shapes, only the first two are of any 
practical use.  You should note that creating objects using these functions 
is not easy, and will require a fair amount of tweaking until it works.  
All three methods use "points" that must be defined before the methods are 
used.  To do this, you must use the Coordinate3 function as 
described below.
- Coordinate3
- Defines a series of points in 3-dimensional space, for use with one of 
methods below.  You should note that this node doesn't actually produce any 
visable result, but must be used with IndexedFaceSet, IndexedLineSet, 
or PointSetto actually draw a shape.  The first 
coordinate has in index of 0, the 2nd has an index of 1 etc.  The last 
coordinate therefore has an index of (n - 1).  If you use this node more 
than once, then upon reaching the second occurance, all the points in the 
first set will be replaced by those in the second set, not appended to.  
The first set is therfore lost.  Remember that if you are defining 
more that one point, you must enclose the list in square brackets.
 
| Parameter | Default Value | Data Type | 
|---|
 | point | 0 0 0 | MVector3D |  
 
 Example: Define the coordinates of a triangle.
 
Coordinate3 {
	point [0 0 0, 1 2 0, 2 0 0]
}
 
- IndexedFaceSet
- This node is arguably the most useful of the 3 available author-defined 
shapes.  This node builds a set of polygon faces using the coordinates 
defined in the Coordinate3node.  You achieve this by 
specifying the corners of each polygon, using the index of the point as 
defined in theCoordinate3node.  To end each polygon, use an 
index of -1.  For example, to build a face from the 1st, 2nd, 8th, and 11th 
points as defined in aCoordinate3declaration, you would add 
this line under thecoordIndexparameter :
  coordIndex [0, 1, 7, 10, -1]
 There are 3 other parameters that can be used with this node, but they are
excluded here, basically because they are not that important or useful.
 
| Parameter | Default Value | Data Type | 
|---|
 | coordIndex | 0 | MLong |  
 
 Example: Draw the triangle defined inCoordinate3.
 
Coordinate3 {
	point [0 0 0, 1 2 0, 2 0 0]
}
IndexedFaceSet {
	coordIndex [0, 1, 2, -1]
}
 
- IndexedLineSet
- Similar to IndexedFaceSet, except that instead of 
producing faces/polygons, this produces "polylines".  This basically means 
a wire-frame version of whatIndexedFaceSetproduces.  Apart 
from it's name, the node has exactly the same parameters, and behaves in 
the same way.  Again, three unimportant and relatively complicated 
parameters have been left out.
 
| Parameter | Default Value | Data Type | 
|---|
 | coordIndex | 0 | MLong |  
 
 Example: Draw a wire-frame version of the triangle drawn above.
 
Coordinate3 {
	point [0 0 0, 1 2 0, 2 0 0]
}
IndexedLineSet {
	coordIndex [0, 1, 2, -1]
}
 
- PointSet
- I can't think of any useful purpose for this node, and under the 
Netscape plugin, it produces no visable output.  This node represents a set 
of points at the coordinates in the most recent Coordinate3statement.  ThestartIndexparameter defines the index of the 
first point to plot.  ThenumPointsparameter defines how many 
points are to be plotted.  A value of -1 here uses all the available points.
 
| Parameter | Default Value | Data Type | 
|---|
 | startIndex | 0 | Long |  | numPoints | -1 | Long |  
 
 Example: Plot the corners of the triangle.
 
Coordinate3 {
	point [0 0 0, 1 2 0, 2 0 0]
}
PointSet {
	startIndex 0
	numPoints -1
}
 
 Next Topic (Cameras and Lights)
Next Topic (Cameras and Lights)
 Previous Topic (Data Types)
Previous Topic (Data Types)
 Back to the VRML Reference
Back to the VRML Reference
 Back to the Main Page
Back to the Main Page
©Tom Thurston, 1997
Please feel free to use and redistribute this NONcommercially!