The *xDimension* and *zDimension* fields indicate the number
of elements of the grid *height* array in the X and Z directions.
Both *xDimension* and *zDimension* must be greater than or
equal to zero. The vertex locations for the rectangles are defined by
the *height* field and the *xSpacing* and *zSpacing*
fields:

- The
*height* field is an *xDimension* by *zDimension*
array of scalar values representing the height above the grid for
each vertex.
- The
*xSpacing* and *zSpacing* fields indicates the distance
between vertices in the X and Z directions respectively, and shall
be > 0.

Thus, the vertex corresponding to the point P[i, j] on the grid is
placed at:

P[i,j].x = xSpacing × i
P[i,j].y = height[ i + j × xDimension]
P[i,j].z = zSpacing × j
where 0 <= i < xDimension and 0 <= j < zDimension,
and P[0,0] is height[0] units above/below the origin
of the local coordinate system

The *set_height* eventIn allows the height MFFloat field to be
changed to support animated ElevationGrid nodes.

The *color* field specifies per-vertex or per-quadrilateral colours
for the ElevationGrid node depending on the value of *colorPerVertex*.
If the *color* field is NULL, the ElevationGrid node is rendered
with the overall attributes of the Shape node enclosing the ElevationGrid
node (see "2.14 Lighting model").

The *colorPerVertex* field determines whether colours specified
in the *colour* field are applied to each vertex or each quadrilateral
of the ElevationGrid node. If *colorPerVertex* is FALSE and the
*color* field is not NULL, the *color* field shall specify
a Color node containing at least (*xDimension-1)*×(*zDimension-1)*
colours; one for each quadrilateral, ordered as follows:

QuadColor[i,j] = Color[ i + j × (xDimension-1)]
where 0 <= i < xDimension-1 and 0 <= j < zDimension-1,
and QuadColor[i,j] is the colour for the quadrilateral
defined by height[i+j×xDimension],
height[(i+1)+j×xDimension],
height[(i+1)+(j+1)×xDimension] and
height[i+(j+1)×xDimension]

If *colorPerVertex* is TRUE and the *color* field is not
NULL, the *color* field shall specify a Color node containing at
least *xDimension *× *zDimension* colours,
one for each vertex, ordered as follows:

VertexColor[i,j] = Color[ i + j × xDimension]
where 0 <= i < xDimension and 0 <= j < zDimension,
and VertexColor[i,j] is the colour for the vertex defined
by height[i+j×xDimension]

The *normal* field specifies per-vertex or per-quadrilateral
normals for the ElevationGrid node. If the *normal* field is NULL,
the browser shall automatically generate normals, using the *creaseAngle*
field to determine if and how normals are smoothed across the surface
(see "2.6.3.5 Crease angle field").

The *normalPerVertex* field determines whether normals are applied
to each vertex or each quadrilateral of the ElevationGrid node depending
on the value of *normalPerVertex*. If *normalPerVertex* is
FALSE and the *normal* node is not NULL, the *normal* field
shall specify a Normal node containing at least (*xDimension-1)*×(*zDimension-1)
*normals; one for each quadrilateral, ordered as follows:

QuadNormal[i,j] = Normal[ i + j × (xDimension-1)]
where 0 <= i < xDimension-1 and 0 <= j < zDimension-1,
and QuadNormal[i,j] is the normal for the quadrilateral
defined by height[i+j×xDimension],
height[(i+1)+j×xDimension], height[(i+1)+(j+1)×xDimension]
and height[i+(j+1)×xDimension]

If *normalPerVertex* is TRUE and the *normal *field is not
NULL, the *normal *field shall specify a Normal node containing
at least *xDimension *× *zDimension* normals;
one for each vertex, ordered as follows:

VertexNormal[i,j] = Normal[ i + j × xDimension]
where 0 <= i < xDimension and 0 <= j < zDimension,
and VertexNormal[i,j] is the normal for the vertex
defined by height[i+j×xDimension]

The *texCoord* field specifies per-vertex texture coordinates
for the ElevationGrid node. If *texCoord* is NULL, default texture
coordinates are applied to the geometry. The default texture coordinates
range from (0,0) at the first vertex to (1,1) at the last vertex. The
S texture coordinate is aligned with the positive X-axis, and the T
texture coordinate with positive Z-axis. If *texCoord* is not NULL,
it shall specify a TextureCoordinate node containing at least (*xDimension)*×(*zDimension)*
texture coordinates; one for each vertex, ordered as follows:

VertexTexCoord[i,j]
= TextureCoordinate[ i + j × xDimension]
where 0 <= i < xDimension and 0 <= j < zDimension,
and VertexTexCoord[i,j] is the texture coordinate for the
vertex defined by height[i+j×xDimension]

The *ccw*, *solid*, and *creaseAngle* fields are described
in "2.6.3 Shapes and geometry."

By default, the quadrilaterals are defined with a counterclockwise
ordering. Hence, the Y-component of the normal is positive. Setting
the *ccw* field to FALSE reverses the normal direction. Backface
culling is enabled when the *solid* field is TRUE.

See Figure 3-20 for a depiction of the ElevationGrid node.

#### Figure 3-20: ElevationGrid node