vZome Web Experiments

For many years, I have wanted to port vZome to the web. The primary reason for this is that the web browser is now the truly universal platform, and an increasingly capable and standardize one, at that. A secondary reason is the steady erosion of the viability of Java desktop applications, for various reasons.

This document captures my history of experimentation with web technologies, always with the goal of porting vZome. A strong requirement has always been to continue to support opening existing vZome files, even if the web version of vZome adopts a very different user experience.

3D in the Web

My earliest efforts, starting in 2012, focused on learning about WebGL, the browser standard for 3D graphics. One of my first attempts just uses bare WebGL JavaScript code to render a Zome ball or any of several other vZome shapes exported as JSON, such as a short purple strut. I don’t seem to have any source code for this app saved anywhere, except where it is served on vzome.com.

First Zome ball rendering using WebGL
First purple strut rendering using WebGL

My next attempt, in 2015, used TDL, a wrapper library around WebGL created by Gregg Tavares. The source code for this application is available in GitHub. Here the data is a collection of JSON files exported from vZome. This application includes some primitive user interface elements, buttons to navigate between designs, and one button that opened a DropBox chooser to load additional designs.

Zome designs rendered using TDL library

As early as 2014, three.js had come to my attention, having already gained a high degree of adoption in the WebGL community. I was also starting to think about replacing desktop vZome, looking into Electron, a framework for building cross-platform desktop apps using web technologies. In 2017 I created this application, a fairly simple first effort with three.js.

The source code for this application is also available in GitHub. This project started as a fork of sample code by Jerome Etienne.

Zome ball rendered using three.js

Java in the Web