It is not just HyperText,
And it is more than HyperMedia.
Technology gives us HyperMultiMedia.

November 16, 1998 (11/19/98). I have been working on VRML, mainly adding material to the VRML Lighting and Behaviors section.
The best learning I am doing is about the basic syntax of VRML. Since I have limited my reading to the "free" materials, I have no idea whether I am using anyone else's ideas, I am just treating them as great ideas of my own.

First, if you read the VRML spec, the syntax descriptions include the full and complete syntax for each node. The description of the IndexedFaceSet follows:

IndexedFaceSet { 
  eventIn       MFInt32 set_colorIndex
  eventIn       MFInt32 set_coordIndex
  eventIn       MFInt32 set_normalIndex
  eventIn       MFInt32 set_texCoordIndex
  exposedField  SFNode  color             NULL
  exposedField  SFNode  coord             NULL
  exposedField  SFNode  normal            NULL
  exposedField  SFNode  texCoord          NULL
  field         SFBool  ccw               TRUE
  field         MFInt32 colorIndex        []        # [-1,INF)
  field         SFBool  colorPerVertex    TRUE
  field         SFBool  convex            TRUE
  field         MFInt32 coordIndex        []        # [-1,INF)
  field         SFFloat creaseAngle       0         # [0,INF)
  field         MFInt32 normalIndex       []        # [-1,INF)
  field         SFBool  normalPerVertex   TRUE
  field         SFBool  solid             TRUE
  field         MFInt32 texCoordIndex     []        # [-1,INF)

So there is quite a bit of information in there - 18 lines of syntax, catagories of syntax, limits of values, and the defaults. In short, this is most of the information you will need to develop indexedFaceSet nodes, as well as a lot of the information you need to know to build a VRML viewer. Although much of this is now beginning to make sense to me, I think I need a simple quick reference for the relatively simple work I am doing now. So, I try to simplfy.

My first simplification is to realize that for the level I am working, I don't care about the external interface. All I am doing now is to use the node to draw something. This means I don't have to worry about the eventIn (or eventOut) information. Next, since I am having some success dealing with the numbers without caring what type of numbers they are, I don't care if a particular field is an SFBool or an SFNode. Also, I see that ALL the characters I need to write a line of code are not there. Finally, the list of fields does not represent the sequence that they are typically used. With these considerations, I derive this presentation of the basic syntax.

IndexedFaceSet { # Defaults 
 ccw TRUE 
 convex TRUE 
 creaseAngle 0  
 solid TRUE 
 coord Coordinate { point [ NULL ] }
 coordIndex [ NULL ] 
 color Color { color [ NULL ] } 
 colorPerVertex TRUE 
 colorIndex [ NULL ] 
 texCoord TextureCoordinate { point [ NULL ] } 
 texCoordIndex [ NULL ] 
 normal Normal { vector [ NULL ] } 
 normalPerVertex TRUE 
 normalIndex [ NULL ]  
This is then, the first level of reference I need to draw an indexedFaceSet. The fields that relate to each other are listed in order, the geometery, the color, the texture, and the normal.
Notice that all fields have a certain default. For example, ccw TRUE. This means that ccw will be automatically set TRUE even if you do not include the field, unless you include a specific ccw FALSE.
The NULL symbol is used to identify the field value if the line is not included in the source. For example if you do not include the texCoordIndex line, it's field is NULL. This was breakthrough for me because in my earlier days, I was confused by the fact that not all fields were included, and thus I had a problem seeing patterns of the statements. Notice that field descriptions include all the characters required for the field. For example, the coord field must include all the syntax
coord Coordinate { point [ NULL ] }
Recognizing this also helped me understand the syntax because I could see that the purpose of the field was to define each individual point, or vertex.

Now I needed some notes to remind me about the nature of the values I plug into these fields. For me, these notes need to take the form of simple memory aids that take for granted I had learned the material once and just needed a little kick and possibly a working example that demonstrates the hard-to-recall details of the implementation. Adding these notes, we have this:
IndexedFaceSet { # Defaults                # IndexedFaceSet Notes 
 ccw TRUE 
 convex TRUE 
 creaseAngle 0  
 solid TRUE 
 coord Coordinate {point[NULL] }            #  [ x y z, ... ]
 coordIndex [NULL]                          #  [v1 v2 v3 ... -1, ...]
 color Color {color [NULL] }                #  [ r g b, ... ]
 colorPerVertex TRUE                        #  FALSE = Color per Face 
 colorIndex [NULL]                          #  If NULL, uses coordIndex 
 texCoord TextureCoordinate {point [NULL]}  #  If NULL, uses coord 
 texCoordIndex [NULL]                       #  If NULL, uses coordIndex 
 normal Normal {vector[NULL] }              #  If NULL, uses coord 
 normalPerVertex TRUE 
 normalIndex [NULL]                         #  If NULL, uses coordIndex 
Of course these are not all the indexedFaceSet memory aids I need, and I will evolve this approach, but there is important information here. I can remember that the coord field contains sets of x y z coordinates, and from that I can remember that the coordIndex field contains sets of connected vertices, with each set separated by a -1. Not all the gotchas are in the notes, but I can tell that if i do not include the colorIndex, the values in the coordIndex field will be used.

Concerning the original notes that defined the range of values each field can accept, I notice that the infinity symbol is used to represent a limit of an acceptable range. In reality, this means that I can use a very large number, but not infinity.
For example, the description for coordIndex showed the range from-1 to infinity. This confused me until I saw enough real usage to see that the field was a list of integers ranging from 0 to the number of vertices defined in the coord field and -1 is just a special case used to terminate each connected vertex set.
Then I learn that for r g b color values, the only valid numbers are 0 to 1, inclusive. Finally, I see that while a very large number can be used to define the creaseAngle, 2pi radians are really the biggest meaniful number.
Since I can remember all this, or recall it from a simple example, I don't need to include it.

To see how I am using this, please look at the section of this site called VRML Lighting and Behaviors. I am in the process of creating a personal memory aid for each of the major nodes, and have included them in the VRML scene of the node example. The IndexedFaceset example is shown from the Key viewpoint at With IndexedFaceSet Key.

To make this site more accessible to me and, of course, you, I have built a simple index at Summary of Site Contents .
I know that because I am working to learn some uses of VRML this index should be a 3D experience, and that is forthcoming someday.

October 03, 1998. So it is now finally sinking in.
Summer is over.
Two bits of showers these last few days, and cloudy skies greet me this Monday morning.
Now the Sun begins to show.
I have set most of the clocks and the Moon will be full soon, a little late for Halloween.

We took a very nice trip to the bay to see Fleet Week featuring the Blue Angels and have a few pictures at
As you can see, I am still learning how difficult it is to be an adequate photographer.

Examples have not yet made it into hmmJoe's Garage, but I am learning something about
VRML Extrusions.
All ya gotta do to extrude is:
set the x z (y=0.0) vertices of the planar polygon cross section you wish to extrude.
set the x y z coordinate of each spine point along the path you wish to extrude the cross section,
set the x z scale at each spine point, and
set the x y z rad Orientation at each spine point.
Then you can define other nice parts, like end caps.

Really, the only real tricky point is that each
has the same data and is just like the
you already use.
Each orientation affects only the placement of the current crossSection.
The crossSection is transformed to the current spine point,
rotated to the defined orientation,
then a set of polygons connect the previous and new cross section vertices.

When you have done this, then the viewer will build a reasonable indexed face set that probably looks like the crossSection you drew, pulled to each spine point, with the scale and orientation you set at each spine point.

Doesn't it sound easy?
Well, it is for the simple individual constructions this feature is capable of achieving. The fun part is figuring out the shape of and where to put these wonderful extrusions (and of couse the equally wonderous intrusions).
I am showing my small experiments as part of the VRML Lighting and Behaviors sequence at . .Extrusions

Another interesting trip to SF happened for the purpose of seeing a very nice show put on by AVID, Apple, and VMIVideo. They gave a presentation about the Avid/Apple combo that was very impressive as far as the capabilities of a video design and production system. It is amazing what Pro-level video tricks can be done with what really is a "desktop" system.

September 15,1998. For those of you waiting to find out how the upgrade to wmspubs002 is going, I am happy. The only thing I am really missing for this particular box is Power Management. The thing doesn't know how to be in Standby. The monitor goes to a good state in two steps, and the disks shut down, but there is no real standby mode. The good part is that the screen saver sounds continue.
Due to the general stock market performance over the period of purchase and integration, I went for a non-agp mb and simple 2MB ATI pci graphics acceleration. With the standard win98, this combo is very acceptable for all but moving 3D applications. Of course it shows that AGP is completely necessary for VRML, so, with a few more days of decent mutual fund performance, wmspubs003 will get (at least) minimum AGP. Last night I updated a .wrl by using the simplist possible method of file size compression.
Click on my daughter's sphere in the Family Tree, or look at
This simplist possible method of file size compression is to edit the file to get rid of all (well, not really all) of the spaces and cr/lfs used to format the file. Since the file started in VRCreator the ascii file was in a nice form for reading, but would you believe? The file shrunk from 117934 to 72504 "just" by changing the format. Please take a look at the source and tell me what you think. There are six different typical mvc jpegs, instead of sixty possible, in this little show. September 6,1998. Update to the SFtrip.wrl location -
click on the Recent Business-Related Trips link on the home page,
or look at
to see the collection.

September 4,1998. What!!! When a friend wrote to say he couldn't see in Joe's Garage, along with a friendly response I replied about how I hadn't been there for a while either, being temporarily busy with additional research, and how he would need nearly the latest and greatest and some luck, cooperation from the firewall, and probly have to kick it few times to get it loaded and operating, but hey...
Now I am amazed to find that I haven't visited this text for over a month. I'm hoping that the reason I haven't heard back is the same for him as for me....It's SUMMER!!!!

But a neighbor tells about how he can't see it for a different reason. That computer just won't do it. This reminds me that my Grandson is in the same situation. The little 486 that his Uncle left the family plays his favorite Winnie the Pooh story pretty good, but no way is he going to do Grampa Joe hypermultimedia.
You can imagine my response when this finally sinks in.
Luckily there is an old 486 around here so I decide to throw some money at the problem and upgrade this chassis with a current intel/ms combo as practice, then, if it works, do the same to the other. Then the stock market crashed and I changed strategy slightly to try it with the least expensive real upgrade I could find.
Maybe I could have done little better on the price of some pieces, and maybe I don't really need everything I added, but now I am watching the 16MB Win98update load. I took some pictures and will publish the story soon. In the meantime, after some simple tests, I say Do It! Prices are likely to drop further, but your time is worth something.

Material that didn't pass through the garage this last month includes a new (for me) treatment of the PhotoCube idea. Click on my daughter's sphere in the Family Tree, or look at
What I have done is place photos on surfaces of cubes, added some behaviors, and anchors. I know this takes a long time to load because the main content is a bunch of jpegs, but when it is running you can click on the pic to see the full-size version immediately. I think this is really neat and if everything is already in cache, it runs beautifully online and offline. The main problem is this: I need to view the photo using a different window instead of having to go back and rebuild the vrml.

I had the good fortune to attend the SF ACM SIGGRAPH meeting at Fort Mason. The beer and food were "free" and the show was real interesting. It seems that the main folks in the production of these modern cartoons are the animator and the technical director. I thought I heard that the animator was mainly responsible for geometries, movements, and textures while the technical director looks after the lighting and overall composition.

The next night I showed my hardware, some multimedia, and some vrml to the local PC Group of the Redwoods OMNI SIG. Thanks to Mike Clark for organizing this. I had fun talking about and showing some things to about 20 interested and polite enthusiasts.

When I looked at the pictures I took at these events, I found mistakes. For the SF meeting I had moved the autofocus switch to manual so my style of a beer in one hand and a semi-aimed shot with the other did not work as it does when the otherwise reliable autofocus is operating. As a result I have some potential random textures but missed some real good screenshots of the demos and the main presentation. For the local event, I was just having too much fun to remember to take more than two quick shots. These will be shown at

Finally, I dragged a relic from some early days back to the garage for inspection. I was looking at outside the light cone with ~mpesce and found circle.wrl. Having no idea of the history of this piece, I grabbed a part of it, a 'spherewitharrows' and am now showing a version of this creation in the garage. This is just another reason to have a look inside.

July 21, 1998. Appearing at center stage is the beginning examination of virtual sound systems. At this point I have a description of the first version and have added the dialog speakers. This study is interesting because of what appears to be an important period of definition for DVD sound standards, with spirited debate between all combinations of manufacturers and users. The Model I am building now is a 6-channel Theater model, to be compared with the 8-channel MPEG-1 model. When it is playing, (not yet) then I can (virtually) sit at the best spot and listen to my (real) sound system (the TV). I think I have never been known as an avid audiophile, but I like to make and listen to a wide range of sounds, including some very loud stuff.

Achieving HyperMultiMedia interactions with sound is now used in very high performance applications like aircraft fighting systems and in many very simple annoying applications such as auto seat belt warnings. Realistic, reliable sound in basic VRML worlds makes it more possible to create an accessible multimedia environment for learning and using the application.

July 11, 1998. What I replaced today never even made it into the garage, but it will.
It has frustrated me that the infinity symbol is not now possible in HTML. I finally have that =@8 symbol looking somewhat like I want it to look. That is, readable as "equality at infinity". It represents a thought I have about my role in this.
It is made with FLASH2. This great program came with the WACOM Tablet.

June 30. 1998. Found this sentence - well four sentences - laying around that should have been published with the original.
Without CLI Computer Labs, Daniel, Phuong Doan, and the rest of the staff, I probably would not have this thing together. This shop is without peer (at least in Santa Rosa) if you want to build it yourself but most likely will need some help with pieces and integration.
I'm Not going to thank anyone else locally. They can always come over and see HyperMultiMedia in person.

June 29, 1998. What is new?
Minor adjustments, and I now package the textures with the .wrl so that they get displayed. Funny, this type of problem probably won't show up on your own system because the files are in your system but may not be out there on the web with the rest of your world.

June 24, 1998. Why am I publishing this now?
I just received my copy of the official VR Creator and so this is my last work with the free edition. This is really not much, and it doesn't show all I have experimented with, but I must give several thanks in return for all the fun I am having.
First, thanks to Platinum and all the folks that work on this fine product. Free was great and paid for will be better.
The hardware counts, so I must thank Intel, especially for AGP. This world, and others, look pretty weak without hardware acceleration (ATI AWP in my box).
And to go along with that, I must give the three finger salute to MicroSoft. I don't think I really started having fun until the VRML browser was bundled into IE, even though I think the VR Creator browser navigation has some better features than anything else.
A piece of software that has always worked so far (and also been free so far) is the WS_FTP Pro by ipswitch, who was referred to me by my host,
Next, thanks to the VRML newsgroup.
I have lurked there for a few months and have made first trembling efforts to interact. Thanks especially to the Rev. Bob for his patient replies and advice to the group. His web site includes some great history.
I certainly want to be part of something that serves a real communication need as well as be "sufficiently bizzare to satisfy the most fastidious connoisseur of the artifacts of civilization" - this civilization.
I guess for sure there is more VRML on the web than ever, but the guys with the highest goals seem to be with the VRML Dream. I would be proud to contribute to that project in some way.
Finally, thanks to you who have looked at Joe's Garage and read this note.

To comment, my email is (best email and newsreader).

What does this mean to you?

Let's discuss your application so I can show you how the HyperMultiMedia concept will add to it's success.

JoesGarage99 at

..<=>... .wrl logo.

Technical and Promotional HyperMultiMedia

©Williams Publications/
Santa Rosa CA USA -
6/21/98 6/24/98 6/29/98 7/11/98 7/21/98 9/04/98 9/06/98 9/15/98 10/05/98 11/03/98 11/04/98 11/16/98 11/19/98
1/6/99 1/7/99 1/8/99 1/31/99 6/3/99

≡ @ ∞