
[NOTE: Globally replace 6.23
with the correct section number.]
![]()
This
subclause describes the LatticeXvl component of this International Standard. Table
6.23.1 provides links to the major topics in this subclause.
Table 6.23.1: Topics
in this subclause
[NOTE: Not sure if this is what you are looking for. Please advise.]
LatticeXvl
is an extension to X3D that enables the use of Lattice surfaces in X3D scenes. Since these surfaces are generated parametrically,
only a small amount of data need be provided for describing complex surfaces. This provides a highly compressed format for
storage and transmission of geometric data.
The Lattice structure
consists of a Lattice Surface and a Lattice Mesh. A Lattice Surface
is free-form surface data represented by Gregory patches. A Lattice Mesh
is a polygon mesh that consists of faces, edges, vertices and rounding weights.
These meshes have the same topology. Based on an invertible rounding algorithm, a Lattice Mesh can be
transformed into a Lattice Surface and vice versa.


This figure illustrates a Lattice structure. The feft model is Lattice Mesh and the right
model is Lattice Surface. Both models
share the same topology.
LatticeXvl contains a
single geometry node, XvlShell, which encapsulates all of the attributes necessary
to specify a Lattice structure. This includes
Lattice Mesh data such as face and edges and tesselation data such as shell
type and rounding weight.
LatticeXvl supports two shell types: POLYGON_MESH
and LATTICE_MESH. POLYGON_MESH shells
are Lattice Meshes, that is, Lattice Shells without rounding. LATTICE_MESH shells are Lattice Shells with
rounding.
|
Shell Type |
LatticeXvl Data |
|
Representation on
Browser |
|
POLYGON_MESH (Polygon Mesh without rounding) |
|
|
|
|
LATTICE_MESH (Polygon Mesh with rounding) |
|
|
|
LatticeXvl supports rounding weights on edges and vertices.
The rounding weight of a component specifies how closely that component
attracts the underlying surface.
|
|
|
|
|
|
|
|
Table
6.23.3.1 lists the nodes of the LatticeXvl component.
Table 6.23.3.1: Index
of LatticeXvl component nodes
XvlShell : GeometryNodeType {field [] SFString shellType # initial value: “LATTICE_MESH”;
# valid values: “LATTICE_MESH”, “POLYGON_MESH”
field [] SFInt32 numberOfDivisions # initial value: 4; valid values: 2,4,6,8,…
field [] SFNode coord # initial value: NULL
field [] SFNode texCoord # initial value: NULL
field [] MFFloat vertexRound # initial value: []
field [] MFInt32 edgeBeginCoordIndex # initial value: []; valid range: [-1, inf)
field [] MFInt32 edgeEndCoordIndex # initial value: []; valid range: [-1, inf)
field [] MFFloat edgeRound # initial value: []
field [] MFVec3f edgeBeginVector # initial value: []
field [] MFVec3f edgeEndVector # initial value: []
field [] MFInt32 faceCoordIndex # initial value: []; valid range: [-1, inf)
field [] MFInt32 faceTexCoordIndex # initial value: []; valid range; [-1, inf)
field [] MFInt32 faceEmpty # initial value: []
field [] MFInt32 faceHidden # initial value: []
}
The XvlShell
node describes a LatticeXvl surface. An
XvlShell node defines a polygonal mesh of faces and a set of tesselation
parameters. It defines the faces in the
same way as an IndexedFaceSet – as sets of coordinate indexes referencing
vertices in a child Coordinate node. The
tesselation parameters include type of interpolation (smooth or polygonal),
rounding weights (on faces, edges and vertices), and number of divisions. The XvlShell may optionally include a TextureCoordinate
child node and texture coordinate values that are interpolated across the LatticeXvl
surface.
The
XvlShell fields are as follows:
·
shellType specifies the type of interpolation. Setting shellType to “LATTICE_MESH” generates
a smoothly interpolated LatticeXvl surface, while “POLYGON_MESH” turns off
interpolation and merely returns the given polygonal mesh.
·
numberOfDivisions specifies how many times to subdivide each edge in the
mesh. It should be a positive even
integer. A value of 2 will yield 4
patches per face, 4 will yield 16 patches per face, etc.
·
vertexRound specifies the rounding weights for each vertex. If NULL,
each vertex is given the default rounding weight (1.0).
·
edgeBeginCoordinateIndex and edgeEndCoordinateIndex specify the begin and
end coordinates for each edge.
·
edgeRound specifies the rounding weights for each edge. If NULL, each edge is given the default
rounding weight (1.0).
·
edgeBeginVector and edgeEndVector specify the begin and end surface
normal vectors for each edge. If NULL,
each edge is given the default surface normal vector (0,1,0) for its beginning
and end.
·
faceCoordIndex specifies the mesh faces.
It is similar to IndexedFaceSet:coordIndex.
·
faceTexCoordIndex specifies the texture coordinates of the mesh faces. It is similar to
IndexedFaceSet:texCoordIndex.
·
faceEmpty specifies the solidity of each face. A value of True specifies that the given
face is empty – that is, that it is a hole in the surface; while a value of
False specifies that the face is solid – that is, that it is part of the
surface. If NULL, all faces are assumed
to be solid.
·
faceHidden specifies the visibility of each face. A value of True specifes that the given face
is visible; False specifies that it is invisible. If NULL, all faces are assumed to be visible.
The
LatticeXvl component provides 1 level of support as specified in Table
6.23.4.
|
Level |
Prerequisites |
Nodes/Features |
Support |
|
1 |
Core 1 |
|
|
|
|
|
XvlShell |
All fields |
[NOTE:
Are the prerequisites correct? XvlShell
is a geometry node that uses coordinates and texture coordinates.]
![]()