<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">Here is my first successful boolean solid construction ever. Not really all that complex is it? While not particularly challenging, this would still be tedious - boring even - to construct one polygonal face at a time. Using boolean solid modeling it is easy.</p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; "> </p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">The second image shows that this is not merely two interpenetrating objects rendered together with z-buffering, which could indeed produce the same image. So why is solid modeling better than z-buffering? Well, though I did not show it here, you can create holes in things with boolean modeling but not with z-buffering. There are many other advantages. You could do architectural modeling in the interior space, which otherwise would be obstructed by simple z-buffer rendering. We can also do physical things like calculate interior volume, and maybe add physical properties to the walls. That is for later. In the immediate future the biggest use will be making holes in things and finding complex intersection arcs, which are already well worth the effort.</p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; "> </p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">In addition to having some success putting all the little solid modeling pieces together, I also hit my first degenerate vertex alignment bug. Which was predicted, and it was predicted that it would be exactly this bug, but I did not really expect to hit it so soon. Well, it turns out that the simple math one typically uses for simple examples greatly increases the probability of exact geometric alignment, and that is just what happened here. In this case I worked around it by making a tiny change in the alignment to remove the geometric ambiguity. But that will not do in the long run. It seems I need to jump straight into the robustness work, whereas I had been hoping to move onto something a little more interesting like actual game graphics around now. Oh well. Having a robust solid modeling algorithm will be way better than having a flaky one. Even some high end commercial products like 3D Max are not really any more reliable than I have right now. But this is Open Source! Less than perfectly reliable is just not good enough.</p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; "> </p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">One new component is working very nicely: the polygon triangulator. It was used here to triangulate the non-convex faces where the tetrahedra interpenetrate. It does this job automatically. For such a complex algorithm, it is very easy to use. As it should be.</p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; "> </p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">I will try some slightly more complex models just to get an idea how frequent the degenerate alignment bugs are, then I will just straight into the theory and practice of making this algorithm work all the time, not just most of the time.</p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; "> </p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">Regards,</p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; "> </p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">Daniel</p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; "> </p></body></html>