<?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>Noobody&#039;s Tavern</title>
	<atom:link href="http://noobody.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://noobody.org</link>
	<description>Projects of a visual computing enthusiast</description>
	<lastBuildDate>Fri, 17 Jun 2011 08:47:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Metaballs and marching cubes</title>
		<link>http://noobody.org/2011/06/metaballs-and-marching-cubes/</link>
		<comments>http://noobody.org/2011/06/metaballs-and-marching-cubes/#comments</comments>
		<pubDate>Fri, 17 Jun 2011 08:47:58 +0000</pubDate>
		<dc:creator>Noobody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://noobody.org/?p=31</guid>
		<description><![CDATA[&#160; Metaballs are nifty little blobby objects commonly used in 3D modelling to help getting an &#8220;organic look&#8221; or in demos as a cheap graphical effect. They basically consist of a simple function which measures the distance of a certain point in space to the center of the metaball and assigns that point a potential. [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;">&nbsp;</p>
<div class="wp-caption aligncenter" style="width: 458px"><div class="img  " style="width:448px;">
	<a href="http://noobody.org/Data/Metaballs3D.png"><img src="http://noobody.org/Data/Metaballs3D.png" alt="Metaballs" width="448" height="336" /></a>
	<div>Metaballs</div>
</div><p class="wp-caption-text">Metaballs</p></div>
<p>Metaballs are nifty little blobby objects commonly used in 3D modelling to help getting an &#8220;organic look&#8221; or in demos as a cheap graphical effect.</p>
<p>They basically consist of a simple function which measures the distance of a certain point in space to the center of the metaball and assigns that point a potential. The potential of multiple metaballs add up, i.e. to get the total potential at a point in space, we calculate the metaball function for each metaball in the scene seperately and add up the returned values. This way we get a so-called &#8220;scalar field&#8221;.</p>
<p>To make things more interesting, we now define a threshold for this scalar field which determines the actual metaball shape. If the potential at a certain point exceeds the threshold, it is inside the metaball volume, and if it doesn&#8217;t, it is defined as outside of the metaball volume. Points that have a potential equal to the threshold lie on the surface of the metaball volume; these are the ones we&#8217;re interested in to render the metaballs.</p>
<p>It shows that if we choose an appropriate threshold and then render the surface of the metaballs, we can see that metaballs that get close enough begin to &#8220;attract&#8221; each other and start to merge. What&#8217;s useful about this is that even during merging, metaballs always keep a smooth and continuous surface without us having to explicitly model it. This makes it very handy for organic modelling, since organic models (e.g. plants, humans etc.) usually have no sharp edges and just smooth surfaces. This would be very difficult to model per hand.</p>
<p>Rendering the metaballs is a problem in itself, since there is no fast straightforward solution to render a scalar field. <a href="http://en.wikipedia.org/wiki/Volume_ray_casting">Volume raycasting</a> is one possible solution, though it&#8217;s usually too hardware extensive for realtime use. In this implementation, I used the <a href="http://en.wikipedia.org/wiki/Marching_cubes">Marching Cubes</a> algorithm, which allows the program to convert the surface of the metaballs into a polygonal mesh, which is then rendered using conventional rasterization.</p>
<p>&nbsp;</p>
<p><strong>Download the demo (*.exe &amp; code):</strong> <a href="http://noobody.org/Data/Metaballs.zip">Metaballs</a></p>
]]></content:encoded>
			<wfw:commentRss>http://noobody.org/2011/06/metaballs-and-marching-cubes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Image and orbit traps</title>
		<link>http://noobody.org/2011/06/image-and-orbit-traps/</link>
		<comments>http://noobody.org/2011/06/image-and-orbit-traps/#comments</comments>
		<pubDate>Tue, 14 Jun 2011 22:50:11 +0000</pubDate>
		<dc:creator>Noobody</dc:creator>
				<category><![CDATA[BMax]]></category>
		<category><![CDATA[Fractals]]></category>

		<guid isPermaLink="false">http://noobody.org/?p=21</guid>
		<description><![CDATA[I&#8217;m sure most of you are familiar with the Mandelbrot set, a famous fractal named after it&#8217;s inventor, Benoît Mandelbrot. It is a fascinating fractal that has often been used in demos and videos as a graphical effect. The &#8216;normal&#8217; way to draw a Mandelbrot fractal is to take a point in the complex plane, [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m sure most of you are familiar with the <a title="Mandelbrot set" href="http://en.wikipedia.org/wiki/Mandelbrot_set">Mandelbrot set</a>, a famous fractal named after it&#8217;s inventor, Benoît Mandelbrot. It is a fascinating fractal that has often been used in demos and videos as a graphical effect.</p>
<p>The &#8216;normal&#8217; way to draw a Mandelbrot fractal is to take a point in the complex plane, apply the Mandelbrot function multiple times and see whether the point converges to a fixed value or diverges to infinity. The points that converge belong to the Mandelbrot set (and are usually colored black), however, we&#8217;re more interested in the points that diverge. The way divergence is determined is usually by measuring the distance of the complex point to the origin and see whether that distance exceeds a certain threshold. If not, we reapply the function and check for divergence again. If yes, then we assume the point is diverging and don&#8217;t need to apply the function anymore. Instead, we count how many times we applied the function so far and take that value as an index into a colour table of some sort to assign a colour to the corresponding pixel.</p>
<p>By choosing appropriate colour tables, it&#8217;s very easy to get good looking images that way. The problem is that they&#8217;ll all look similar to images others have made &#8211; even though you might use different colors, it&#8217;s still the exact same coloring method used on the same fractal. This is why nifty demo sceners developed a new coloring method using orbit traps to change the look of the fractal greatly without much additional complexity.</p>
<p>The way orbit traps work is, instead of counting the amount of iterations of the equation, we track the orbit (location after every iteration) of the point we&#8217;re looking at. For example, one could look at the distance of the point to the origin and record the lowest distance of the point on its course (the nearest point to the origin gets &#8220;trapped&#8221;) and then take that radius as an index into a colour table. This already yields a completely different looking fractal:</p>
<p style="text-align: center;">&nbsp;</p>
<p style="text-align: center;"><div class="img    aligncenter" style="width:605px;">
	<a href="http://noobody.org/Data/Mandelbrot-2.png"><img src="http://noobody.org/Data/Mandelbrot-2.png" alt="Point trapped Mandelbrot set" width="605" height="378" /></a>
	<div>Point trapped Mandelbrot set</div>
</div>
<p style="text-align: left;">&nbsp;</p>
<p style="text-align: left;">This is just one of many possibilities. One could also measure the distance of the point to one or multiple straight lines and record the lowest distance:</p>
<p style="text-align: center;">&nbsp;</p>
<p style="text-align: center;"><div class="img   aligncenter" style="width:605px;">
	<a href="http://noobody.org/Data/Mandelbrot.png"><img src="http://noobody.org/Data/Mandelbrot.png" alt="Line trapped Mandelbrot set" width="605" height="378" /></a>
	<div>Line trapped Mandelbrot set</div>
</div>
<p>&nbsp;</p>
<p style="text-align: left;">The possibilities are of course endless &#8211; instead of lines and points, one could also take circles, spirals, or any combination of them. Just as an example, this image uses two line traps and a point trap:</p>
<p style="text-align: center;">&nbsp;</p>
<p style="text-align: center;"><div class="img    aligncenter" style="width:605px;">
	<a href="http://noobody.org/Data/Mandelbrot-3.png"><img src="http://noobody.org/Data/Mandelbrot-3.png" alt="Mandelbrot set with various orbit traps" width="605" height="378" /></a>
	<div>Mandelbrot set with various orbit traps</div>
</div>
<p style="text-align: left;">&nbsp;</p>
<p style="text-align: left;">These images already look pretty good, but there&#8217;s another method available to achieve different coloring: Image traps. The principle behind them is similar to ordinary orbit traps: We track the point on its orbit, map the point position to a pixel of a picture we chose, and whenever the point is inside the image (and hits a non-transparent pixel), the corresponding color is assigned as the final color of the point. This way, the picture will get repeated over and over inside the fractal and naturally follows the shape of the set:</p>
<p style="text-align: center;">&nbsp;</p>
<p style="text-align: center;"><div class="img     aligncenter" style="width:594px;">
	<a href="http://noobody.org/Data/JuliaDerpy.png"><img src="http://noobody.org/Data/JuliaDerpy.png" alt="Image trapped Mandelbrot set" width="594" height="446" /></a>
	<div>Image trapped Mandelbrot set</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://noobody.org/2011/06/image-and-orbit-traps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cloth simulation</title>
		<link>http://noobody.org/2011/06/cloth-simulation/</link>
		<comments>http://noobody.org/2011/06/cloth-simulation/#comments</comments>
		<pubDate>Tue, 14 Jun 2011 15:36:20 +0000</pubDate>
		<dc:creator>Noobody</dc:creator>
				<category><![CDATA[B3D]]></category>
		<category><![CDATA[Physics]]></category>

		<guid isPermaLink="false">http://noobody.org/?p=12</guid>
		<description><![CDATA[Simple cloth simulation This was a very quick project I did a few years back. It deals with the problem of simulating cloth, thin objects that are deformable and, in some cases, even tearable. These kind of simulations are usually too expensive for massive use in games or other real-time applications, but they provide a [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><div class="img   aligncenter" style="width:482px;">
	<a href="http://noobody.org/BBP/ClothSimulation_3.png"><img src="http://noobody.org/BBP/ClothSimulation_3.png" alt="Simple cloth simulation" width="482" height="329" /></a>
	<div>Simple cloth simulation</div>
</div>
<p>This was a very quick project I did a few years back.</p>
<p>It deals with the problem of simulating cloth, thin objects that are deformable and, in some cases, even tearable. These kind of simulations are usually too expensive for massive use in games or other real-time applications, but they provide a nice graphical effect.</p>
<p>My implementation is very basic and was hacked together within one evening, so it&#8217;s neither fast nor elegant. It works by dividing the cloth into a regular grid, placing particles at grid corners and then connecting particles using quasi-stiff springs. The particles are then moved using simple position verlet integration and then constrained by correcting the length of each spring to its original length. Combined with a simple raypicking function for cylinders, cubes and spheres, this gives some neat effects despite its simplicity.</p>
<p><strong>Download (*.exe &amp; code)</strong>: <a title="Link" href="http://noobody.org/wp-content/uploads/2011/06/ClothSimulation.zip">Cloth Simulation</a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://noobody.org/2011/06/cloth-simulation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Print &#8220;Hello World!&#8221;</title>
		<link>http://noobody.org/2011/06/print-hello-world/</link>
		<comments>http://noobody.org/2011/06/print-hello-world/#comments</comments>
		<pubDate>Mon, 13 Jun 2011 14:46:00 +0000</pubDate>
		<dc:creator>Noobody</dc:creator>
				<category><![CDATA[Meta]]></category>

		<guid isPermaLink="false">http://noobody.org/?p=1</guid>
		<description><![CDATA[I finally got around to setup a wordpress blog! I&#8217;ll fiddle around with the settings a bit and see how this whole blogging thing works, but I&#8217;m surprised how easy all of this works. It&#8217;s really great that you don&#8217;t have to mess with HTML and CSS anymore to get a decent website.]]></description>
			<content:encoded><![CDATA[<p>I finally got around to setup a wordpress blog!</p>
<p>I&#8217;ll fiddle around with the settings a bit and see how this whole blogging thing works, but I&#8217;m surprised how easy all of this works. It&#8217;s really great that you don&#8217;t have to mess with HTML and CSS anymore to get a decent website.</p>
]]></content:encoded>
			<wfw:commentRss>http://noobody.org/2011/06/print-hello-world/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
