Font glyphs are okay for most things, but small text often lacks definition and is difficult to read, but you really want to keep most of your text small so as not to obscure other information. Also, tablet CPUs are slow and don’t support display lists, so when you have lots of text or annotations, the texture calls for each character is a noticeable overhead. With vector text, however, you can easily accumulate all their line segments and pump them to the GPU using vertex buffer objects with just a few OpenGL calls.

3D Vector Text Applet: This is an embedded interactive Java applet that demonstrates the use of 3D vector text. Click and drag the various 3D text objects around or adjust the text parameters to see the 3D model updating. Use the middle and right buttons to pan and rotate the 3D view.


Use the controls in the Settings panel to experiment with different arrow and text settings. You can use the yellow nodes in the 3D Font Metrics section to actually re-shape and skew 3D text to create different effects. The arrow and size controls only affect some of the 3D text elements to illustrate that they can be individually customised. Use the Example 2D Annotation button to overlay 2D labels that point to 3D model positions and an experimental information panel that interactively indicates 3D drag values.


The underlying skeleton of the 3D character set was originally inspired by Arkitus’ Play / Typology experiment. More characters had to be designed and modifications were required to improve overall readability, but the resulting font needs surprisingly few stroke lines and renders every bit as fast as I need it to. Moreover, it’s fully compatible with P3D and the OPENGL renderer, and detects if the graphics card supports VBO. To see individual character shapes, first click in the font editor (to give it the keyboard focus) and then press the key for the letter that you want to see drawn.

There is still some experimenting to do with camera-facing and dynamically oriented text blocks. Rotating a plane so that it always faces the current camera position sounds pretty simple - but solving for every situation certainly isn’t. As an example, try viewing the model from underneath and watch the some of the windmilling that occurs. I’m not going to worry too much about this as I’m not really sure how useful those kinds of 3D annotations will actually be. In most cases, a 2D label with an arrow into the 3D model would probably be more appropriate.

Click here to comment on this page.