Die Erweiterbarkeit von VRML wird möglich durch das sogenannte Prototyping. Es erlaubt die Definition von neuen Nodes. Eine Prototypdefinition ist wie folgt aufgebaut:
Die Syntax ist folgendermaßen:
PROTO prototypname [ eventIn eventtypname name
eventOut eventtypname name
exposedField feldtypname name standardwert
field feldtypname name standardwert
...
]
{
Mehrere oder keine Routes und Prototypen
Erste Node (Definiert den Nodetyp des Prototyps)
Mehrere oder keine Nodes (jedes Typs), Routes und Prototypen
}
Hierzu ein Beispiel:
#VRML V2.0 utf8
##########################################################
# Hier kommt der Prototyp
##########################################################
PROTO SphereCone [ field SFFloat radius 2.0
field SFFloat height 5.0
field SFNode sphereApp NULL
field SFNode coneApp NULL ]
{
Transform
{
children [ Shape
{
appearance IS sphereApp
geometry Sphere { radius IS radius }
}
Shape
{
appearance IS coneApp
geometry Cone { height IS height }
}
]
}
}
##########################################################
# ... und ab hier wird er verwendet
##########################################################
Transform
{
translation 15 0 0
children SphereCone
{
radius 5.0
height 20.0
sphereApp Appearance { material Material { ... } }
coneApp Appearance { texture ImageTexture { ... } }
}
}
Transform
{
translation -10 0 0
children SphereCone
{ # Hier werden die Standardwerte benutzt
sphereApp Appearance { texture ImageTexture { ... } }
coneApp Appearance { material Material { ... } }
}
}
Es ist auch möglich auf Prototypen in anderen Dateien zuzugreifen
EXTERNPROTO prototypname [ eventIn eventtypname name
eventOut eventtypname name
exposedField feldtypname name
feldtypname feldtypname name
...
]
"URL/URN" (, "URL/URN", "URL/URN", ... )
Der Prototyp wird dann in der Datei gesucht, auf die durch die URL oder URN verwiesen wird. Werden mehrere URL's oder URN's angegeben, werden sie der Reihenfolge nach durchsucht.