<?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>CreativeApplications.Net &#187; c++</title>
	<atom:link href="http://www.creativeapplications.net/category/c/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.creativeapplications.net</link>
	<description>Apps that Inspire..</description>
	<lastBuildDate>Thu, 09 Feb 2012 12:41:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Pocode &#8211; New open-source C++ library by Potion [c++]</title>
		<link>http://www.creativeapplications.net/c/pocode-c/</link>
		<comments>http://www.creativeapplications.net/c/pocode-c/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 12:26:13 +0000</pubDate>
		<dc:creator>Filip</dc:creator>
				<category><![CDATA[c++]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[interaction]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[Potion]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.creativeapplications.net/?p=21598</guid>
		<description><![CDATA[pocode is a new open-source C++ library designed by Potion for the production of interactive media across multiple platforms. The frameworks provides a robust, high-performance software infrastructure that allows for the creation of all types of software, from simple visual sketches to elegant mobile apps to entire software applications. Continue reading.... Pocode &#8211; New open-source [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.creativeapplications.net/wp-content/uploads/2012/01/NOVIY_FLOOR_BOARDS_6704-1024x576.jpg"><img class="alignnone size-large wp-image-21608" title="NOVIY_FLOOR_BOARDS_6704-1024x576" src="http://www.creativeapplications.net/wp-content/uploads/2012/01/NOVIY_FLOOR_BOARDS_6704-1024x576-640x360.jpg" alt="" width="640" height="360" /></a></p>
<p>pocode is a new open-source C++ library designed by Potion for the production of interactive media across multiple platforms. The frameworks provides a robust, high-performance software infrastructure that allows for the creation of all types of software, from simple visual sketches to elegant mobile apps to entire software applications.</p>
<p><img class="alignnone size-full wp-image-21601" title="pocode" src="http://www.creativeapplications.net/wp-content/uploads/2012/01/popcode.png" alt="" width="326" height="144" /></p><p><a href="http://www.creativeapplications.net/c/pocode-c/?utm_source=feed&utm_campaign=rss-mo-more&utm_medium=rss">Continue reading.... Pocode &#8211; New open-source C++ library by Potion [c++]</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.creativeapplications.net/c/pocode-c/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Still Life [Unity, C, Objects]</title>
		<link>http://www.creativeapplications.net/objects/still-life-unity-c-objects/</link>
		<comments>http://www.creativeapplications.net/objects/still-life-unity-c-objects/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 13:08:20 +0000</pubDate>
		<dc:creator>Filip</dc:creator>
				<category><![CDATA[c++]]></category>
		<category><![CDATA[Objects]]></category>
		<category><![CDATA[Other]]></category>
		<category><![CDATA[accelerometer]]></category>
		<category><![CDATA[animation]]></category>
		<category><![CDATA[painting]]></category>
		<category><![CDATA[phidgets]]></category>
		<category><![CDATA[Scott Garner]]></category>
		<category><![CDATA[still life]]></category>
		<category><![CDATA[unity]]></category>
		<category><![CDATA[Unity3D]]></category>

		<guid isPermaLink="false">http://www.creativeapplications.net/?p=21506</guid>
		<description><![CDATA[Still Life by Scott Garner is an interactive wall piece that takes traditional still life painting and ads a motion-sensitive frame on a rotating mount. Years ago I had the idea of a still life painting that wasn’t so still, but could never quite wrap my head around how to build it. After various experiments [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.creativeapplications.net/wp-content/uploads/2012/01/stilllife01.jpg"><img class="alignnone size-large wp-image-21511" title="stilllife01" src="http://www.creativeapplications.net/wp-content/uploads/2012/01/stilllife01-640x360.jpg" alt="" width="640" height="360" /></a></p>
<p><em>Still Life</em> by Scott Garner is an interactive wall piece that takes traditional still life painting and ads a motion-sensitive frame on a rotating mount.</p>
<blockquote><p>Years ago I had the idea of a still life painting that wasn’t so still, but could never quite wrap my head around how to build it. After various experiments and explorations, I settled on Unity 3D as the ideal tool to make it happen.</p></blockquote><p><a href="http://www.creativeapplications.net/objects/still-life-unity-c-objects/?utm_source=feed&utm_campaign=rss-mo-more&utm_medium=rss">Continue reading.... Still Life [Unity, C, Objects]</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.creativeapplications.net/objects/still-life-unity-c-objects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shaders, Geometry, and the Kinect &#8211; Part 1 [Cinder, Tutorials]</title>
		<link>http://www.creativeapplications.net/tutorials/shaders-geometry-and-the-kinect-part-1-cinder-tutorials/</link>
		<comments>http://www.creativeapplications.net/tutorials/shaders-geometry-and-the-kinect-part-1-cinder-tutorials/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 11:45:26 +0000</pubDate>
		<dc:creator>Joshua Noble</dc:creator>
				<category><![CDATA[c++]]></category>
		<category><![CDATA[cinder]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[glsl]]></category>
		<category><![CDATA[gpu]]></category>
		<category><![CDATA[Joshua Noble]]></category>
		<category><![CDATA[kinect]]></category>
		<category><![CDATA[shaders]]></category>
		<category><![CDATA[shading]]></category>
		<category><![CDATA[Stephen Schieberl]]></category>

		<guid isPermaLink="false">http://www.creativeapplications.net/?p=21182</guid>
		<description><![CDATA[By Stephen Schieberl and Joshua Noble We&#8217;ve heard it plenty of times when people are talking about working with the Kinect: &#8220;we&#8217;ll just get the point cloud and turn it a mesh&#8221;. You may have even thought that yourself at some point, &#8220;this is going to be easy&#8221; Well, it&#8217;s actually fairly difficult to do [...]]]></description>
			<content:encoded><![CDATA[<p><strong>By <a href="http://www.bantherewind.com/">Stephen Schieberl</a> and <a href="http://thefactoryfactory.com/">Joshua Noble</a></strong></p>
<p>We&#8217;ve heard it plenty of times when people are talking about working with the Kinect: &#8220;we&#8217;ll just get the point cloud and turn it a mesh&#8221;. You may have even thought that yourself at some point, &#8220;this is going to be easy&#8221; Well, it&#8217;s actually fairly difficult to do and especially difficult to do quickly, because a mesh is a complex object to create and update in realtime. In a mesh of either triangles or quads, each surface needs to be correctly oriented to it&#8217;s neighboring surfaces and to the camera. When working with a point cloud coming from the Kinect you have several thousand points which means several thousand pieces of geometry needing to be created all at once. The typical approach that people use is to just display the points and not worry about trying to make surfaces or shapes out of those points. While this is fine for some projects, we&#8217;d like to see more people dig into making real shapes from their Kinect imagery so we&#8217;re going to show you how to do that in two different ways. This is a fairly advanced tutorial that focuses a little more on theory and implementation rather than a specific toolset. What we&#8217;re going to talk about in this article can be applied to any of the creative coding toolkits, but we&#8217;ll be making projects for Cinder to demonstrate. If you don&#8217;t know anything about Cinder, I suggest you take a look here: http://libcinder.org/ and check it out. With that said, let&#8217;s get into some theory.</p>
<p>Point clouds are big and connecting those points in a 3D shape is slow. We need to make geometry and we need to make it fast, so we&#8217;re going to look at two approaches to using shaders to either generate our geometry and to position the RGB data that we receive from the camera. To do that we’re going to use shaders because they can be faster and they more neatly separate the code that accesses our peripherals, i.e. the Kinect, from the code that creates our geometry and displays the mesh.</p>
<h2>A quick introduction to shaders</h2>
<p>This is a very quick introction to shaders, for more detail there are a lot of resources that you can look at: The Orange Book, Nehe, even glsl.heroku.com/. For now though, we just want to make sure you get the basics: GLSL (Graphics Language Shading Language) is an abbreviation for the official OpenGL Shading Language. GLSL is a high-level programming language that’s similar to C/C++ for several parts of the graphics card. With GLSL, you can code short programs, called shaders, which are executed on the GPU. GLSL can be fairly confusing because graphics card support is a little bit unreliable, i.e. what works on one card may not work on another, and because the differences between versions is significant. However, whether you’re working with GL ES on mobile devices or WebGL, or with full GLSL in a Cinder application, the basics are the same, and an understanding of how the shading pipeline functions will serve you well in any OpenGL platform or with other shading tools like CG, HLSL, or ARB.</p>
<p>Before we get started though, you might want to know what version of GLSL you’re running. This isn’t mandatory, but it is pretty handy. Downloading and running the following: http://www.realtech-vr.com/glview/ will let you know what version of GLSL your computer supports. If you aren’t interested in that, or you already know, feel free to skip that step.</p>
<p>So, first, the basics: a shading language is a special programming language adapted to easily map on shader programming. Those kinds of languages usually have special data types such as color and normal. Because of the various target markets of 3D graphics, different shading languages have been developed: fragment shaders, geometry shaders, vertex shaders. In this article we&#8217;re interested in GLSL. GLSL shaders themselves are just text that is passed to the graphics card drivers for compilation from within an application using the OpenGL API’s entry points. Shaders can be created on the fly from within an application or read in as text files, but they must be sent to the driver in the form of a text string.</p>
<p>There are three fundamental steps in shading: read and modify any vertices, create or modify any geometry, and read and modify any pixel data. The OpenGL shader pipeline looks roughly like this:</p>
<p><img class="alignright size-full wp-image-21188" title="shading" src="http://www.creativeapplications.net/wp-content/uploads/2012/01/shading.png" alt="" width="600" height="573" /></p>
<p>Let&#8217;s break that down a bit.</p>
<h3>Vertex Shaders</h3>
<p>A vertex shader has attributes about a location in space or vertex, which means not only the actual coordinates of that location but also its color, how any textures should be mapped onto it, and how the vertices are modified in the operation. A vertex shader can change the positions of each vertex, the number of lighting computations per vertex, and the color that will be applied to each vertex.</p>
<p>Your application certainly doesn’t need to do all of these operations to use a vertex shader. As you’ll see in the next code example, you don’t need to apply lights to your objects. Even though you don’t need to use all the functionality of the vertex shader, when you create and apply a vertex shader, your program will assume that you’re replacing all the functionality of your other vertex transformations. If you apply changes to particular vertex, the vertex shader will probably change those according to the instructions contained in the vertex shader. When a vertex shader is used, it becomes responsible for replacing all the needed functionality of this stage of the pipeline.</p>
<p>The vertex processor processes each vertex individually and doesn’t store any data about the other vertices that it has already processed or that it will process. It is responsible for at least modifying (or not) the position of the vertex and then writing it to the next shaders, usually transforming the vertex with the ModelView and Projection matrices. It does this by writing to the gl_Position, which is where OpenGL stores the location of the vertex. A vertex processor has access to OpenGL state, so it can perform operations that involve lighting for instance, and use materials, and can even access textures.<br />
So, what does a vertex shader look like? They can be quite simple. Take a look at the following example. It’s a single function that sets the value of each vertex passed to it. To be nice to everyone, no matter what graphics card they’re running, we need to make a small split here, showing two different ways of doing things.</p>
<p><strong>GLSL 1.2</strong></p><pre class="crayon-plain-tag"><code>void main() {
    vec4 v = vec4(gl_Vertex);</code></pre><p>As a quick example, the x position of the vertex is shifted over by 1 pixel:</p><pre class="crayon-plain-tag"><code>v.x += 1;
Now the final position of the vertex is set:
    gl_Position = gl_ModelViewProjectionMatrix * v;
}</code></pre><p><strong>GLSL 1.3+</strong></p><pre class="crayon-plain-tag"><code>uniform mat4 mvp; // this is set for the entire shader, it doesn&rsquo;t change for each point
in vec4 vertexIn; // this is set for each vertex, i.e it changes for each point

void main() {
    v.x += 1.;</code></pre><p><p><p>
Now the final position of the vertex is set:</p><pre class="crayon-plain-tag"><code>gl_Position = mvp * vertexIn;
}</code></pre><p>Here the vertex that is currently being operated on is used to create a new vertex: As a quick example, the x position of the vertex is shifted over by an arbitrary amount. That’s a very simple vertex shader that doesn’t alter your image in any immediately noticeable way, but it does show you how the vertex shader functions. In 1.2 the vertex passed to the shader can be accessed within that method as gl_Vertex, and its final position after the operation can be set using the gl_Position variable:</p>
<h3>Geometry Shader</h3>
<p>A geometry shader can generate new graphics primitives like points, lines, and triangles, from those primitives that were sent to the graphics card from the CPU. This means that you could get a point and turn it into a triangle or even a bunch of triangles, or get a line and turn it into a rectangle, or do real-time extrusion.</p>
<p><img class="alignright size-full wp-image-21189" title="gemo" src="http://www.creativeapplications.net/wp-content/uploads/2012/01/gemo.png" alt="" width="600" height="525" /></p>
<p>Geometry shader programs are executed after the vertex shader and before the fragment shader. As an example, if your oF application creates triangles and passes them to the vertex shader, then your geometry shader will receive one triangle at a time. What you do with those is up to you. You could, for instance, turn each triangle into 2 triangles or add additional points around each triangle. As long as you declare what your geometry shader will be getting in and what it will be churning out, everything will be passed to the fragment shader to be colored in without a problem. A very simple geometry shader looks like this:</p>
<p><strong>GLSL 1.2</strong></p><pre class="crayon-plain-tag"><code>void main() {
  for(int i = 0; I &amp;lt; gl_VerticesIn; ++i) {
     gl_FrontColor = gl_FrontColorIn[i];
     gl_Position = gl_PositionIn[i];
    EmitVertex();
  }
}</code></pre><p><strong>GLSL 1.3+</strong></p><pre class="crayon-plain-tag"><code>in vec4 vertex;
out vec4 color;
void main() {
  for(int i = 0; i &amp;lt; gl_VerticesIn; ++i) {
    gl_Position = gl_PositionIn[i];
    color = vec4( i / 4., 1 - i/4., 0, 1.);
    EmitVertex();
  }
  EmitPrimitive();
}</code></pre><p>The number of vertices being passed in with the gl_VerticesIn variable will be the same as the GL type that you’re using. If you’re using points, it’ll be one. If you’re using quads, it’ll be four. gl_Position is where you want to put the vertex that you’re creating and EmitVertex() is how you say that you’re done with a vertex. EmitPrimitive is how you tell the geometry shader that you’re done with creating geometry all together. The diagram below shows how you would create a quad out of GL_TRIANGLE_STRIP from a GL_POINT. This means that the vertex shader receives a point, manipulates its position, and then passes the coordinates of that point to the geometry shader. The geometry shader then generates the 4 points to create the quad using the received position, calls EmitPrimitive() when the quad is complete, and then passes the data on to the fragment shader.</p>
<h3>Fragment Shader</h3>
<p>The fragment shader is somewhat misleadingly named because what it really allows you to do is to change values assigned to each pixel. The vertex shader operates on the vertices, and the fragment shader operates on the pixels. By the time the fragment shader gets information passed into it by the graphics card, the color of a particular pixel has already been computed and in the fragment shader can be combined with an element like a lighting effecting, a fog effect, or a blur among many other options. The usual end result of this stage per fragment is a color value and a depth for the fragment.</p>
<p>The inputs of this stage are the pixel’s location and the fragment’s depth, whether it will be visible or altered by an effect, and color values.<br />
Just like vertex shaders, fragment shaders must also have a main() function. Just as the vertex shader provides you access to the current vertex using the gl_Vertex variable, the fragment shader provides you access to the current fragment, that is, the fragment that the fragment shader is working with when it is called, using the gl_FragColor variable. Like the gl_vertex, this is a four-dimensional vector that lets you set the RGB and alpha properties of the fragment. In the following example, the color of the fragment is set to a medium gray with full alpha:</p>
<p><strong>GLSL 1.2</strong></p><pre class="crayon-plain-tag"><code>#version 120
void main() {
        gl_FragColor = vec4(0.5, 0.5, 0.5, 1.0);
    }</code></pre><p><strong>GLSL 1.3+</strong></p><pre class="crayon-plain-tag"><code>#version 150
out vec4 color;
void main(void)
{
    color = vec4(1.0, 0.0, 0.0, 1.0);
}</code></pre><p>Notice how each of the channels is set using a floating point number from 0.0 to 1.0. The gl_FragColor is what is passed to the renderer to be displayed on the screen.</p>
<p>What we want is to be able to get a point cloud from the IR camera of the kinect and an RGB image from the RGB camera, to display them you need to assemble them. You can do this on the CPU or you can do it on the GPU, but at some point everything needs to go to the GPU so it can be drawn by the graphics card. Of the types of shaders that we&#8217;re going to focus more on the geometry shader, since our goal is to be able to make a mesh out of the points that we get quickly and in a lightweight way.</p>
<p>Probably the best way to understand this is to dig into some small demos of fun things that you can do when putting together points and shaders.</p>
<p>To save space and to keep you interested, we’re going to just look at the important parts of the applciations that are available for download and closer browsing <a href="https://github.com/joshuajnoble/CAN-Article-Code">here</a>.</p>
<p>The first application is a simple one, to introduce the basics and set the stage for what we’re going to do later on. As you can see in the picture below, we’ve got a control panel that allow you to control the drawing and the result shown behind the control panel.</p>
<p><img class="alignright size-large wp-image-21190" title="01_shape0" src="http://www.creativeapplications.net/wp-content/uploads/2012/01/01_shape0-640x375.png" alt="" width="640" height="375" /></p>
<p>We’re actually doing all the drawing in the geometry shader so we’ll unpack how that’s done. First, the Cinder application .cpp file. The github link is here. Take a look at the loadShaders() method:</p><pre class="crayon-plain-tag"><code>// Find maximum number of output vertices for geometry shader
	int32_t maxGeomOutputVertices;
	glGetIntegerv(GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT, &amp;amp; maxGeomOutputVertices);</code></pre><p>This is important: every graphics card will have a maximum number of vertices that it can output. For most modern cards this is 1024 or even more, but you want to set your shader to output only as many as you need. In this case, since we’re just demonstrating the basics, we’ll go with the max number that the card supports but in practice, you never want to do this. This is passed to the geometry shader when you actually load it onto graphics card. Each programming framework, Processing, WebGL, OF, Cinder, etc, has a slightly different syntax for this, but the basic idea is always the same: load the vertex shader, the fragment shader, and optionally the geometry shader. If you load a geometry shader you need to say what type of OpenGL primitive you’re passing to the geometry shader, what kind of OpenGL primitive you’re outputting, and the number of vertices that you’re going to be outputting. Here’s the cinder implementation that we’re using:</p><pre class="crayon-plain-tag"><code>mShaderPassThru = gl::GlslProg(
	loadResource(RES_SHADER_VERT_150),
	loadResource(RES_SHADER_FRAG_150),
	loadResource(RES_SHADER_GEOM_150),
	GL_POINTS, GL_POINTS, 1); // note: 1 point out

mShaderTransform = gl::GlslProg(
	loadResource(RES_SHADER_VERT_150),
	loadResource(RES_SHADER_FRAG_150),
	loadResource(RES_SHADER_GEOM_150),
	GL_POINTS, GL_TRIANGLE_STRIP, maxGeomOutputVertices
	); // note max points out</code></pre><p><p><p><p><p><p><p><p><p><p>
The draw() method in the first application is quite simple, draw a bunch of points and you’re good to go.</p><pre class="crayon-plain-tag"><code>// Draw points
	mShader.bind();
	glBegin(GL_POINTS);
	for (vector::const_iterator pointIt = mPoints.cbegin(); pointIt != mPoints.cend(); ++pointIt)
		gl::vertex(* pointIt);
	glEnd();
	mShader.unbind();</code></pre><p>Again, that’s Cinder, but actual shader can be used in any programming framework, so let’s dig into that a little bit because the real trick here is making a geometry shader for points.</p><pre class="crayon-plain-tag"><code>#version 120
#extension GL_EXT_geometry_shader4 : enable
#extension GL_EXT_gpu_shader4 : enable 

// Constants to match those in CPP
const int SHAPE_CIRCLE = 2;
const int SHAPE_SQUARE = 1;
const int SHAPE_TRIANGLE = 0;

// Uniforms
uniform float aspect;
uniform int shape;
uniform float size;
uniform bool transform;

// Kernel
void main(void)
{
	// Key on shape
	switch (shape)
	{

		case SHAPE_TRIANGLE:</code></pre><p><p><p><p><p><p><p><p><p><p><p><p>
To draw a triangle, we add the size times the cos and sin of each angle to the original position. After each point is set, we call EmitVertex() to the newly created vertex to the geometry that will be sent to the fragment shader. Be sure to draw counter-clockwise.</p><pre class="crayon-plain-tag"><code>gl_Position = gl_PositionIn[0] + vec4(cos(radians(270.0)) * size, sin(radians(270.0)) * size * aspect, 0.0, 0.0);
		EmitVertex();
		gl_Position = gl_PositionIn[0] + vec4(cos(radians(150.0)) * size, sin(radians(150.0)) * size * aspect, 0.0, 0.0);
		EmitVertex();
		gl_Position = gl_PositionIn[0] + vec4(cos(radians(30.0)) * size, sin(radians(30.0)) * size * aspect, 0.0, 0.0);
		EmitVertex();</code></pre><p>Call EndPrimitive() to close the shape. In this case we don’t strictly need this since we’re only drawing one primitive and the GLSL program can figure out that we’re done making our primitive, but when you have more than one primitive, it’s vitally important to call this whenever you’ve finished one of whatever type of primitive you’re creating.</p><pre class="crayon-plain-tag"><code>EndPrimitive();

		break;
		case SHAPE_SQUARE:</code></pre><p><p><p><p><p><p><p><p><p><p><p><p><p><p>
		To draw a square, we will draw two triangles, just like  above. The two triangles will share vertices, so we&#8217;ll define the vertices in advance.</p>
<pre class="crayon-plain-tag"><code>vec4 vert0 = vec4(cos(radians(315.0)) * size, sin(radians(315.0)) * size * aspect, 0.0, 0.0);
		vec4 vert1 = vec4(cos(radians(225.0)) * size, sin(radians(225.0)) * size * aspect, 0.0, 0.0);
		vec4 vert2 = vec4(cos(radians(135.0)) * size, sin(radians(135.0)) * size * aspect, 0.0, 0.0);
		vec4 vert3 = vec4(cos(radians(45.0)) * size, sin(radians(45.0)) * size * aspect, 0.0, 0.0);

			// Draw the left triangle
			gl_Position = gl_PositionIn[0] + vert0;
			EmitVertex();
			gl_Position = gl_PositionIn[0] + vert1;
			EmitVertex();
			gl_Position = gl_PositionIn[0] + vert3;
			EmitVertex();

			// Close this triangle
			EndPrimitive();

			// And now the right one
			gl_Position = gl_PositionIn[0] + vert3;
			EmitVertex();
			gl_Position = gl_PositionIn[0] + vert1;
			EmitVertex();
			gl_Position = gl_PositionIn[0] + vert2;
			EmitVertex();

			// Close the second triangle to form a quad
			EndPrimitive();

			break;
			case SHAPE_CIRCLE:

			// To draw a circle, we'll iterate through 24
			// segments and form triangles
			float twoPi = 6.283185306;
			float delta = twoPi / 24.0;
			for (float theta = 0.0; theta &amp;lt; twoPi; theta += delta)
			{
					// Draw a triangle to form a wedge of the circle
				gl_Position = gl_PositionIn[0] + vec4(cos(theta) * size, sin(theta) * size * aspect, 0.0, 0.0);
				EmitVertex();
				gl_Position = gl_PositionIn[0];
				EmitVertex();
				gl_Position = gl_PositionIn[0] + vec4(cos(theta + delta) * size, sin(theta + delta) * size * aspect, 0.0, 0.0);
				EmitVertex();
				EndPrimitive();
			}

			break;

		}

	}
}</code></pre><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p>
So that’s pretty interesting, but next let’s make boxes for all those points and then things will get more interesting.</p>
<p><img class="alignright size-large wp-image-21191" title="03_box2" src="http://www.creativeapplications.net/wp-content/uploads/2012/01/03_box2-640x375.jpg" alt="" width="640" height="375" /></p>
<p>Actually, if you’ve done any OpenGL, making a cube using a geometry shader is going to look very familiar since it involves almost the same code as the glVertex() version, only with the addition of EmitVertex() and EmitPrimitive(). First though, we’re going to dig into the Cinder application to show a few new features.</p>
<p>We’re going to use a Vertex Buffer Object to create objects and points that we can work with in the geometry shader. If VBOs aren’t familiar to you and you want to learn more about how to work with them in Cinder, check out http://www.creativeapplications.net/tutorials/guide-to-meshes-in-cinder-cinder-tutorials/</p>
<p>First, set up the mesh using a vbo layout object:</p><pre class="crayon-plain-tag"><code>// Set VBO layout, we use this to set up how the VBO is configured in the GPU memory
	mVboLayout.setStaticIndices();
	mVboLayout.setStaticPositions();

	// Iterate through the grid dimensions
	for (int32_t y = 0; y &amp;lt; mMeshHeight; y++) {
		for (int32_t x = 0; x &amp;lt; mMeshWidth; x++)
		{

			// Set the index of the vertex in the VBO so it is
			// numbered left to right, top to bottom
			mVboIndices.push_back(x + y * mMeshWidth);

			// Set the position of the vertex in world space
			mVboVertices.push_back(Vec3f((float)x - (float)mMeshWidth * 0.5f, (float)y - (float)mMeshHeight * 0.5f, 0.0f));

		}
	}</code></pre><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p>
Now we actually add all the indices and positions to the VBOMesh:</p><pre class="crayon-plain-tag"><code>mVboMesh = gl::VboMesh(mVboVertices.size(), mVboIndices.size(), mVboLayout, GL_POINTS);
	mVboMesh.bufferIndices(mVboIndices);
	mVboMesh.bufferPositions(mVboVertices);</code></pre><p>Normally you do some modificiation of the VBO on the CPU in the update() method, but we’re interested in moving as much of our processing as possible to the GPU, so we’re not doing any of that. We do however need to be able to pass variables into our shader so we can generate the wave and correctly position the view onto the mesh. We do this using Uniforms, which as mentioend eaelir in the article are values passed into the shader on a per shader basis. Not every shader (vertex, geometry, fragment) needs to read them, but they are available for all shaders. Here’s how we pass all the values into the shaders and then draw the VBOMesh:</p><pre class="crayon-plain-tag"><code>// Bind and configure shader
	mShader.bind();
	mShader.uniform(&quot;alpha&quot;, mMeshAlpha);
	mShader.uniform(&quot;amp&quot;, mMeshWaveAmplitude);
	mShader.uniform(&quot;eyePoint&quot;, mEyePoint);
	mShader.uniform(&quot;lightAmbient&quot;, mLightAmbient);
	mShader.uniform(&quot;lightDiffuse&quot;, mLightDiffuse);
	mShader.uniform(&quot;lightPosition&quot;, mLightPosition);
	mShader.uniform(&quot;lightSpecular&quot;, mLightSpecular);
	mShader.uniform(&quot;mvp&quot;, gl::getProjection() * gl::getModelView());
	mShader.uniform(&quot;phase&quot;, mElapsedSeconds);
	mShader.uniform(&quot;rotation&quot;, mBoxRotationSpeed);
	mShader.uniform(&quot;scale&quot;, mMeshScale);
	mShader.uniform(&quot;dimensions&quot;, Vec4f(mBoxDimensions));
	mShader.uniform(&quot;shininess&quot;, mLightShininess);
	mShader.uniform(&quot;speed&quot;, mMeshWaveSpeed);
	mShader.uniform(&quot;transform&quot;, mBoxEnabled);
	mShader.uniform(&quot;uvmix&quot;, mMeshUvMix);
	mShader.uniform(&quot;width&quot;, mMeshWaveWidth);

	// Draw VBO
	gl::draw(mVboMesh);

	// Stop drawing
	mShader.unbind();</code></pre><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p>
Some of these lines are worth annotating a bit further. For instance:</p>
<p>mShader.uniform(&#8220;mvp&#8221;, gl::getProjection() * gl::getModelView());</p>
<p>In previous versions of GLSL, you could access the ModelView matrix through a built in variable. In GLSL 1.5 though you simply pass the matrix in using a uniform. This line:</p>
<p>mShader.uniform(&#8220;eyePoint&#8221;, mEyePoint);</p>
<p>allows us to position our generated geometry to the camera. This is really powerful because all you need is a 3D vector and you can correctly calculate the eye perspective onto a scene, I’m sure you can imagine how this will be very useful when we finally get to the Kinect portion of this tutorial. That eye position is vital, because it&#8217;s how we use the place that you want to look when we generate all the geometry. In the geometry shader you can see how these are all put to use:</p><pre class="crayon-plain-tag"><code>uniform vec4 dimensions;
uniform mat4 mvp;
uniform float rotation;
uniform bool transform;

// Input attributes from the vertex shader
in vec4 vertex[];

// Output attributes
out vec4 normal;
out vec4 position;
out vec2 uv;

// Adds a vertex to the current primitive
void addVertex(vec2 texCoord, vec4 vert, vec4 norm)
{

	// Assign values to output attributes
	normal = norm;
	uv = texCoord;
	position = vert;
	gl_Position = vert;

	// Create vertex
	EmitVertex();

}

// Kernel
void main(void)
{</code></pre><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p>
Now we need to calculate what the position should be based on the view so that we can send that on to the fragment shader.</p><pre class="crayon-plain-tag"><code>position = mvp * vertex[0];

	// Transform point to box
	if (transform)
	{

		// Use Y position for phase
		float angle = vertex[0].y * rotation;</code></pre><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p>
The rotation matrix we&#8217;re making here is what allows us to correctly position each box after twisting it to fit the shape of our wave. If these are a bit fuzzy for you, I find <a href="http://knol.google.com/k/matrices-for-3d-applications-translation-rotation#">this</a> to be an excellent refresher or introduction.</p><pre class="crayon-plain-tag"><code>// Define rotation matrix
		mat4 rotMatrix;
		rotMatrix[0].x = 1.0 + cos(angle);
		rotMatrix[0].y = 1.0 + -sin(angle);
		rotMatrix[0].z = 1.0 + -rotMatrix[0].x;
		rotMatrix[0].w = 0.0;
		rotMatrix[1].x = 1.0 + -rotMatrix[0].z;
		rotMatrix[1].y = 1.0 + -rotMatrix[0].y;
		rotMatrix[1].z = 1.0 + -rotMatrix[0].x;
		rotMatrix[1].w = 0.0;
		rotMatrix[2].x = 0.0;
		rotMatrix[2].y = 0.0;
		rotMatrix[2].z = 1.0;
		rotMatrix[2].w = 0.0;
		rotMatrix[3].x = 0.0;
		rotMatrix[3].y = 0.0;
		rotMatrix[3].z = 0.0;
		rotMatrix[3].w = 1.0;</code></pre><p>Now we need vertices for our box. This can broken down as:<br />
<code>vertex = the view matrix * (our position from the vertex shader + (the size of the box * the corner of the box that we're generating) * the amount that it should be twisted)</code></p><pre class="crayon-plain-tag"><code>// Define vertices
		vec4 vert0 = mvp * (vertex[0] + vec4(dimensions * vec4(-1.0, -1.0, -1.0, 0.0)) * rotMatrix); // 0 ---
		vec4 vert1 = mvp * (vertex[0] + vec4(dimensions * vec4( 1.0, -1.0, -1.0, 0.0)) * rotMatrix); // 1 +--
		vec4 vert2 = mvp * (vertex[0] + vec4(dimensions * vec4(-1.0,  1.0, -1.0, 0.0)) * rotMatrix); // 2 -+-
		vec4 vert3 = mvp * (vertex[0] + vec4(dimensions * vec4( 1.0,  1.0, -1.0, 0.0)) * rotMatrix); // 3 ++-
		vec4 vert4 = mvp * (vertex[0] + vec4(dimensions * vec4(-1.0, -1.0,  1.0, 0.0)) * rotMatrix); // 4 --+
		vec4 vert5 = mvp * (vertex[0] + vec4(dimensions * vec4( 1.0, -1.0,  1.0, 0.0)) * rotMatrix); // 5 +-+
		vec4 vert6 = mvp * (vertex[0] + vec4(dimensions * vec4(-1.0,  1.0,  1.0, 0.0)) * rotMatrix); // 6 -++
		vec4 vert7 = mvp * (vertex[0] + vec4(dimensions * vec4( 1.0,  1.0,  1.0, 0.0)) * rotMatrix); // 7 +++

		// Define normals
		vec4 norm0 = mvp * vec4( 1.0,  0.0,  0.0, 0.0); // Right
		vec4 norm1 = mvp * vec4( 0.0,  1.0,  0.0, 0.0); // Top
		vec4 norm2 = mvp * vec4( 0.0,  0.0,  1.0, 0.0); // Front
		vec4 norm3 = mvp * vec4(-1.0,  0.0,  0.0, 0.0); // Left
		vec4 norm4 = mvp * vec4( 0.0, -1.0,  0.0, 0.0); // Bottom
		vec4 norm5 = mvp * vec4( 0.0,  0.0, -1.0, 0.0); // Back

		// Define UV coordinates
		vec2 uv0 = vec2(0.0, 0.0); // --
		vec2 uv1 = vec2(1.0, 0.0); // +-
		vec2 uv2 = vec2(1.0, 1.0); // ++
		vec2 uv3 = vec2(0.0, 1.0); // -+</code></pre><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p>
Now we get in to simply making the sides of a cube:</p><pre class="crayon-plain-tag"><code>// left
		addVertex(uv1, vert5, norm3);
		addVertex(uv2, vert7, norm3);
		addVertex(uv0, vert4, norm3);
		addVertex(uv3, vert6, norm3);
		EndPrimitive();

		// Right
		addVertex(uv3, vert3, norm0);
		addVertex(uv0, vert1, norm0);
		addVertex(uv2, vert2, norm0);
		addVertex(uv1, vert0, norm0);
		EndPrimitive();

		// Top
		addVertex(uv1, vert7, norm1);
		addVertex(uv2, vert3, norm1);
		addVertex(uv0, vert6, norm1);
		addVertex(uv3, vert2, norm1);
		EndPrimitive();

		// Bottom
		addVertex(uv1, vert1, norm4);
		addVertex(uv2, vert5, norm4);
		addVertex(uv0, vert0, norm4);
		addVertex(uv3, vert4, norm4);
		EndPrimitive();

		// Front
		addVertex(uv2, vert3, norm2);
		addVertex(uv3, vert7, norm2);
		addVertex(uv1, vert1, norm2);
		addVertex(uv0, vert5, norm2);
		EndPrimitive();

		// Back
		addVertex(uv2, vert6, norm5);
		addVertex(uv1, vert2, norm5);
		addVertex(uv3, vert4, norm5);
		addVertex(uv0, vert0, norm5);
		EndPrimitive();

	}
	else
	{

		// Pass-thru
		gl_Position = position;
		EmitVertex();
		EndPrimitive();

	}

}</code></pre><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p>
Now the fragment shader and yes, this seems a bit complex, but is actually fairly simple.</p><pre class="crayon-plain-tag"><code>#version 150

// Uniforms
uniform float alpha;
uniform vec3 eyePoint;
uniform vec4 lightAmbient;
uniform vec4 lightDiffuse;
uniform vec4 lightSpecular;
uniform vec3 lightPosition;
uniform float shininess;
uniform bool transform;
uniform float uvmix;</code></pre><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p>
The geometry shader is outputting a normal, position, and uv coordinate for the fragment shader to use in coloring:</p><pre class="crayon-plain-tag"><code>// Input attributes
in vec4 normal;
in vec4 position;
in vec2 uv;</code></pre><p>And here&#8217;s what is actually output:</p><pre class="crayon-plain-tag"><code>// Output attributes
out vec4 color;

// Kernel
void main(void)
{
	// Transform point to box
	if (transform)
	{

		// Initialize color
		color = vec4(0.0, 0.0, 0.0, 0.0);

		// Normalized eye position
		vec3 eye = normalize(-eyePoint);</code></pre><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p>
Lights are really a light position and a reflection vector. That reflection needs to take the position of the light and normal of the surface into account to look &#8220;right&#8221;, so we normalize the reflected light vector using the reflect() method, which is built into GLSL.</p><pre class="crayon-plain-tag"><code>// Calculate light and reflection positions
		vec3 light = normalize(lightPosition.xyz - position.xyz);
		vec3 reflection = normalize(-reflect(light, normal.xyz));</code></pre><p>This is where what people think of as materials are actually generated: putting together the value of a light, a surface color, and a reflection together mathematically. That becomes the color of our pixel and voila, our geometry is generated and colored correctly to match what we&#8217;d expect from the color of the box and the light shining onto it.</p><pre class="crayon-plain-tag"><code>// Calculate ambient, diffuse, and specular values
		vec4 ambient = lightAmbient;
		vec4 diffuse = clamp(lightDiffuse * max(dot(normal.xyz, light), 0.0), 0.0, 1.0);
		vec4 specular = clamp(lightSpecular * pow(max(dot(reflection, eye), 0.0), 0.3 * shininess), 0.0, 1.0); 

		// Set color from light
		color = ambient + diffuse + specular;

		// Mix with UV map
		color = mix(color, vec4(uv.s, uv.t, 1.0, 1.0), uvmix);

		// Set alpha
		color.a = color.a * alpha;

	}
	else
	{

		// Color point white
		color = vec4(1.0, 1.0, 1.0, 1.0);

	}

}</code></pre><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p>
Here&#8217;s another view of what that looks like:</p>
<p><img class="alignright size-large wp-image-21317" title="03_box0" src="http://www.creativeapplications.net/wp-content/uploads/2012/01/03_box0-640x375.jpg" alt="" width="640" height="375" /></p>
<p>So now you&#8217;ve seen how to make geometry and give it color, we&#8217;re going to let you take a breather and in part 2, generate some geometry from a Kinect point cloud data using these techniques. It&#8217;s gonna be awesome :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.creativeapplications.net/tutorials/shaders-geometry-and-the-kinect-part-1-cinder-tutorials/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Kinetic Logo at Deutsche Bank [c++]</title>
		<link>http://www.creativeapplications.net/c/kinetic-logo-at-deutsche-bank-c/</link>
		<comments>http://www.creativeapplications.net/c/kinetic-logo-at-deutsche-bank-c/#comments</comments>
		<pubDate>Tue, 20 Dec 2011 21:20:47 +0000</pubDate>
		<dc:creator>Filip</dc:creator>
				<category><![CDATA[c++]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[art + com]]></category>
		<category><![CDATA[Deutsche Bank]]></category>
		<category><![CDATA[Frankfurt]]></category>
		<category><![CDATA[installation]]></category>
		<category><![CDATA[kinetic]]></category>
		<category><![CDATA[mapping]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[projection]]></category>
		<category><![CDATA[structure]]></category>

		<guid isPermaLink="false">http://www.creativeapplications.net/?p=20882</guid>
		<description><![CDATA[In the redesigned Deutsche Bank headquarters in Frankfurt am Main, the BrandSpace designed to provide an insight into the bank’s history, present, business areas and its brand philosophy. The Deutsche Bank Logo by Anton Stankowski is used as a starting point for ART + COM for spatial design and is translated into three-dimensional kinect structure.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.creativeapplications.net/wp-content/uploads/2011/12/dbbrandspace_gallery_06.png"><img class="alignnone size-large wp-image-20888" title="dbbrandspace_gallery_06" src="http://www.creativeapplications.net/wp-content/uploads/2011/12/dbbrandspace_gallery_06-640x359.png" alt="" width="640" height="359" /></a></p>
<p>In the redesigned Deutsche Bank headquarters in Frankfurt am Main, the BrandSpace designed to provide an insight into the bank’s history, present, business areas and its brand philosophy. The Deutsche Bank Logo by <a href="http://www.stankowski06.de/">Anton Stankowski</a> is used as a starting point for ART + COM for spatial design and is translated into three-dimensional kinect structure.</p>
<p><a href="http://www.creativeapplications.net/wp-content/uploads/2011/12/dbbrandspace_gallery_08.png"><img class="alignnone size-medium wp-image-20886" title="dbbrandspace_gallery_08" src="http://www.creativeapplications.net/wp-content/uploads/2011/12/dbbrandspace_gallery_08-320x179.png" alt="" width="320" height="179" /></a><a href="http://www.creativeapplications.net/wp-content/uploads/2011/12/dbbrandspace_gallery_06.png"><img class="alignnone size-medium wp-image-20888" title="dbbrandspace_gallery_06" src="http://www.creativeapplications.net/wp-content/uploads/2011/12/dbbrandspace_gallery_06-320x179.png" alt="" width="320" height="179" /></a></p>
<blockquote<p><a href="http://www.creativeapplications.net/c/kinetic-logo-at-deutsche-bank-c/?utm_source=feed&utm_campaign=rss-mo-more&utm_medium=rss">Continue reading.... Kinetic Logo at Deutsche Bank [c++]</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.creativeapplications.net/c/kinetic-logo-at-deutsche-bank-c/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>µtagger Alpha: A GML Field Recorder [c++, Objects]</title>
		<link>http://www.creativeapplications.net/objects/%c2%b5tagger-alpha-a-gml-field-recorder-c-objects/</link>
		<comments>http://www.creativeapplications.net/objects/%c2%b5tagger-alpha-a-gml-field-recorder-c-objects/#comments</comments>
		<pubDate>Fri, 16 Dec 2011 16:01:17 +0000</pubDate>
		<dc:creator>Filip</dc:creator>
				<category><![CDATA[c++]]></category>
		<category><![CDATA[Objects]]></category>
		<category><![CDATA[graffiti]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[Joshua Noble]]></category>
		<category><![CDATA[led]]></category>
		<category><![CDATA[recording]]></category>
		<category><![CDATA[scan]]></category>
		<category><![CDATA[sdcard]]></category>
		<category><![CDATA[teensy++]]></category>

		<guid isPermaLink="false">http://www.creativeapplications.net/?p=20779</guid>
		<description><![CDATA[Last September, GML group launched The GML Field Recorder Challenge. The project was an invitation to artists and hackers to design a DIY hardware and software solution for unobtrusively recording graffiti motion data during a graffiti writer’s normal practice in the city. The winning project would receive 1,200 euros. Earlier this year, our guest writer and contributor Joshua [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.creativeapplications.net/wp-content/uploads/2011/12/utagger02.png"><img class="alignnone size-full wp-image-20789" title="utagger02" src="http://www.creativeapplications.net/wp-content/uploads/2011/12/utagger02.png" alt="" width="639" height="359" /></a></p>
<p>Last September, GML group launched The GML Field Recorder Challenge. The project was an invitation to artists and hackers to design a DIY hardware and software solution for unobtrusively recording graffiti motion data during a graffiti writer’s normal practice in the city. The winning project would receive 1,200 euros.</p>
<p>Earlier this year, our guest writer and contributor <a href="http://www.creativeapplications.net/author/joshua/">Joshua Noble</a> took on the challenge by creating a custom piece of hardware for recording graffiti tags that costs no more than <strong>$</strong>170.97 or 126.81 Euros. The setup is simply based around using an optical mouse that knows how it&#8217;s being tilted. The ultra-bright LED was installed to ensure that the mouse can read properly off the wall, a combination of special lenses, acrylic cut casing, batteries, SDCard slot, Teensy++ board, and a bunch of wires. Once you have your tagged data saved on the SDCard, it&#8217;s easy enough to use it in one of freely available GML processing/openFrameworks apps to visualize or cut templates.</p>
<p><a href="http://www.creativeapplications.net/wp-content/uploads/2011/12/utagger03.jpg"><img class="alignnone size-medium wp-image-20785" title="utagger03" src="http://www.creativeapplications.net/wp-content/uploads/2011/12/utagger03-320x180.jpg" alt="" width="320" height="180" /></a><a href="http://www.creativeapplications.net/wp-content/uploads/2011/12/utagger05.jpg"><img class="alignnone size-medium wp-image-20787" title="utagger05" src="http://www.creativeapplications.net/wp-content/uploads/2011/12/utagger05-320x180.jpg" alt="" width="320" height="180" /></a></p><p><a href="http://www.creativeapplications.net/objects/%c2%b5tagger-alpha-a-gml-field-recorder-c-objects/?utm_source=feed&utm_campaign=rss-mo-more&utm_medium=rss">Continue reading.... µtagger Alpha: A GML Field Recorder [c++, Objects]</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.creativeapplications.net/objects/%c2%b5tagger-alpha-a-gml-field-recorder-c-objects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Versus [c++, Objects]</title>
		<link>http://www.creativeapplications.net/objects/versus-c-objects/</link>
		<comments>http://www.creativeapplications.net/objects/versus-c-objects/#comments</comments>
		<pubDate>Fri, 02 Dec 2011 21:10:11 +0000</pubDate>
		<dc:creator>Filip</dc:creator>
				<category><![CDATA[c++]]></category>
		<category><![CDATA[Objects]]></category>
		<category><![CDATA[art]]></category>
		<category><![CDATA[David Letellier]]></category>
		<category><![CDATA[installation]]></category>
		<category><![CDATA[kinetic]]></category>
		<category><![CDATA[manufacture]]></category>
		<category><![CDATA[robotics]]></category>
		<category><![CDATA[Sound]]></category>

		<guid isPermaLink="false">http://www.creativeapplications.net/?p=20534</guid>
		<description><![CDATA[Versus is the latest installation David Letellier, combining the robot mechanics with David&#8217;s long time area of exploration - kinetic sound installations, beautifully made. Previously collaborated with Lab[au] on Tessel (see detailed post on CAN), Versus consisting of two kinetic sculptures placed face to face in a space. Each sculpture is made out of 12 triangular panels, hinged and powered by [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.creativeapplications.net/wp-content/uploads/2011/12/VERSUS04.png"><img class="alignnone size-large wp-image-20542" title="VERSUS04" src="http://www.creativeapplications.net/wp-content/uploads/2011/12/VERSUS04-640x360.png" alt="" width="640" height="360" /></a></p>
<p>Versus is the latest installation David Letellier, combining the robot mechanics with David&#8217;s long time area of exploration - kinetic sound installations, beautifully made. Previously collaborated with Lab[au] on Tessel (see <a href="http://www.creativeapplications.net/objects/tessel-the-details-objects-c/">detailed post on CAN</a>), Versus consisting of two kinetic sculptures placed face to face in a space. Each sculpture is made out of 12 triangular panels, hinged and powered by six linear actuators, controlled by a custom software. At the center of each corolla, a loudspeaker and a microphone allow to play and record sounds.</p>
<p>At regular intervals, each sculpture produces a sound, simultaneously recorded and analyzed by the opposite sculpture, which then moves according to the frequencies of this sound. Like a feedback loop, it then plays back the recorded sound, with the errors and disturbances caused by the reverberating space and the visitors.</p>
<p><a href="http://www.creativeapplications.net/wp-content/uploads/2011/12/VERSUS02.png"><img class="alignnone size-medium wp-image-20544" title="VERSUS02" src="http://www.creativeapplications.net/wp-content/uploads/2011/12/VERSUS02-e1322860049823-320x179.png" alt="" width="320" height="179" /></a><a href="http://www.creativeapplications.net/wp-content/uploads/2011/12/VERSUS03.png"><img class="alignnone size-medium wp-image-20543" title="VERSUS03" src="http://www.creativeapplications.net/wp-content/uploads/2011/12/VERSUS03-e1322860076651-320x177.png" alt="" width="320" height="177" /></a></p><p><a href="http://www.creativeapplications.net/objects/versus-c-objects/?utm_source=feed&utm_campaign=rss-mo-more&utm_medium=rss">Continue reading.... Versus [c++, Objects]</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.creativeapplications.net/objects/versus-c-objects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TSUMIKI [c++, Objects]</title>
		<link>http://www.creativeapplications.net/objects/tsumiki-c-objects/</link>
		<comments>http://www.creativeapplications.net/objects/tsumiki-c-objects/#comments</comments>
		<pubDate>Wed, 09 Nov 2011 17:34:03 +0000</pubDate>
		<dc:creator>Filip</dc:creator>
				<category><![CDATA[c++]]></category>
		<category><![CDATA[Objects]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[block]]></category>
		<category><![CDATA[children]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[opencv]]></category>
		<category><![CDATA[play]]></category>
		<category><![CDATA[projection]]></category>
		<category><![CDATA[projection mapping]]></category>
		<category><![CDATA[toys]]></category>

		<guid isPermaLink="false">http://www.creativeapplications.net/?p=20176</guid>
		<description><![CDATA[Created by a newly formed sister company of Aircord.jp: PPP, TSUMIKI is a new series of toys that incorporate computer vision to both recognise physical blocks and project content onto them. The idea behind PPP (Permanent Play Project) is to explore new ways of “playing” for the next generation.  They rearrange longtime beloved toys such as [...]]]></description>
			<content:encoded><![CDATA[<p><iframe src="http://player.vimeo.com/video/31837251?title=0&amp;byline=0&amp;portrait=0&amp;color=D8DF00" frameborder="0" width="640" height="360"></iframe></p>
<p>Created by a newly formed sister company of Aircord.jp: PPP, TSUMIKI is a new series of toys that incorporate computer vision to both recognise physical blocks and project content onto them.</p>
<p>The idea behind PPP (Permanent Play Project) is to explore new ways of “playing” for the next generation. <em> They rearrange longtime beloved toys such as blocks to bring a whole new value to them.</em> In TSUMIKI, various forest animals appear on the blocks according to the ways you stack them. When two sets of blocks are placed close to each other, it would be in the communication mode, where the animals greet to each other or play together. You can also play with numbers using the toy blocks. When you place the blocks in an order, a number would appear each time at random and their equation is projected on the blocks.</p>
<p><a href="http://www.creativeapplications.net/wp-content/uploads/2011/11/tsumiki03.png"><img title="tsumiki03" src="http://www.creativeapplications.net/wp-content/uploads/2011/11/tsumiki03-320x179.png" alt="" width="320" height="179" /></a><a href="http://www.creativeapplications.net/wp-content/uploads/2011/11/tsumiki05.png"><img class="alignnone size-medium wp-image-20183" title="tsumiki05" src="http://www.creativeapplications.net/wp-content/uploads/2011/11/tsumiki05-320x178.png" alt="" width="320" height="179" /></a></p><p><a href="http://www.creativeapplications.net/objects/tsumiki-c-objects/?utm_source=feed&utm_campaign=rss-mo-more&utm_medium=rss">Continue reading.... TSUMIKI [c++, Objects]</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.creativeapplications.net/objects/tsumiki-c-objects/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SideBySide [c++, Mobile, Mac, Games]</title>
		<link>http://www.creativeapplications.net/games/sidebyside-c-mobile-mac-games/</link>
		<comments>http://www.creativeapplications.net/games/sidebyside-c-mobile-mac-games/#comments</comments>
		<pubDate>Fri, 14 Oct 2011 21:48:01 +0000</pubDate>
		<dc:creator>Filip</dc:creator>
				<category><![CDATA[c++]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[accelerometer]]></category>
		<category><![CDATA[camera]]></category>
		<category><![CDATA[disney]]></category>
		<category><![CDATA[gyroscope]]></category>
		<category><![CDATA[ir]]></category>
		<category><![CDATA[Karl D.D. Willis]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[pico]]></category>
		<category><![CDATA[projector]]></category>
		<category><![CDATA[qrcode]]></category>

		<guid isPermaLink="false">http://www.creativeapplications.net/?p=19693</guid>
		<description><![CDATA[Karl D.D. Willis, Ivan Poupyrev, Scott E. Hudson and Moshe Mahler have just released details of their latest project at Disney Research, a novel interactive system that allows multiple people to play and work together using a custom handheld device. The device combines handheld projector, IR camera and a ranging sensor. The project is a step forward [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.creativeapplications.net/wp-content/uploads/2011/10/sidebyside-computer.jpg"><img class="alignnone size-large wp-image-19701" title="sidebyside-computer" src="http://www.creativeapplications.net/wp-content/uploads/2011/10/sidebyside-computer-640x424.jpg" alt="" width="640" height="424" /></a></p>
<p>Karl D.D. Willis, Ivan Poupyrev, Scott E. Hudson and Moshe Mahler have just released details of their latest project at Disney Research, a novel interactive system that allows multiple people to play and work together using a custom handheld device. The device combines handheld projector, IR camera and a ranging sensor. The project is a step forward from <a href="http://www.creativeapplications.net/games/motionbeam-ipod-touch-c-games/">MotionBeam</a>, first project by members of the team developed with Disney and  Computational Design Lab at Carnegie Mellon University.</p>
<blockquote><p>The system is immediate and simple: users simply project onto a surface and their projection becomes aware and responsive to other projections nearby. Interaction can range from projector-based games, such as boxing with projected characters, to everyday tasks such as exchanging contact information by &#8216;dragging and dropping&#8217; onto another user&#8217;s projection.</p></blockquote>
<p>The system consists of a hybrid mobile projector that outputs both visible and invisible projections at the same time. The invisible projection contains tracking data that can be recognised by the device camera, allowing accurate location tracking of multiple projections and lightweight communication between devices. The games range from boxing match to task management and file exchange. See video for details.</p>
<p><a href="http://www.creativeapplications.net/wp-content/uploads/2011/10/sidebyside-applications.jpg"><img class="alignnone size-large wp-image-19700" title="sidebyside-applications" src="http://www.creativeapplications.net/wp-content/uploads/2011/10/sidebyside-applications-640x426.jpg" alt="" width="640" height="426" /></a></p><p><a href="http://www.creativeapplications.net/games/sidebyside-c-mobile-mac-games/?utm_source=feed&utm_campaign=rss-mo-more&utm_medium=rss">Continue reading.... SideBySide [c++, Mobile, Mac, Games]</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.creativeapplications.net/games/sidebyside-c-mobile-mac-games/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Visual Editions [Profile, iPad]</title>
		<link>http://www.creativeapplications.net/processing/visual-editions-profile-ipad/</link>
		<comments>http://www.creativeapplications.net/processing/visual-editions-profile-ipad/#comments</comments>
		<pubDate>Thu, 11 Aug 2011 10:23:01 +0000</pubDate>
		<dc:creator>Filip</dc:creator>
				<category><![CDATA[c++]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[Processing]]></category>
		<category><![CDATA[Profile]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[format]]></category>
		<category><![CDATA[packaging]]></category>
		<category><![CDATA[print]]></category>
		<category><![CDATA[Universal Everything]]></category>
		<category><![CDATA[Visual Editions]]></category>

		<guid isPermaLink="false">http://www.creativeapplications.net/?p=18480</guid>
		<description><![CDATA[Visual Editions, nicknamed VE, is a London-based book publisher, started in early 2009 by Anna and Britt. The idea for VE comes from our joint love of books and a (mischievous) desire to do things differently, so that everything we do translates into a new experience for the readers as well as for all the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.creativeapplications.net/wp-content/uploads/2011/08/VE02.jpg"><img class="alignnone size-large wp-image-18492" title="VE02" src="http://www.creativeapplications.net/wp-content/uploads/2011/08/VE02-640x480.jpg" alt="" width="640" height="480" /></a></p>
<p><em>Visual Editions</em>, nicknamed VE, is a London-based book publisher, started in early 2009 by Anna and Britt. The idea for VE comes from our joint love of books and a (mischievous) desire to do things differently, so that everything we do translates into a new experience for the readers as well as for all the writers and designers VE work with.</p>
<p><em>We wondered why there is such a large divide between text-driven literary books on the one hand and picture-driven art and design books on the other. And we wondered why this divide seems so extreme, when most of us compute visuals in our everyday more than ever before. We believe this visual everydayness adds to the way we read, it adds to the way we experience what we read and the way we absorb and understand the way stories are told: through words and pictures.</em></p><p><a href="http://www.creativeapplications.net/processing/visual-editions-profile-ipad/?utm_source=feed&utm_campaign=rss-mo-more&utm_medium=rss">Continue reading.... Visual Editions [Profile, iPad]</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.creativeapplications.net/processing/visual-editions-profile-ipad/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>High Arctic by UVA [c++, Events]</title>
		<link>http://www.creativeapplications.net/events/high-arctic-by-uva-c-events/</link>
		<comments>http://www.creativeapplications.net/events/high-arctic-by-uva-c-events/#comments</comments>
		<pubDate>Fri, 15 Jul 2011 22:28:05 +0000</pubDate>
		<dc:creator>Filip</dc:creator>
				<category><![CDATA[c++]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[d3]]></category>
		<category><![CDATA[exhibition]]></category>
		<category><![CDATA[fluids]]></category>
		<category><![CDATA[installation]]></category>
		<category><![CDATA[light]]></category>
		<category><![CDATA[particles]]></category>
		<category><![CDATA[uva]]></category>
		<category><![CDATA[weather]]></category>

		<guid isPermaLink="false">http://www.creativeapplications.net/?p=17770</guid>
		<description><![CDATA[Photos by John Adrian Currently on display at the National Maritime Museum is a collaboration between United Visual Artists (UVA) and Cape Farewell, an installation High Arctic. This is an exhibition with no touchscreens, no static photographs, and no panels with text: instead High Arctic is an immersive, responsive environment. As you approach the entrance you are given an ultraviolet torch, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.creativeapplications.net/wp-content/uploads/2011/07/HighArctic01.jpg"><img class="alignnone size-large wp-image-17777" title="HighArctic01" src="http://www.creativeapplications.net/wp-content/uploads/2011/07/HighArctic01-640x397.jpg" alt="" width="640" height="397" /></a></p>
<p><small> Photos by John Adrian </small></p>
<p>Currently on display at the National Maritime Museum is a collaboration between United Visual Artists (UVA) and Cape Farewell, an installation <em>High Arctic</em>. This is an exhibition with no touchscreens, no static photographs, and no panels with text: instead High Arctic is an immersive, responsive environment. As you approach the entrance you are given an ultraviolet torch, met by darkness and an overwhelming array of columns of varying height occupying the space. Ultraviolet torches unlock hidden elements whilst constantly shifting patterns of interactive projections react to visitors approaching. As you &#8220;embark on this journey&#8221; of discovery, Max Eastley and Henrik Ekeus&#8217;s generative soundscape flow through the gallery, weaving in the voices of arctic explorers across the centuries&#8230;</p><p><a href="http://www.creativeapplications.net/events/high-arctic-by-uva-c-events/?utm_source=feed&utm_campaign=rss-mo-more&utm_medium=rss">Continue reading.... High Arctic by UVA [c++, Events]</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.creativeapplications.net/events/high-arctic-by-uva-c-events/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

