Towards an accurate, fairly detailed 3D model of campus Arenberg 3 , marked up with information about buildings, floors and even seperate rooms, possibly for integration with the KULeuven site, GeoWeb and Google Earth.


Latest files: sketchup - Google Earth - 3D warehouse - html version

Phase 1: Rough block model

A rough 3D model (no details, just plain cuboids)
Buildings have their names labelled
Accurate scaling in the ground plane (heights not accurate yet)
Placed in Google Earth

One can see the map imported in Google Sketchup in the x-y plane. Some lines are drawn over this map. Closed lines form polygons. A few polygon are extruded. I found a simple map of the campus. After importing this map into Google sketchup, it was fairly easy to mark the contours of the buildings. I grouped each polygon seperately and extruded them in group-edit mode. That way, we end up with groups representing buildings, which can be labelled.

During some P&O-session in the second term, we happended to be given a set of real-world coordinates of one face of Building S. Luckily, I stored this information on my hard drive and found it back. Hence the scaling is exact for Building S (ground-plane and height), and pretty accurate for the campus as a whole (only ground-plane).

First evaluation of Google Sketchup: the UI is extremely intuitive. The first time I ran the program, I could start working after, let's say, 1 second. The auto-geometry features of Google sketchup both helped and hindered me in the process of marking the contours. I hope I find a way to avoid the hinder and keep the help:-). The process for uploading to the 3D warehouse is very smooth. I can highly recommand to define some shortcuts before starting to work (why aren't there any by default?). The 'outliner' is a good tool to manage groups.

Phase 2

label all major aulas
accurate heights for all buildings
Integration with KULeuven website

alpha=atan(eye_height/rope), h=eye_height+tan(theta-alpha)*ropeArmed with a sextant and a 10m-rope, I set out to the campus to measure the heights of all buildings. Performing some basic trigoniometry on the measured angle theta, quickly lead to an estimation of the height of a building. The expected error on the final results varies from 3 cm to 3 dm (standard deviation), depending on the angle.

As for the website integration, it seemed that there's nothing to integrate. These pages 1, 2, 3 don't look promosing at all. But, just as I was about to despair, I remembered the room-order-service of KULeuven, which has all rooms indexed (sample room).

In order to couple the Sketchup model to the KULeuven website, I was hoping to attach a URL to all group objects in sketchup. Sketchup, however, seemed to have a very limited support for meta-information. Luckily I stumbled upon the ruby API that comes with Sketchup. I learned ruby's basics (I got pretty interested in the language btw) and was able to make a plugin for Sketchup to add an arbitrary amount of meta-data to any sketchup object. I made an additional plugin to export the model's meta-data to xml.

The next step was to present the model and its annotated data inside a web page. One way is to use a browser plugin to render the 3D model at the client side, possibly via a conversion to X3D. This was not an option since

The other option is to use a 2D screenshot of the SketchUp scene and render it as a hover-enabled image map.

My first idea was to make yet another ruby script to iterate over all annotated groups. For each, I would highlight the group and grab a screenshot. This way I would end up with a large set of full-resolution screenshots. This method proved to be worthless because

This was definitely going to be trickier than I thought. I figured out that, whatever image-map technique I was going to be using, I would need coordinates of the area of each building on a SketchUp screenshot. So I made a ruby script that scans the whole viewport point-by-point, recording any objects that are underneath these points. A matlab script converts the areas to their surrounding polygons. An xslt-stylesheet merges this edge data with the meta-data into a single xml file. This file could be transformed into any kind of image-map.

What image-map technique did I consider?

  1. I tried html's image maps (apparently declared antique by alistapart) with little succes: there are no hover-effects and firefox doesn't seem to support it. download xsl-html
  2. I stumbled upon a method shown at Tanfa and something very similar at alistapart. I also looked at hover info and image annotation, but I'm happy with the current result. (download xsl-html)
  3. I considered using SVG, but only the best of the browsers give native support for it.

And thus the image-map was completed...

The last thing to do in this stage was to import data from KULeuven site to the sketchup model. I managed to automate this process.

Phase 3

add detail to rough block model
Not yet

Phase 4

add floors
label departments
add minor aulas & major rooms
Not yet


Any aid is more than welcome. If you can deliver maps, detailed sketches, field data, photo's for textures or complete 3D models, please contact me. Of course I will answer questions from your part as well

Last Updated 30/08/2006