Historical Post 2 - September 2007 : Breakthrough - External Straight Skeleton Nodes

Historical Post 2 - September 2007 : 

Breakthrough - External Straight Skeleton Nodes

OK, not much of a catchy title. However, if you've been reading about the issues I've been having with calculating external straight skeletons, you may know a little about what I'm talking about. After some time spent scratching my head, walking away from the problem and a fair bit of frustration (OK, a lot), it's time for an update.

To recap, straight skeletons are useful data structures for calculating the offset path for a (simple) polygon. They are also used for calculating roof structures. Most of the material I've found on the web seems to be concerned with calculating internal skeletons, although no distinction is usually made between the two types.

To be able to expand polygonal paths I need to be able to calculate external skeletons. Unfortunately, I've found that these are less frequently discussed and appear to have features that you don't encounter in internal skel…

Historical Post 1 - RoomBuilder Composite from March 2007

Historical Post 1 - RoomBuilder Composite from March 2007
CompositeHere's some snapshots of RoomBuilder V1 in output. Textured and rendered in CinemaXL 9.

Historical posts - Composite from March 2007

I am merging a couple of posts into this blog that were posted by me to another blog back in 2007-2008 which may be of use to some readers. This is because most people who read this site are interested in RoomBuilder and in particular the straight skeleton blog posts, some of which were never included here.

There are 3 posts to follow:

A composite image shot of four rooms generated from RoomBuilder back in March 2007A post detailing a breakthrough with the straight skeleton post from September 2008A post about external straight skeletons, also from September 2008.
Hope they are useful and would be great to get feedback from readers as to what they are looking for when they visit my blog.

Virtual Wind Farms and Virtual Rooms...

Bitten by the Virtual BugI've been getting back into graphics over the past 6 months. This has been mainly driven by my desire to get going on some VR concepts and has led to me diving into Unity3D development. My day job as a software architect means I spend a lot of time researching technologies and writing desktop applications in C# / WPF. For me, although I've coded for several years in C++, C# and by extension Unity3D are a natural choice. 

It's fab to be able to combine my skills in such a great way - graphics and algorithms + WPF desktop apps + C# + Unity + VR. I'm really excited about what I can do in this space.

VR ProjectsExplore Wind Farms - Virtually

I have several VR projects in the pipeline. The first concept I am currently exploring relates to potential use cases for VR that overlap with my full time job. I work in the area of renewable energy software and wanted to attempt to do some visualisation of renewable energy plants/farms in VR on my Oculus DK2. I&…

Hand Tracking with MS Research and Kinect at Future Decoded 2015

Hand Tracking with MS Research and Kinect at Future Decoded 2015
A bit of a departure from RoomBuilder, which I haven't blogged about for a long time, but which is going VR... stay tuned.

This post is about graphics and relates to something that's pretty cool - hand tracking using a Kinect sensor. I was lucky enough to attend Future Decoded last week. There was some great keynotes on the technical day. However, there was a bit of a surprise during the keynote from Chris Bishop at Microsoft Research. His main focus was on AI, machine learning and making use of deep learning to solve difficult problems. One of the applications that cropped up during the keynote was hand pose tracking using Kinect and an Xbox sensor. Now, this has come up before with Handpose. However, it was still a bit of a surprise to see a live demo - which I manage to capture a few seconds of once I realised what was happening. Whether there's been much progress since the original Handpose reveal is hard…

Extruding profiles along paths.

Well, a quick update from me. I have now complete my extrusion code. This allows you to take a path and a profile, for example some bezier splines, and will generate a textured mesh of the result. This is a real building block for creating rooms, but has been rewritten completely since the original version.

I've knocked up a simple WPF viewer to examine the results and to check that the texture mapping works ok - other than an axis flip, it looks pretty good. As the examples show, the code supports different smoothing angles for profiles and paths and will also seal the ends of the path using the triangulation, discussed in some earlier posts. Anyway, it's great progress.

I stand at a bit of a divide now. To progress to start writing the WPF application, or to consider a tough cookie - creating a 3D CSG engine. I don't strictly need the latter and it could be a huge diversion, but the challenge is tempting.

Well, back to it ...

Moving on ... Polygon Triangulation Progress

I've finally moved on from the polygon expansion code, which works very well now.* My new challenge has been to create a polygon triangulation service.

For those in the know, triangulation is a useful process for creating 3D meshes. Models tend to be built from triangular faces, so, in order to create 3D models for RoomBuilder, it is important to be able to move from the 2D to 3D world. The triangulation code does this. Essentially, it divides a polygon into non overlapping triangles to create a solid face.

There are many different ways of approaching triangulation, most of which are concerned with either speed or mesh quality. It is possible to implement very efficient, scalable solutions for convex polygons, however, reflex verticies make the triangulation process more difficult.

At the moment, I am not so concerned about speed. I would rather have a reasonably efficient, robust routine that can be easily debugged, than something more esoteric and potentially harder to maintain. …

RoomBuilder V1

Just to cheer myself up, I thought I'd post some screenshots of room models created in the original version of RoomBuilder, rendered in Cinema4D XL. These were done a few years ago. Time flies eh?

A Georgian style door.

A more modern look.

A poor paint job!

One final one, with a few plants and textures added (not from RoomBuilder).

Straight Skeleton Madness (a plea for help)

After completing my work on boolean path operations, I have moved on to looking at algorithms for offsetting polygons. One of the ones that stands out is known as the 'straight skeleton' algorithm. This computes a set of connected paths which describe the position of verticies as the polygon offset size is altered. Unfortunately, it's only directly applicable to straight line paths (with mitre joins), but that's good enough for now. The algorithm is straightforward for convex polygons, but gets a little bit more complex when dealing with concave points, since this can lead to the creation of sub paths.

In theory, while the straight skeleton is not directly applicable to offsetting, it produces a structure which can be used to calculate an offset path. As an aside, the straight skeleton of a polygon is ideal for determining its 'roof structure' - which will be of use elsewhere in my software.

Progress on my .NET straight skeleton code has been slow but fairly dec…