So. You want to write VRML, do you? Well, it's not so hard really. What is confusing at first is which sort of VRML do you write? There are really two versions of VRML, but one of these has two names. Simple. Originally, there was VRML (Virtual Reality Modeling Language) 1.0. This was a very simplistic language, and after a while was revised into VRML 2.0, which changed the file structure and added a lot of new features, such as animation. VRML 1.0 is OK, but has been superseded now, so I'm not going to bother with it. VRML 2.0 was then submitted to the ISO/IEC for approval and standardisation. VRML97 is the outcome of that process, and is an ISO/IEC standard. VRML97 is practically identical to VRML 2.0, with a couple of minor changes in very small details. I'm going to teach you VRML97 in this tutorial, because that's what the reference material I have covers. This is to all intents and purposes identical to VRML 2.0, so you can assume they are the same thing. Right, now we know what we're talking about, lets get on with it.
The very first thing you need is a VRML browser, to view your worlds, as well as other peoples. I personally use Cosmo Player from Cosmo Software (Win95/NT). There are others available, though. Check out the links page for more info. Most well-known VRML browsers will operate as plugins for Netscape or Internet Explorer. There are also browsers available for most other operating systems. Take a look around the software companies or the VRML Repository for more information. Once you have your browser installed and set up, you can simply load VRML worlds as you would with any web page and look at them.
The next thing you need to do is create your own worlds. There are two ways of doing this. First, you could use one of the many VRML authoring tools, which are like 3D modelers in which you can build your world. For more info, see the The VRML Repository again. The way I do my VRML, which I prefer, is to code it by hand. This is taught in the tutorial, and is the method I concentrate on in this site. All you need for this is a text editor, such as notepad or wordpad. I personally would recommend the Programmer's File Editor, which is a very nice editor. Simply type in the code as shown, and save it as filename.wrl. You can then load this into your browser and take a look! One quick point: make sure to save the file as plain text, nothing else!
Working with raw VRML is all very well, but it can be difficult to create complex objects. To do this, you need to use either a higher-level VRML authoring tool, or a 3D modeling program. If you go for the latter option, you will probably need some kind of file translation program to convert between the modelers format and VRML. One very good free translator is Crossroads. Higher level VRML tools are available from many companies. Take a look on the links page for some of them.
The normal extension for VRML files is .wrl, though occasionally .wrz is used for compressed VRML. Browsers can read VRML files that are compressed with GZIP. These compressed files can use either the .wrz, .wrl.gz, or the standard .wrl extension. GZIP is fairly standard on UNIX systems, but you can get a PC or Mac version if you look around. A good way to compress your files is to use Chisel, which is a VRML validator and optimiser which can save GZIPped VRML. This is a good tool to have anyway for debugging your code, because nobody writes perfect VRML first time.
All internet documents have a MIME type. This tells the receiving end what it is going to get before it gets it. You probably won't need to worry about this, but just for information, the VRML MIME type is model/vrml. Alternatively, it can be x-world/x-vrml, but this is out of date now.
Once you've created your world, you need to publish it on the web so other people can look at it. For this you need some kind of ISP (Internet Service Provider). You can then use the space they give you to put your files on the web, just as you would a normal HTML file.
Right, now we can get down to some proper VRML. This tutorial is going to cover the text-based method of creating VRML worlds. If you want to create VRML with higher-level tools, like some kind of 3D program, you don't need a VRML tutorial. You just need a tutorial on how to use the tool you're using. That is NOT what this tutorial is for. This is for those of you who want to get straight to grips with the real thing, to get your hands dirty on real code. So, if you're ready, here we go!
The first thing to know is that all VRML files start with a header line, which is:
#VRML V2.0 utf8
This tells the browser that it's looking at a VRML file, and the version it's using. In this case, it's version 2.0. VRML is case-sensitive, so make sure that the capitalisation and so on is exactly the same as you see here. The utf8 part tells the browser which text string standard to use. VRML 1.0 had either ascii or utf8, but version 2 has only utf8, so best use that.
Any line that starts with a # character is a comment, and ignored by the VRML parser, so you can add comments to your files using it. The first line is an exception, and is read by the browser, but still has a # at the start. So, the following is valid VRML:
#VRML V2.0 utf8 #Floppy's VRML97 Tutorial Example File
The next thing you should remember is that VRML is case-sensitive, so you have to have the capitals in the right place all the time, which can be confusing until you get used to it.
Now we move on the the actual structure of a VRML file. A VRML world is made up of nodes, which are types of object. Inside these nodes, you find fields, which are properties of the object. Fields can be anything, from a size of a box, to another node inside the first. Nodes are written as follows:
Group { children [ ] }
This shows the Group node. This is the simplest node, and simply groups together other nodes. The node is written in the file by writing the node name (Group), and then a pair of curly braces. Inside these braces, we have the fields. In this case, we have the children field, which can contain other nodes. So, nodes can be nested inside one another in this way, giving a kind of hierarchy of nodes, sometimes referred to as the Scene Graph. A simple examples of nested nodes is shown below, using two group nodes, one inside the other.
Group { children [ Group { } ] }
Now this is a fairly pointless piece of VRML, but it shows how to group nodes together and how the nesting works. Now, this is all OK, but then it gets more complex. You see, not every node can go anywhere in the file. Some can only be placed in certain fields, and only a few can be used at the top level, like Group. However, we'll see this later on. For now, just get used to the idea of the scene graph, and nodes and fields.
One thing you must remember is that VRML is case-sensitive. Nodes tend to have capital letters at the beginning of their names (Group, Transform, IndexedFaceSet), while fields have lower-case letters at the start. They can still have capital letters in the middle of them though (children, translation, coordIndex).
Now you know how it all works, we can start looking at the different node types. Next time, we'll cover WorldInfo, and how to get a shape into your world.