<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>W:Blut &#187; General</title>
	<atom:link href="http://www.wblut.com/topics/general/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.wblut.com</link>
	<description>Experiments in generative graphics</description>
	<lastBuildDate>Fri, 03 Sep 2010 15:40:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>

   <image>
    <title>W:Blut</title>
    <url>http://1.gravatar.com/avatar/f53eecb68a71cc8113e72e1e53c94f7d?s=48&amp;d=</url>
    <link>http://www.wblut.com</link>
   </image>
		<item>
		<title>Hemesh : a 3D mesh library for Processing</title>
		<link>http://www.wblut.com/2010/05/04/hemesh-a-3d-mesh-library-for-processing/</link>
		<comments>http://www.wblut.com/2010/05/04/hemesh-a-3d-mesh-library-for-processing/#comments</comments>
		<pubDate>Tue, 04 May 2010 21:09:19 +0000</pubDate>
		<dc:creator>Frederik Vanhoutte</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[generative]]></category>
		<category><![CDATA[geometry]]></category>
		<category><![CDATA[half-edge]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[Processing]]></category>
		<category><![CDATA[voronoi]]></category>
		<category><![CDATA[wblut]]></category>

		<guid isPermaLink="false">http://www.wblut.com/?p=1017</guid>
		<description><![CDATA[Coded, recoded, lost, recoded and recoded … hemesh, the half-edge mesh library for Processing has slowly accreted to a state that warrants a release. A release in more than one way. In retrospect, the current functionality looks depressingly small, especially compared to the hundreds of hours that already went into coding it. But like a [...]]]></description>
			<content:encoded><![CDATA[<div style="float:left; width:500px;">
<p>Coded, recoded, lost, recoded and recoded … <em>hemesh</em>, the half-edge mesh library for Processing has slowly accreted to a state that warrants a release. A release in more than one way. In retrospect, the current functionality looks depressingly small, especially compared to the hundreds of hours that already went into coding it. But like a broke home-owner with a basement and a half-finished first floor, I comfort myself with the thought that at least it holds potential for growth.</p>
<p></p>
<h3>What is <em>hemesh</em>?</h3>
<p><em>hemesh</em> is an implementation of a <a href="http://www.cgafaq.info/wiki/Half_edge_general" class="liexternal">half-edge datastructure</a> for manipulating 3D meshes in Processing. Basically it’s a toolset to extend my Processing sandbox to a proper playground.</p>
<p>Generating and displaying a mesh requires nothing more than a list of vertices and a list of faces connecting them. This hardly requires a special dataset. However, manipulating a mesh in any but a trivial way requires a lot of connectivity information: neighboring vertices, neighboring faces, shared edges,… Keeping track of this in a simple facelist type structure is difficult. Hence the need for a datastructure that incorporates connectivity information in an efficient way: the <a href="http://www.cgafaq.info/wiki/Half_edge_general" class="liexternal">half-edge mesh</a>.</p>
<h3>What can <em>hemesh</em> do?</h3>
<p>The library is currently focused on the stuff I coded it for: 3D voronoi and random plane divisions. So with <em>hemesh</em> we can create 3D meshes. Several primitives are built-in, but any kind of <a href="http://en.wikipedia.org/wiki/2-manifold" rel="nofollow" class="liwikipedia">2-manifold</a> mesh can be turned into a half-edge mesh from its vertices and facelist. The weight of the implementation lies in closed meshes but open surfaces are handled as well.</p>
<p>Creating meshes is cool (for a given amount of cool) but destroying them is cooler. Several modifiers are provided, either as part of the basic mesh functionality or as separate modifier classes. Subdividors are a special class of modifier oriented towards subdivisions. (The names might not be original but I guess it’s easier to remember than quaghot and umpsink.)</p>
<h3>What <em>hemesh</em> can’t do…</h3>
<p>The half-edge datastructure has <a href="http://www.cgafaq.info/wiki/Half_edge_capabilities" class="liexternal">a few limitations</a> in itself. In practice, each edge in a mesh can be shared by at most two faces. The implementation is strongly face-based, isolated vertices and edges are not supported and will lead to ouchie.
</p><p>The initial intent of <em>hemesh</em> was to build a system to prototype geometric play. So large-scale systems were never a goal. Several implemented algorithms are O(n²)  and use a lot of storage. Connaiseurs and lectors in computational geometry are advised to avoid perusing the code, bleeding eyes often offend. On the positive side, there’s room for improvement…</p> 
<h3>Getting <em>hemesh</em></h3>
<p>The library is maintained at <a href="http://code.google.com/p/hemesh2010/" class="liexternal">code.google.com</a>. <em>hemesh</em> is currently at beta version 1.1.0 Download and extract the  <a href="http://code.google.com/p/hemesh2010/downloads/list" class="liexternal">archive</a> inside the Processing ‘libraries’ folder. The ‘hemesh’ subfolder contains several examples. A <a href="http://www.processing.org/download/" class="liexternal">Processing</a> version supporting JAVA 1.5 syntax is recommended, Rev 180 or higher. In the coming days, I’ll post some tutorials and spielerei to illustrate further use. </p>
<h3>Future</h3>
<p>At this time, the library reflects my current interests. If you want it to do something else, have a suggestion or <em>hemesh</em> goes haywire on you, let <a href="http://www.wblut.com/about/" class="liinternal">me</a> know! One major addition is already planned: boolean mesh operations. This is a small step away from completion. </p>
</div>

<div style="float:right; width:400px;"><a href="http://www.wblut.com/2010/05/04/hemesh-a-3d-mesh-library-for-processing/"><em>Click here to view the embedded slideshow.</em></a>
<p></p>
<code>

import processing.opengl.*;<br />
import wblut.hemesh.*;<br />
import wblut.geom.*;<br />

HE_Mesh box;<br />
<br />
void setup(){<br />
  size(600,600,OPENGL);<br />
  hint(ENABLE_OPENGL_4X_SMOOTH);<br />
  HEC_Box boxCreator=new HEC_Box(this).setWidth(400).setWidthSegments(10)<br />
    .setHeight(200).setHeightSegments(4)<br />
    .setDepth(200).setDepthSegments(4);<br />
  boxCreator.setCenter(100,100,0).setAxis(1,1,1);<br />
  box=new HE_Mesh(boxCreator);<br />
  HEM_Lattice lattice=new HEM_Lattice().setDepth(10).setWidth(10)<br />
    .setFuse(true).setThresholdAngle(HALF_PI);<br />
  box.modify(lattice);<br />
}<br />
<br />
void draw(){<br />
  background(120);<br />
  lights();<br />
  translate(300,300,0);<br />
  rotateY(mouseX*1.0f/width*TWO_PI);<br />
  rotateX(mouseY*1.0f/height*TWO_PI);<br />
  noStroke();<br />
  box.drawFaces();<br />
  stroke(0);<br />
  box.drawEdges();<br />
}<br />

</code>


</div>
<div style="clear:both"></div>

]]></content:encoded>
			<wfw:commentRss>http://www.wblut.com/2010/05/04/hemesh-a-3d-mesh-library-for-processing/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Trinity</title>
		<link>http://www.wblut.com/2010/03/05/trinity/</link>
		<comments>http://www.wblut.com/2010/03/05/trinity/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 20:14:43 +0000</pubDate>
		<dc:creator>Frederik Vanhoutte</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Inspiration]]></category>
		<category><![CDATA[complexity]]></category>
		<category><![CDATA[evolution]]></category>
		<category><![CDATA[generative]]></category>
		<category><![CDATA[homeostasis]]></category>
		<category><![CDATA[Processing]]></category>

		<guid isPermaLink="false">http://www.wblut.com/?p=984</guid>
		<description><![CDATA[Complexity, evolution, homeostasis … If I had to pick the three things that intrigue me the most, these would be the ones. I’m rather fond of them, and protective. It’s time to rant about misuse, abuse and curious lack-of-use. Complexity needs no introduction. Any open-minded math or science course finds some room for esthetic and [...]]]></description>
			<content:encoded><![CDATA[<div style="float:left; width:650px; padding-left:25px;">

<p>Complexity, evolution, homeostasis … If I had to pick the three things that intrigue me the most, these would be the ones. I’m rather fond of them, and protective. It’s time to rant about misuse, abuse and curious lack-of-use.</p>
<p><strong><em>Complexity</em></strong> needs no introduction. Any open-minded math or science course finds some room for esthetic and pseudo-philosophical ramblings on the damn thing. I guess it’s safe to say that complexity and its bastard child emergence have, more than any other idea, attracted flies looking for a trendy, post-modern justification of furry thinking. Well, at least former runner-ups quantum physics and chaos theory can get a rest from harassment by quacks and get back to creating interesting t-shirts.</p>
<p>
For the record, I don’t believe in emergence in simple systems. Agreed, the unpredictable patterns created by<a href="http://en.wikipedia.org/wiki/Langton%27s_ant" rel="nofollow" class="liwikipedia"> Langton’s Ant</a> are interesting but the only way to explain them is by running through the simple steps of the algorithm. There’s no higher level of explanation, nothing beyond the blind following of the rules, no meta system. I wouldn’t call that emergence. A real-life ant-hill is another bucket of invertebrates, the many complex interactions between the ants result in an entity that can almost be explained as a single organism, mrs. Hill. Even without knowledge of the algorithm, pheromones mostly, we can sensibly predict the behavior of an ant-hill. Getting swarmed and bitten in the unmentionables, now that’s what I call emergence! And the human ant-hill, we’re probably up five meta’s (ask any sociologist to explain the behavior of a mob by electromagnetic interactions). As a plus, swarming and unmentionable biting are far less common…
</p>
<p>
Nevertheless,<em> complexity</em> in its simplest form, small piecewise algorithms building complex forms, is a valuable paradigm of generative art. There’s something satisfying in creating a set of rules and the <a href="http://www.complexification.net/" class="liexternal">beautiful images</a> that sprout from them. The question whether art in generative art refers to the code, or to the results of the code, is a fun one to discuss in mixed company. However further depth cannot be found in fast-and-cheap emergence. As in any art, meaning and significance are to be found in the artist and her intentions. I for one keep to<em> constructs</em>, devoid of meaning. Yep, I’m shallow.
</p>
<p>
Richard Dawkins refers to Darwin’s idea of<strong><em> evolution</em> </strong>as an eye-opener, an idea so profound it changes the way you look at the entire world. I know it did for me. The idea itself is remarkably simple: any replicating system will favor the replicator that euh, replicates the most succesfully. I guess it’s more catchy if it involves a gazillion species of <a href="http://matadortrips.com/10-birding-hotspots" class="liexternal">Galapagos finches</a>…
It resonates with generative creation, imagery beyond the control of the coder. A system that evolves will suit itself to purpose and circumstance in ways a designer could never imagine. Not only will the system work but it’ll keep working after some parts are removed, at least up to a certain level. It will adapt to changing requirements. If properly cared for, it will wag its posterior appendage and shed fur all over your furniture.
</p>
<p>Yet, despite genetic algorithms and their like, human endeavor has only scratched the surface. Not only does evolution shape organisms, it shapes the environment around them. That’s another meta… The closest I’ve seen art approach this level is in interactive installations. These change the behavior of the people around them, at least very locally, and in turn they affect the installation. So, if you’ve ever build one of these, I guess you’re entitled to a bit of smugness. Good for you!</p>
<p>
I encountered the concept of <strong><em>homeostasis</em> </strong>only late in my academic pursuits. The <em>ability of a living organism to maintain a stable, constant condition</em> was the skeleton onto which my professor physiology built a clear picture of our inner workings (most of them rather yucky). Instead of a random collection of biochemical systems, the body suddenly made sense. The sheer elegance of the various systems that balance each other is an eye-opener of the same magnitude as Darwin’s idea. In fact, one could claim that homeostasis is a direct consequence of evolution, as any organism that can’t maintain its own condition is … doomed. And damnation tends to hamper procreation. 
</p>
<p> &lt;sidetrack&gt; Why hasn’t anyone written a general audience book on physiology? I mean, cosmology, check, evolution, check, pi, check, our own bodies, not a sausage. Com’on funky scientist/surfer charismatic dudes out there, there’s a goldmine of wonders in there, get writing… (I accept Amazon gift certificates). &lt;/sidetrack&gt;
</p>
<p> &lt;sidetrack&gt; The university I went to made religion, psychology and philosophy a mandatory part of every curriculum. At this stage I’m wondering if it wouldn’t be a good idea to add some modern biology and physiology. And something arty as well, if you insist. &lt;/sidetrack&gt;
</p>
<p>I’m not really plugged in into any scene, but so far I haven’t heard of homeostasis as a concept in modern design culture. As a buzzword it definitely has potential. A hint of biomimicry, a hint of complexity, a tad of evolution, touches of dynamism and intelligence. A post-modernist delight.
I wish I had an academic career to spend exploring homeostatic structures. Buildings <em>dynamically</em> and <em>intelligently</em>, sorry,  redistributing stress after some part fails (i.e. a floor drops out). Heating/cooling systems adapting to supply and demand, not just any plain-old adapting, no, homeostatic adapting! Traffic mimicing blood flow, self-regulating its pressure (and viciously attacking annoyances as-per-spec). Bookshelves changing shape!!!  I could even get some eco in there. Now that would be a very lucrative book, <em>the ecohomeostatic design paradigm</em>. Pity, I have no time to write it.</p>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.wblut.com/2010/03/05/trinity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ooh, ooh, ooh! 3D Voronoi!</title>
		<link>http://www.wblut.com/2009/04/28/ooh-ooh-ooh-3d-voronoi/</link>
		<comments>http://www.wblut.com/2009/04/28/ooh-ooh-ooh-3d-voronoi/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 22:02:00 +0000</pubDate>
		<dc:creator>Frederik Vanhoutte</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[Processing]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[construct]]></category>
		<category><![CDATA[generative]]></category>
		<category><![CDATA[geometry]]></category>
		<category><![CDATA[half-edge]]></category>
		<category><![CDATA[voronoi]]></category>

		<guid isPermaLink="false">http://www.wblut.com/?p=734</guid>
		<description><![CDATA[I’m sorry, I got a bit excited. But I never thought I’d get this far: actual, geometrically correct 3D Voronoi subdivision. Following my shotgun approach to 3D Voronoi subdivisions in the voronoiBall, it was time to reconsider the problem. A 3D Voronoi subdivision is not that hard to imagine. Consider 2 lonely points in a [...]]]></description>
			<content:encoded><![CDATA[<div style="float:left;width:450px;"><p>I’m sorry, I got a bit excited. But I never thought I’d get this far: <a href="http://www.wblut.com/bodyinabox-embedded/" class="liinternal">actual, geometrically correct 3D Voronoi subdivision</a>. Following my shotgun approach to 3D Voronoi subdivisions in the <a href="http://www.wblut.com/2009/02/22/minimalismus-ii/" class="liinternal">voronoiBall</a>, it was time to reconsider the problem.</p>
<p>A 3D Voronoi subdivision is not that hard to imagine. Consider 2 lonely points in a box. A good way of dividing the box is splitting it with the bisector plane. This plane is perpendicular to the line connecting the two points and put exactly halfway between them.
<img src="http://www.wblut.com/blog/wp-content/2009/04/voronoi3da1.jpg" alt="voronoi 3d: 2 points in a box" title="voronoi 3d: 2 points in a box" width="450" height="369" class="size-full wp-image-770" />
There’s no need to limit ourselves to two points. Once we can split by a plane, we can repeat this as often as we like. With three points…
<img src="http://www.wblut.com/blog/wp-content/2009/04/voronoi3db2.jpg" alt="voronoi 3d: 3 points in a box" title="voronoi 3d: 3 points in a box" width="450" height="359" class="size-full wp-image-771" />
or ten (the madness!)..
<img src="http://www.wblut.com/blog/wp-content/2009/04/voronoi3dc1.jpg" alt="voronoi 3d: 10 points in a box" title="voronoi 3d: 10 points in a box" width="450" height="423" class="size-full wp-image-769" />
Anyway you got the idea. Now, if you cut by more than one plane, you need some way of selecting the proper segments. Otherwise you end up with a mess of planes cutting planes. It’s an interesting mess and I might get back to it one day, but it’s not what we’re looking for today. If done properly you end up with the Voronoi subdivision of the points bounded by the cube. In analogy with <a href="http://www.wblut.com/2008/04/01/voronoi-fractal-fr/" class="liinternal">my dabblings in 2D Voronoi</a>, I thought this selection was going to be the tough part. Boy, was I wrong…
</p>
<p>To be continued. (In the meantime, feel free to explore the <a href="http://www.wblut.com/bodyinabox-embedded/" class="liinternal">code</a>.)</p></div>

<div style="float:right;width:450px;">
<div class="wp-caption alignleft" style="width: 460px"><a href="http://www.wblut.com/bodyinabox-embedded/" class="liinternal"></a></p>
<p><img src="http://www.wblut.com/blog/wp-content/2009/04/voronoi3d.jpg" alt="voronoi3d" title="voronoi3d" width="450" height="450" class="size-full wp-image-739" /><p class="wp-caption-text">body in a box, W:Blut, 2009</p></div>
<p><img src="http://www.wblut.com/blog/wp-content/2009/04/notes.jpg" alt="notes" title="notes" width="450" height="737" class="size-full wp-image-738" /></p>
<p><img src="http://www.wblut.com/blog/wp-content/2009/04/notes2.jpg" alt="notes2" title="notes2" width="450" height="563" class="size-full wp-image-759" /></p></div>


<div style="clear:both;"></div>]]></content:encoded>
			<wfw:commentRss>http://www.wblut.com/2009/04/28/ooh-ooh-ooh-3d-voronoi/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
