<table bgColor="#ffffff" border="0" width="100%">
<tbody>
<tr>
<td align="right">
<a href="index.html"><img title="MaterialModulator prototype demonstration" alt="MaterialModulator prototype demonstration" border="0" hspace="0" src="MaterialModulator.png" height="112" align="middle"/></a>
</td>
<td align="left">
</td>
<td align="left">
<a href="index.html"><img title="ViewFrustum prototype demonstration" alt="ViewFrustum prototype demonstration" border="0" hspace="0" src="ViewFrustumObliqueView.png" width="253" height="112" align="middle"/></a>
</td>
</tr>
</tbody>
</table>
<p>
Prototypes let authors define a new X3D node made up of other X3D nodes,
extending the language for any scenes in new and interesting ways.
</p>
<p>
X3D extensibility includes a tremendous capability:
authors can create prototype declarations and instances to define new X3D nodes.
This is a powerful feature that puts the full power of this graphics language in the hands of Web authors.
Prototype templates are themselves built using
<a href="https://www.web3d.org/x3d/content/X3dTooltips.html#ProtoDeclare" target="X3dTooltips" title="X3D Tooltip">ProtoDeclare</a>
definitions or corresponding
<a href="https://www.web3d.org/x3d/content/X3dTooltips.html#ExternProtoDeclare" target="X3dTooltips" title="X3D Tooltip">ExternProtoDeclare</a>
references.
ProtoDeclare field definitions are found in the
<a href="https://www.web3d.org/x3d/content/X3dTooltips.html#ProtoInterface" target="X3dTooltips" title="X3D Tooltip">ProtoInterface</a>
tag, which can include multiple
<a href="https://www.web3d.org/x3d/content/X3dTooltips.html#field" target="X3dTooltips" title="X3D Tooltip">field</a>
declarations that define a name, initial value (if appropriate),
<a href="https://www.web3d.org/x3d/content/X3dTooltips.html#accessType" target="X3dTooltips" title="X3D Tooltip">accessType</a>
(inputOnly, outputOnly, initializeOnly and inputOutput)
and
<a href="https://www.web3d.org/x3d/content/X3dTooltips.html#type" target="X3dTooltips" title="X3D Tooltip">type</a>
for each field.
The
<a href="https://www.web3d.org/x3d/content/X3dTooltips.html#IS" target="X3dTooltips" title="X3D Tooltip">IS</a>
and
<a href="https://www.web3d.org/x3d/content/X3dTooltips.html#connect" target="X3dTooltips" title="X3D Tooltip">connect</a>
statements allow an internal field inside the ProtoBody to directly relay values and events via the exposed ProtoInterface field.
</p>
<p>
The node type of each ProtoDeclare is defined by the first node inside the
<a href="https://www.web3d.org/x3d/content/X3dTooltips.html#ProtoBody" target="X3dTooltips" title="X3D Tooltip">ProtoBody</a>
declaration.
Copies of a new node are created by name with
<a href="https://www.web3d.org/x3d/content/X3dTooltips.html#ProtoInstance" target="X3dTooltips" title="X3D Tooltip">ProtoInstance</a>
nodes.
Default values for ProtoInstance fields can be overridden with
<a href="https://www.web3d.org/x3d/content/X3dTooltips.html#fieldValue" target="X3dTooltips" title="X3D Tooltip">fieldValue</a>
initializations.
A ProtoInstance node can replace any other node in the scene graph having the same node type.
</p>
<p>
The supporting
<a href="https://x3dGraphics.com/slidesets/X3dForWebAuthors/Chapter14Prototypes.pdf" target="X3dChapterSlideset">Chapter 14 slideset</a>
and course videos
(<a href="https://www.movesinstitute.org/Video/Courses/X3dForWebAuthors/X3dForWebAuthorsVideo.html#14" target="X3dChapterVideos">NPS</a>,
<a href="https://www.youtube.com/playlist?list=PLuSIsM-86simQ4u2XxKZS7PU381BfFjIk" target="X3dChapterYouTubeVideos">YouTube</a>)
for <i>X3D for Web Authors</i> are available online via
<a href="https://x3dGraphics.com" target="_blank">X3dGraphics.com</a>.
</p>
<p>
Also available:
<a href="https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.html" target="_blank">X3D Scene Authoring Hints</a>
for
<a href="https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.html#InlinesPrototypes" target="_blank">Inline Scenes and Prototype Templates</a>
and
<a href="https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.html#urls" target="_blank">URL Links</a>.
</p>