<?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>Rozengain.com - Creative Technology Blog</title>
	<atom:link href="http://www.rozengain.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rozengain.com/blog</link>
	<description></description>
	<lastBuildDate>Fri, 20 Jan 2012 15:46:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Blender Cycles Texture Nodes How-to</title>
		<link>http://www.rozengain.com/blog/2012/01/20/blender-cycles-texture-nodes-how-to/</link>
		<comments>http://www.rozengain.com/blog/2012/01/20/blender-cycles-texture-nodes-how-to/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 15:46:13 +0000</pubDate>
		<dc:creator>Dennis</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Blender]]></category>
		<category><![CDATA[cycles]]></category>
		<category><![CDATA[node]]></category>
		<category><![CDATA[texture]]></category>

		<guid isPermaLink="false">http://www.rozengain.com/blog/?p=795</guid>
		<description><![CDATA[Blender&#8217;s current internal renderer is quite old and is being updated with a modern renderer called Cycles. It is included in the current version but you have to manually select it. It&#8217;s still in its early stages and still has a limited feature set. The results are already very promising though. They look much more [...]]]></description>
			<content:encoded><![CDATA[<p>Blender&#8217;s current internal renderer is quite old and is being updated with a modern renderer called <a title="Blender Cycles Render Engine" href="http://wiki.blender.org/index.php/Doc:2.6/Manual/Render/Cycles">Cycles</a>.<br />
It is included in the current version but you have to manually select it. It&#8217;s still in its early stages and still has a limited feature set.<br />
The results are already very promising though. They look much more realistic and you can see a render preview inside the 3D view!<br />
The performance is also much, much better. It uses the GPU for rendering (OpenCL/CUDA) which speeds things up significantly.<br />
Experimental builds can be grabbed from <a title="Download Experimental Blender Builds" href="http://graphicall.org/">http://www.graphicall.org</a>. For the best performance select a build that has &#8220;<a title="Blender Cycles Importance Sampling" href="http://www.blendernation.com/2012/01/19/cycles-importance-sampling/">Importance Sampling</a>&#8220;. This reduced the render time and the amount of noise.</p>
<p>More or less a note-to-self, this is how you configure a <a title="Blender Cycles Texture Nodes" href="http://wiki.blender.org/index.php/Doc:2.6/Manual/Render/Cycles/Nodes/Textures">texture node</a> in Cycles (I couldn&#8217;t really find this anywhere):</p>
<p><img class="alignnone" title="Blender Cycles Texture Node Configuration" src="/files/blender-cycles-texture-node.jpg" alt="" width="550" height="396" /></p>
<p>which results in:</p>
<p><img class="alignnone" title="Blender Cycles Musgrave Material" src="/files/blender-cycles-musgrave.jpg" alt="" width="550" height="396" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rozengain.com/blog/2012/01/20/blender-cycles-texture-nodes-how-to/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rajawali Tutorial 4: Optimisation</title>
		<link>http://www.rozengain.com/blog/2012/01/16/rajawali-tutorial-4-optimisation/</link>
		<comments>http://www.rozengain.com/blog/2012/01/16/rajawali-tutorial-4-optimisation/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 09:57:53 +0000</pubDate>
		<dc:creator>Dennis</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Rajawali]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[OpenGL ES]]></category>
		<category><![CDATA[optimization]]></category>

		<guid isPermaLink="false">http://www.rozengain.com/blog/?p=782</guid>
		<description><![CDATA[The onSurfaceCreated() method in the Renderer is called every time the rendering starts or whenever the context is lost. This typically happens when the orientation changes or when the device wakes up after going to sleep. When the context is lost, all the textures are deleted from memory. This is not something Rajawali inflicts upon [...]]]></description>
			<content:encoded><![CDATA[<p>The onSurfaceCreated() method in the Renderer is called every time the rendering starts or whenever the context is lost. This typically happens when the orientation changes or when the device wakes up after going to sleep.</p>
<p>When the context is lost, all the textures are deleted from memory. This is not something Rajawali inflicts upon you. This is the way OpenGL ES on Android works. So you always have to re-create your textures in the onSurfaceCreated() method.</p>
<p>Object instantiation however is something that needs to be done only once. So in onSurfaceCreated you could use the following code (make sure you set mClearChildren to false):</p>
<pre><code>@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
	mClearChildren = false;

	if(sceneInitialized == false) {
		mLight= new DirectionalLight();
		mLight.setPosition(3, 5, -3);

		mSphere =  = new Sphere(1, 24, 24);
		mSphere.addLight(mLight);
		addChild(mSphere);
	}
	SimpleMaterial simple = new SimpleMaterial();
	mSphere.setMaterial(simple);
	Bitmap texture = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.mytexture);
	mSphere.addTexture(mTextureManager.addTexture(texture));
}
</code></pre>
<p>This speeds things up significantly when the context has to be re-created, especially when you use large models.</p>
<p>There&#8217;s another optimisation you can use when large models are involved. It&#8217;s called serialization. This prevents you from having to load a .obj file and parse it every time the application starts up. It basically writes all the relevant data (vertices, indices, normal, texture coordinates and colors) to a binary file on disk.</p>
<p>So the .obj file has to be loaded only once during development. Once the file has loaded you can save it to the sdcard.<br />
In order to do this you first have to set the permission in AndroidManifest.xml:</p>
<pre><code>&lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/&gt;
</code></pre>
<p>Then the .obj model can be loaded in and turned into a serialized file:</p>
<pre><code>FileOutputStream fos;
try {
	// GET SDCARD PATH
	File sdcardStorage = Environment.getExternalStorageDirectory();
	String sdcardPath = sdcardStorage.getParent() + java.io.File.separator + sdcardStorage.getName();

    // CREATE A NEW FILE TO WRITE THE DATA TO
	File f = new File( sdcardPath+File.separator + "my_serialized_model.ser");
	fos = new FileOutputStream(f);
	ObjectOutputStream os = new ObjectOutputStream(fos);

	// GET THE .OBJ FILE AND PARSE IT
	ObjParser parser = new ObjParser(mContext.getResources(), mTextureManager, R.raw.my_model_obj);
	parser.parse();

	// WRITE THE OBJECT TO DISK USING BaseObject3D's toSerializedObject3D() METHOD
	os.writeObject(parser.getParsedObject().getChildByName("MyModelObjectName").toSerializedObject3D());
	os.close();
} catch (Exception e) {
	e.printStackTrace();
}
</pre>
<p></code></p>
<p>When this is done the code and the .obj file can be discarded. The serialized file is written to the sd card and should be copied into to your resources folder (res/raw). The serialized model is now ready to be loaded into your application:</p>
<pre><code>try {
	ObjectInputStream ois;
	ois = new ObjectInputStream(mContext.getResources().openRawResource(R.raw.my_serialized_model));
	mMyModel = new BaseObject3D((SerializedObject3D)ois.readObject());
	addChild(mMyModel);
	ois.close();
} catch (Exception e) {
	e.printStackTrace();
}
</code></pre>
<p>WIN!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rozengain.com/blog/2012/01/16/rajawali-tutorial-4-optimisation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Rajawali Tutorial 3: Materials</title>
		<link>http://www.rozengain.com/blog/2011/12/05/rajawali-tutorial-3-materials/</link>
		<comments>http://www.rozengain.com/blog/2011/12/05/rajawali-tutorial-3-materials/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 14:18:20 +0000</pubDate>
		<dc:creator>Dennis</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Rajawali]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[OpenGL ES]]></category>

		<guid isPermaLink="false">http://www.rozengain.com/blog/?p=763</guid>
		<description><![CDATA[This small tutorial is going to focus on the syntax for creating materials only. If you want to go over the basics then please read this first: Rajawali Tutorial 1: Basic Setup &#038; a Sphere Rajawali Tutorial 2: Creating a live wallpaper and importing a model Alright. Let&#8217;s create some materials Simple Material A basic [...]]]></description>
			<content:encoded><![CDATA[<p>This small tutorial is going to focus on the syntax for creating materials only.<br />
If you want to go over the basics then please read this first:</p>
<ul>
<li><a href="/blog/2011/08/24/rajawali-tutorial-1-basic-setup-a-sphere/" title="Rajawali Tutorial 1: Basic Setup and a Sphere">Rajawali Tutorial 1: Basic Setup &#038; a Sphere</a></li>
<li><a href="/blog/2011/08/25/rajawali-tutorial-2-creating-a-live-wallpaper-and-importing-a-model/" title="Rajawali Tutorial 2: Creating a live wallpaper and importing a model">Rajawali Tutorial 2: Creating a live wallpaper and importing a model</a></li>
</ul>
<p>Alright. Let&#8217;s create some materials <img src='http://www.rozengain.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h2>Simple Material</h2>
<p>A basic material is just a color or a texture without any lighting enabled. This renders a green cube:</p>
<pre><code>
SimpleMaterial simple = new SimpleMaterial();
mCube.setMaterial(simple);
mCube.setColor(0xff009900);
</code></pre>
<p>This renders a textured cube:</p>
<pre><code>
SimpleMaterial simple = new SimpleMaterial();
mCube.setMaterial(simple);
Bitmap texture = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.mytexture);
mCube.addTexture(mTextureManager.addTexture(texture));
</code></pre>
<h2>Gouraud Material</h2>
<p>This material can be used in combination with a light. For more info check out <a href="http://en.wikipedia.org/wiki/Gouraud_shading" title="Gouraud Shading">this Wikipedia article</a>.</p>
<pre><code>
mLight = new DirectionalLight();
mLight.setPosition(0, 5, -3);

GouraudMaterial gouraud = new GouraudMaterial();
gouraud.setSpecularColor(0xffffff00); // yellow
mCube.setMaterial(gouraud);
mCube.setLight(mLight);
</code></pre>
<h2>Phong Material</h2>
<p>Use this material to get nice specular highlights. See <a href="http://en.wikipedia.org/wiki/Phong_shading" title="Phong Shading">this article on Wikipedia</a>.</p>
<pre><code>
PhongMaterial phong = new PhongMaterial();
phong.setSpecularColor(0xffffffff); // white
phong.setAmbientcolor(0xffffff00); // yellow
phong.setShininess(0.5f);

mCube.setMaterial(phong);
mCube.setLight(mLight);
</code></pre>
<h2>Environment map material</h2>
<p>This is a reflective material. It requires 6 textures. Check <a href="http://en.wikipedia.org/wiki/Reflection_mapping" title="Environment Mapping">this Wikipedia article</a> for more information.</p>
<pre><code>
Bitmap[] textures = new Bitmap[6];

String ns = "com.mynamespace.myapp:drawable/";
String dns = "com.mynamespace.myapp";
String prefix = "";

textures[0] = BitmapFactory.decodeResource(mContext.getResources(), mContext.getResources().getIdentifier(ns + prefix + "_posx", null, dns));
textures[1] = BitmapFactory.decodeResource(mContext.getResources(), mContext.getResources().getIdentifier(ns + prefix + "_negx", null, dns));
textures[2] = BitmapFactory.decodeResource(mContext.getResources(), mContext.getResources().getIdentifier(ns + prefix + "_posy", null, dns));
textures[3] = BitmapFactory.decodeResource(mContext.getResources(), mContext.getResources().getIdentifier(ns + prefix + "_negy", null, dns));
textures[4] = BitmapFactory.decodeResource(mContext.getResources(), mContext.getResources().getIdentifier(ns + prefix + "_posz", null, dns));
textures[5] = BitmapFactory.decodeResource(mContext.getResources(), mContext.getResources().getIdentifier(ns + prefix + "_negz", null, dns));

TextureInfo tInfo = mTextureManager.addCubemapTextures(textures);

CubeMapMaterial mat = new CubeMapMaterial();
mat.addTexture(tInfo);
mCube.setMaterial(mat);
DirectionalLight light = new DirectionalLight();
light.setPosition(3, 5, -3);
mCube.setLight(light);
</code></pre>
<p>More materials will be added soon. If you have a specific request, just ping me an email <img src='http://www.rozengain.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.rozengain.com/blog/2011/12/05/rajawali-tutorial-3-materials/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Rajawali Tutorial 2: Creating a live wallpaper and importing a model</title>
		<link>http://www.rozengain.com/blog/2011/08/25/rajawali-tutorial-2-creating-a-live-wallpaper-and-importing-a-model/</link>
		<comments>http://www.rozengain.com/blog/2011/08/25/rajawali-tutorial-2-creating-a-live-wallpaper-and-importing-a-model/#comments</comments>
		<pubDate>Thu, 25 Aug 2011 11:26:27 +0000</pubDate>
		<dc:creator>Dennis</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Rajawali]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[OpenGL ES]]></category>

		<guid isPermaLink="false">http://www.rozengain.com/blog/?p=756</guid>
		<description><![CDATA[I&#8217;m going to be lazy and make you download the zipped Eclipse project. Get it here. The basics of Android live wallpapers are well documented so I won&#8217;t go over that. I suggest you take a look at AndroidManifest.xml, /res/xml/preferencescreen.xml, /res/xml/settings.xml and com.rajawali.tutorials.WallpaperSettings for wallpaper specific stuff. Here are the specifics for Rajawali. The RajawaliTutorial2Wallpaper [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m going to be lazy and make you download the zipped Eclipse project. <a title="Rajawali Tutorial 2 Eclipse Project Download" href="/files/rajawali/RajawaliTutorial2.zip">Get it here</a>.</p>
<p>The basics of Android live wallpapers are well documented so I won&#8217;t go over that. I suggest you take a look at AndroidManifest.xml, /res/xml/preferencescreen.xml, /res/xml/settings.xml and com.rajawali.tutorials.WallpaperSettings for wallpaper specific stuff.</p>
<p>Here are the specifics for Rajawali.</p>
<p>The RajawaliTutorial2Wallpaper class which extends rajawali.wallpaper.Wallpaper. In this class an instance of the renderer is created and a new WallpaperEngine is returned.<br />
RajawaliTutorial2Renderer is where the fun stuff happens. Here we import an .obj model and apply a texture:</p>
<pre><code>ObjParser parser = new ObjParser(mContext.getResources(), mTextureManager, R.raw.cube);
parser.parse();
mCube = parser.getParsedObject().getChildByName("Cube");
addChild(mCube);

mCamera.setZ(-4.2f);

Bitmap texture = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.cubetexture);
mCube.addTexture(mTextureManager.addTexture(texture));
mCube.setRotation(45, 0, 45);
mCube.setScale(.5f);

startRendering();
</code></pre>
<p>Obj files are text files which are compressed in the final .apk file. Parsing the whole obj file can take some time. I&#8217;ve added an optimisation which I will cover in the next tutorial (this uses serialized objects and speeds up things significantly).</p>
<p>Continue to <a title="Rajawali Tutorial 3: Materials" href="/blog/2011/12/05/rajawali-tutorial-3-materials/">Rajawali Tutorial 3: Materials</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rozengain.com/blog/2011/08/25/rajawali-tutorial-2-creating-a-live-wallpaper-and-importing-a-model/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Rajawali Tutorial 1: Basic Setup &amp; a Sphere</title>
		<link>http://www.rozengain.com/blog/2011/08/24/rajawali-tutorial-1-basic-setup-a-sphere/</link>
		<comments>http://www.rozengain.com/blog/2011/08/24/rajawali-tutorial-1-basic-setup-a-sphere/#comments</comments>
		<pubDate>Wed, 24 Aug 2011 15:13:35 +0000</pubDate>
		<dc:creator>Dennis</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Rajawali]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[OpenGL ES]]></category>

		<guid isPermaLink="false">http://www.rozengain.com/blog/?p=747</guid>
		<description><![CDATA[So here&#8217;s the first very basic Rajawali tutorial. Any questions, let me know Create a new project in Eclipse (Right-click in Package Explorer and choose New &#62; Project &#8230; Android Project). Use these values in the configuration screen: project name: RajawaliTutorial1 the &#8220;Build Target&#8221; should be at least &#8220;2.2&#8243; application name: RajawaliTutorial1 package name: rajawali.tutorials create [...]]]></description>
			<content:encoded><![CDATA[<p>So here&#8217;s the first very basic Rajawali tutorial. Any questions, let me know <img src='http://www.rozengain.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Create a new project in Eclipse (Right-click in Package Explorer and choose New &gt; Project &#8230; Android Project). Use these values in the configuration screen:</p>
<ul>
<li>project name: RajawaliTutorial1</li>
<li>the &#8220;Build Target&#8221; should be at least &#8220;2.2&#8243;</li>
<li>application name: RajawaliTutorial1</li>
<li>package name: rajawali.tutorials</li>
<li>create activity: RajawaliTutorial1Activity</li>
</ul>
<p>Press &#8220;Finish&#8221;</p>
<p>Hit the download button on <a title="Download Rajawali on GitHub" href="https://github.com/MasDennis/Rajawali" target="_blank">https://github.com/MasDennis/Rajawali</a> and extract the contents of the &#8220;src&#8221; folder into the project&#8217;s &#8220;src&#8221; folder.</p>
<p>Open the RajawaliTutorial1Activity class and change this line:</p>
<pre><code>extends Activity
</code></pre>
<p>into</p>
<pre><code>extends RajawaliActivity
</code></pre>
<p>Right click on the rajawali.tutorials package in the package explorer and choose &#8220;New &gt; Class&#8221;. Name the class RajawaliTutorial1Renderer and choose RajawaliRenderer as the Superclass. Hit &#8220;Finish&#8221;.</p>
<p>Add the constructor and set the frame rate:</p>
<pre><code>public RajawaliTutorial1Renderer(Context context) {
	super(context);
	setFrameRate(30);
}
</code></pre>
<p>Override the onSurfaceCreated() method. This is where we&#8217;ll set up our 3D scene.</p>
<pre><code>@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
	super.onSurfaceCreated(gl, config);
}
</code></pre>
<p>Add a new class variable called mLight and add the following code to the onSurfaceCreated() method:</p>
<pre><code>mLight = new DirectionalLight(0.1f, 0.2f, -1.0f); // set the direction
mLight.setColor(0, 0, 1.0f);
mLight.setPosition(.5f, 0, -2);
</code></pre>
<p>Create a new folder under /res/ called drawable-nodpi and download and save <a title="Selera Sari" href="/files/rajawali/selera_sari.jpg">this image</a>.</p>
<p>Next we are going to create a simple sphere and a texture.<br />
First add a class variable called mSphere&lt; of type Sphere and add this code to the onSurfaceCreated() method:</p>
<pre><code>Bitmap bg = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.selera_sari);
mSphere = new Sphere(1, 12, 12);
mSphere.setLight(mLight);
mSphere.addTexture(mTextureManager.addTexture(bg));
addChild(mSphere);
</code></pre>
<p>Also add a camera and start rendering:</p>
<pre><code>mCamera.setZ(-4.2f);
startRendering();
</code></pre>
<p>The last thing to do is create an instance of this renderer in our main activity. Open the RajawaliTutorial1Activity class and add the mRenderer class variable:</p>
<pre><code>private RajawaliTutorial1Renderer mRenderer;
</code></pre>
<p>And finally, change the onCreate() method to:</p>
<pre><code>@Override
public void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	mRenderer = new RajawaliTutorial1Renderer(this);
	mRenderer.setSurfaceView(mSurfaceView);
	super.setRenderer(mRenderer);
}
</code></pre>
<p>Build and launch and behold the sphere!</p>
<p>Let&#8217;s make this a bit less boring and add some animation.<br />
Go back to the RajawaliTutorial1Renderer and override the onDrawFrame() method and add y-axis rotation:</p>
<pre><code>@Override
public void onDrawFrame(GL10 glUnused) {
	super.onDrawFrame(glUnused);
	mSphere.setRotY(mSphere.getRotY() + 1);
}
</code></pre>
<p>That&#8217;s it. Very basic tutorial here.<br />
If you&#8217;re lazy you can download the Eclipse project <a href="/files/rajawali/RajawaliTutorial1.zip">here</a>.</p>
<p>Go to tutorial 2, &#8220;<a title="Rajawali Tutorial 2: Creating a live wallpaper and importing a model" href="/blog/2011/08/25/rajawali-tutorial-2-creating-a-live-wallpaper-and-importing-a-model/">Rajawali Tutorial 2: Creating a live wallpaper and importing a model</a>&#8220;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rozengain.com/blog/2011/08/24/rajawali-tutorial-1-basic-setup-a-sphere/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Announcing Rajawali: An OpenGL ES 2.0 Based 3D Framework For Android</title>
		<link>http://www.rozengain.com/blog/2011/08/23/announcing-rajawali-an-opengl-es-2-0-based-3d-framework-for-android/</link>
		<comments>http://www.rozengain.com/blog/2011/08/23/announcing-rajawali-an-opengl-es-2-0-based-3d-framework-for-android/#comments</comments>
		<pubDate>Tue, 23 Aug 2011 15:44:32 +0000</pubDate>
		<dc:creator>Dennis</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Rajawali]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[OpenGL ES]]></category>

		<guid isPermaLink="false">http://www.rozengain.com/blog/?p=730</guid>
		<description><![CDATA[I&#8217;ve been working on this on and off for the last couple of months. It is by no means a fully-featured 3D engine. It has some nice features and I figured I might as well move it to a public repository so other people can use it as well. The other 3D engine for Android [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" title="Rajawali 3D Engine for Android" src="/files/rajawali/rajawali-3d-can-jet.jpg" alt="" width="400" height="195" /></p>
<p>I&#8217;ve been working on this on and off for the last couple of months. It is by no means a fully-featured 3D engine. It has some nice features and I figured I might as well move it to a public repository so other people can use it as well.</p>
<p>The other 3D engine for Android I&#8217;ve worked on, Min3D, was based on OpenGL ES 1.1. Rajawali uses OpenGL ES 2.0 which makes a huge difference. 1.1 uses the Fixed Function Pipeline while 2.0 gives us the power of shaders. This means a lot of cool things can be done with vertex transformations and materials.</p>
<p><img class="aligncenter" title="Rajawali 3D Engine for Android" src="/files/rajawali/rajawali-3d-skull.jpg" alt="" width="400" height="195" /></p>
<p>So what does Rajawali have that Min3D hasn&#8217;t?</p>
<ul>
<li>easily create live wallpapers</li>
<li>phong shading</li>
<li>environment mapping</li>
<li>a quicker way to load models</li>
</ul>
<p>On the other hand, Rajawali still misses things such as:</p>
<ul>
<li>animation (vertex and bone)</li>
<li>fog</li>
<li>object picking</li>
<li>and many other things <img src='http://www.rozengain.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
</ul>
<p>So for now the big plus of Rajawali is the ability to easily create live wallpapers and use some nice materials.</p>
<p><img class="aligncenter" title="Rajawali 3D Engine for Android" src="/files/rajawali/rajawali-3d-car-jet-logo.jpg" alt="" width="400" height="195" /></p>
<p>New features will be added soon, depending on how many people are actually interested in this framework. If you want to contribute to this project, you&#8217;re more than welcome of course!</p>
<p>I&#8217;ll post some tutorials on this blog in the coming weeks. Your feedback is much appreciated.</p>
<p>The name &#8220;Rajawali&#8221; comes from the Indonesian language. It means &#8220;eagle&#8221;. It is also the name of a <a title="Kampung definition on Wikipedia" href="http://en.wikipedia.org/wiki/Village#Southeast_Asia">kampung</a> on the island of <a title="Banda Neira on Wikipedia" href="http://en.wikipedia.org/wiki/Banda_Neira">Banda Neira</a>. Banda Neira is part of the <a title="Banda Island on Wikipedia" href="http://en.wikipedia.org/wiki/Banda_Islands">Banda Islands</a> group. Another island from this group is called <a title="Pulau Hatta" href="http://www.flickr.com/photos/marcreid/3819596713/">Pulau Hatta</a>, which used to be called <a title="Rozengain map" href="http://www.trailbehind.com/Rozengain/">Rozengain</a>. See the connection?? <img src='http://www.rozengain.com/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>All the files can be found on Github: <a title="Rajawali 3D Framework for Android on GitHub" href="https://github.com/MasDennis/Rajawali">https://github.com/MasDennis/Rajawali</a></p>
<p><img class="aligncenter" title="Rajawali 3D Engine for Android" src="/files/rajawali/rajawali-3d-space.jpg" alt="" width="400" height="195" /></p>
<p>UPDATE: I&#8217;ve posted a few tutorials:</p>
<ul>
<li><a title="Rajawali Tutorial 1: Basic Setup &amp; a Sphere" href="/blog/2011/08/24/rajawali-tutorial-1-basic-setup-a-sphere/">Rajawali Tutorial 1: Basic Setup &amp; a Sphere</a></li>
<li><a title="Rajawali Tutorial 2: Creating a live wallpaper and importing a model" href="/blog/2011/08/25/rajawali-tutorial-2-creating-a-live-wallpaper-and-importing-a-model/">Rajawali Tutorial 2: Creating a live wallpaper and importing a model</a></li>
<li><a title="Rajawali Tutorial3: Materials" href="/blog/2011/12/05/rajawali-tutorial-3-materials/">Rajawali Tutorial 3: Materials</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.rozengain.com/blog/2011/08/23/announcing-rajawali-an-opengl-es-2-0-based-3d-framework-for-android/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Min3D for Android: Using The Accelerometer To Control The Camera</title>
		<link>http://www.rozengain.com/blog/2011/02/18/min3d-for-android-using-the-accelerometer-to-control-the-camera/</link>
		<comments>http://www.rozengain.com/blog/2011/02/18/min3d-for-android-using-the-accelerometer-to-control-the-camera/#comments</comments>
		<pubDate>Fri, 18 Feb 2011 11:10:53 +0000</pubDate>
		<dc:creator>Dennis</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Accelerometer]]></category>
		<category><![CDATA[min3D]]></category>
		<category><![CDATA[OpenGL ES]]></category>

		<guid isPermaLink="false">http://www.rozengain.com/blog/?p=724</guid>
		<description><![CDATA[NOTE: This OpenGL ES 1.1 framework isn&#8217;t maintained anymore. Check out the OpenGL ES 2.0 Rajawali framework which also supports live wallpapers. I haven&#8217;t done anything with Min3D for while. I know people have logged some bugs on Google Code but I haven&#8217;t had the time to look at them yet. Shame on me. Seeing the [...]]]></description>
			<content:encoded><![CDATA[<p><strong>NOTE: </strong>This OpenGL ES 1.1 framework isn&#8217;t maintained anymore. Check out the OpenGL ES 2.0 <a title="Rajawali 3D Engine" href="https://github.com/MasDennis/Rajawali">Rajawali</a> framework which also supports live wallpapers.</p>
<p>I haven&#8217;t done anything with Min3D for while. I know people have logged some bugs on Google Code but I haven&#8217;t had the time to look at them yet. Shame on me.</p>
<p>Seeing the awesomeness of OpenGL ES 2.0 and GLSL I&#8217;m not sure if I want to keep maintaining Min3D. I might start a new engine from scratch. Then again, Molehill (hardware accelerated 3D Flash) is coming to Android so why bother. Well, we&#8217;ll see. I&#8217;d love to hear your comments on this.</p>
<p>I did find time to create a new demo that uses the accelerometer to control the camera. It creates a very nice depth effect. Have a look at the video:</p>
<p>Here&#8217;s the code. Should explain itself <img src='http://www.rozengain.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . You can <a title="Min3D Accelerometer Eclipse Project" href="/files/Min3DAccelerometer.zip">download the Eclipse project archive here</a>.</p>
<pre><code>
package com.rozengain.min3d.accelerometer;

import min3d.core.Object3dContainer;
import min3d.core.RendererActivity;
import min3d.objectPrimitives.SkyBox;
import min3d.parser.IParser;
import min3d.parser.Parser;
import min3d.vos.Light;
import min3d.vos.Number3d;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;

public class Min3DAccelerometerActivity extends RendererActivity implements SensorEventListener {
	private final float FILTERING_FACTOR = .3f;

	private SkyBox mSkyBox;
	private SensorManager mSensorManager;
	private Sensor mAccelerometer;
	private Number3d mAccVals;
	private Object3dContainer mMonster;

	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        mAccVals = new Number3d();
	}

	public void initScene()
	{
		scene.lights().add(new Light());

		mSkyBox = new SkyBox(5.0f, 2);
		mSkyBox.addTexture(SkyBox.Face.North, 	R.drawable.wood_back, 	"north");
		mSkyBox.addTexture(SkyBox.Face.East, 	R.drawable.wood_right, 	"east");
		mSkyBox.addTexture(SkyBox.Face.South, 	R.drawable.wood_back, 	"south");
		mSkyBox.addTexture(SkyBox.Face.West, 	R.drawable.wood_left, 	"west");
		mSkyBox.addTexture(SkyBox.Face.Up,		R.drawable.ceiling, 	"up");
		mSkyBox.addTexture(SkyBox.Face.Down, 	R.drawable.floor, 		"down");
		mSkyBox.scale().y = 0.8f;
		mSkyBox.scale().z = 2.0f;
		scene.addChild(mSkyBox);

		IParser parser = Parser.createParser(Parser.Type.MAX_3DS,
				getResources(), "com.rozengain.min3d.accelerometer:raw/monster_high", true);
		parser.parse();

		mMonster = parser.getParsedObject();
		mMonster.scale().x = mMonster.scale().y = mMonster.scale().z  = .1f;
		mMonster.position().y = -2.5f;
		mMonster.position().z = -3;
		scene.addChild(mMonster);

		mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_UI);
	}

	@Override
	public void onAccuracyChanged(Sensor sensor, int accuracy) {
		// TODO Auto-generated method stub
	}

	@Override
	public void onSensorChanged(SensorEvent event) {
		if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER)
            return;

		// low-pass filter to make the movement more stable
		mAccVals.x = (float) (-event.values[1] * FILTERING_FACTOR + mAccVals.x * (1.0 - FILTERING_FACTOR));
		mAccVals.y = (float) (event.values[0] * FILTERING_FACTOR + mAccVals.y * (1.0 - FILTERING_FACTOR));

		scene.camera().position.x = mAccVals.x * .2f;
        scene.camera().position.y = mAccVals.y * .2f;

        scene.camera().target.x = -scene.camera().position.x;
        scene.camera().target.y = -scene.camera().position.y;
	}
}
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.rozengain.com/blog/2011/02/18/min3d-for-android-using-the-accelerometer-to-control-the-camera/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>OpenSceneGraph Level of Detail Management</title>
		<link>http://www.rozengain.com/blog/2011/02/16/openscenegraph-level-of-detail-management/</link>
		<comments>http://www.rozengain.com/blog/2011/02/16/openscenegraph-level-of-detail-management/#comments</comments>
		<pubDate>Wed, 16 Feb 2011 10:10:43 +0000</pubDate>
		<dc:creator>Dennis</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[LoD]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[OpenSceneGraph]]></category>

		<guid isPermaLink="false">http://www.rozengain.com/blog/?p=720</guid>
		<description><![CDATA[I managed to get my head around the basics of OpenSceneGraph by reviewing the book OpenSceneGraph 3.0 Beginner&#8217;s Guide. I picked up a few things that were very interesting. OSG has a very convenient way of using an optimisation technique called Level of Detail management. Simply said: when an object is far away from the [...]]]></description>
			<content:encoded><![CDATA[<div>I managed to get my head around the basics of <a href="http://www.openscenegraph.org/projects/osg">OpenSceneGraph</a> by <a href="http://www.rozengain.com/blog/2011/02/15/book-review-openscenegraph-3-0-beginner%E2%80%99s-guide/">reviewing</a> the book <a href="https://www.packtpub.com/openscenegraph-3-0-beginners-guide/book">OpenSceneGraph 3.0 Beginner&#8217;s Guide</a>. I picked up a few things that were very interesting.</p>
<p>OSG has a very convenient way of using an optimisation technique called <a href="http://en.wikipedia.org/wiki/Level_of_detail">Level of Detail</a> management. Simply said: when an object is far away from the camera a copy of the original object is used with a reduced number of faces. Because the object is far away you don’t need a mesh that is as detailed as the original one. <a href="http://en.wikipedia.org/wiki/Level_of_detail#A_discrete_LOD_example">Check the Wikipedia article</a> for a visual explanation.</p>
<p>The mesh simplifier class does all the hard work and is based on the <a href="http://en.wikipedia.org/wiki/Visitor_pattern">visitor design pattern</a>. The Node is the host that accepts the visitor. The host and the visitor communicate with each other via their public interfaces. This allows us to separate the algorithmic complexity from the data structure. Other visitor classes that can be accepted by a Node are <a href="http://www.openscenegraph.org/documentation/OpenSceneGraphReferenceDocs/a00341.html">IntersectionVisitor</a> (testing intersections within the scene), <a href="http://www.openscenegraph.org/documentation/OpenSceneGraphReferenceDocs/a00090.html">CollectOccludersVisitor</a> (cluster culling to cull back facing drawables), <a href="http://www.openscenegraph.org/documentation/OpenSceneGraphReferenceDocs/a00109.html">ComputeBoundsVisitor</a>, <a href="http://www.openscenegraph.org/documentation/OpenSceneGraphReferenceDocs/a00472.html">RemoveEmptyNodesVisitor</a> and a lot more.</p>
<p>There are some C++ specifics in this bit of code that might seem a little crazy if you’re used to ActionScript. In native C++ there is no garbage collection, you have to do all that yourself. In OSG there is something called a <a href="http://en.wikipedia.org/wiki/Smart_pointer">smart pointer</a> that can help you with this.<br />
Also there is a dynamic_cast. More info on the different types of casting in C++ can be found <a href="http://www.cplusplus.com/doc/tutorial/typecasting/">here</a>.</p>
<p>Here’s the bit of code that does all the magic:</p></div>
<pre><code>
#include &lt;osg/LOD&gt;
#include &lt;osgDB/ReadFile&gt;
#include &lt;osgUtil/Simplifier&gt;
#include &lt;osgViewer/Viewer&gt;

using namespace osg;
using namespace osgDB;
using namespace osgUtil;
using namespace osgViewer;

int main(int argc, char** argv)
{
// load the .osg model
<a href="http://www.openscenegraph.org/documentation/OpenSceneGraphReferenceDocs/a00581.html">ref_ptr</a>&lt;<a href="http://www.openscenegraph.org/documentation/OpenSceneGraphReferenceDocs/a00431.html">Node</a>&gt; cowLevel3 = readNodeFile( "cow.osg" );
// clone the model
<a href="http://www.openscenegraph.org/documentation/OpenSceneGraphReferenceDocs/a00581.html">ref_ptr</a>&lt;<a href="http://www.openscenegraph.org/documentation/OpenSceneGraphReferenceDocs/a00431.html">Node</a>&gt; cowLevel2 = dynamic_cast&lt;<a href="http://www.openscenegraph.org/documentation/OpenSceneGraphReferenceDocs/a00431.html">Node</a>*&gt;( cowLevel3-&gt;clone( CopyOp::DEEP_COPY_ALL ) );
// make another copy
<a href="http://www.openscenegraph.org/documentation/OpenSceneGraphReferenceDocs/a00581.html">ref_ptr</a>&lt;<a href="http://www.openscenegraph.org/documentation/OpenSceneGraphReferenceDocs/a00431.html">Node</a>&gt; cowLevel1 = dynamic_cast&lt;<a href="http://www.openscenegraph.org/documentation/OpenSceneGraphReferenceDocs/a00431.html">Node</a>*&gt;( cowLevel3-&gt;clone( CopyOp::DEEP_COPY_ALL ) );

// create an instance of the mesh simplifier
<a href="http://www.openscenegraph.org/documentation/OpenSceneGraphReferenceDocs/a00677.html">Simplifier</a> simplifier;
// reduce the number of vertices and faces
simplifier.setSampleRatio( 0.5 );
cowLevel2-&gt;accept( simplifier );

// reduce the number of vertices and faces even more

simplifier.setSampleRatio( 0.1 );
// this node should accept the simplifier node visitor
cowLevel3-&gt;accept( simplifier );

// create a new level of detail node
<a href="http://www.openscenegraph.org/documentation/OpenSceneGraphReferenceDocs/a00581.html">ref_ptr</a>&lt;<a href="http://www.openscenegraph.org/documentation/OpenSceneGraphReferenceDocs/a00395.html">LOD</a>&gt; lodNode = new <a href="http://www.openscenegraph.org/documentation/OpenSceneGraphReferenceDocs/a00395.html">LOD</a>();
// add the meshes
lodNode-&gt;addChild( cowLevel1.get(), 200.0f, FLT_MAX );
lodNode-&gt;addChild( cowLevel2.get(), 50.0f, 200.0f );
lodNode-&gt;addChild( cowLevel3.get(), 0.0f, 50.0f );

<a href="http://www.openscenegraph.org/documentation/OpenSceneGraphReferenceDocs/a01055.html">Viewer</a> viewer;
viewer.setSceneData( lodNode.get() );
return viewer.run();
}</code></pre>
<div>
More info:</p>
<ul>
<li><a href="http://www.openscenegraph.org/projects/osg">OpenSceneGraph</a></li>
<li><a href="https://www.packtpub.com/sites/default/files/2824OS-Chapter-5-Managing-Scene-Graph.pdf?utm_source=packtpub&amp;utm_medium=free&amp;utm_campaign=pdf">Excerpt from the OpenSceneGraph 3.0 Beginner’s Guide</a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.rozengain.com/blog/2011/02/16/openscenegraph-level-of-detail-management/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Book Review: OpenSceneGraph 3.0 Beginner’s Guide</title>
		<link>http://www.rozengain.com/blog/2011/02/15/book-review-openscenegraph-3-0-beginner%e2%80%99s-guide/</link>
		<comments>http://www.rozengain.com/blog/2011/02/15/book-review-openscenegraph-3-0-beginner%e2%80%99s-guide/#comments</comments>
		<pubDate>Tue, 15 Feb 2011 10:14:22 +0000</pubDate>
		<dc:creator>Dennis</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[book review]]></category>
		<category><![CDATA[OpenSceneGraph]]></category>

		<guid isPermaLink="false">http://www.rozengain.com/blog/?p=704</guid>
		<description><![CDATA[Packt Publishing sent me this OpenSceneGraph 3.0 beginner’s guide for review. I have worked with 3D engines like Irrlicht and Ogre but I never had the chance to properly look at OpenSceneGraph. The latter is apparently used a lot in scientific visualisation &#38; simulation while Irrlicht and Ogre are mostly used for games &#38; entertainment. [...]]]></description>
			<content:encoded><![CDATA[<div>
<div style="float: left"><img class="alignleft" title="OpenSceneGraph 3.0 Beginner's Guide" src="https://www.packtpub.com/sites/default/files/imagecache/productview/2824OS_MockupCover_Beginers%20guide_0.jpg" alt="" width="125" height="152" /></div>
<p><a id="internal-source-marker_0.5979075494688004" href="http://www.packtpub.com/">Packt Publishing</a> sent me this <a href="https://www.packtpub.com/openscenegraph-3-0-beginners-guide/book">OpenSceneGraph 3.0 beginner’s guide</a> for review. I have worked with 3D engines like <a href="http://irrlicht.sourceforge.net/">Irrlicht</a> and <a href="http://www.ogre3d.org/">Ogre</a> but I never had the chance to properly look at <a href="http://www.openscenegraph.org/projects/osg">OpenSceneGraph</a>. The latter is apparently used a lot in scientific visualisation &amp; simulation while Irrlicht and Ogre are mostly used for games &amp; entertainment.</p>
<p>All these three engines are open source, free to use and target multiple platforms. Irrlicht can use DirectX, OpenGL and software rendering. Ogre uses either OpenGL or DirectX and OpenSceneGraph uses OpenGL exclusively.</p>
<p>I’ve reviewed Packt books before and while all the books have quality content I never liked the print quality and the typesetting. The images look washed out and sometimes it’s a bit hard to see what’s in the image. Hopefully they can improve this in future releases.</p>
<p>But of course, content is king. So what does this beginner’s guide have to offer?</p>
<p>First of all, this is not a guide for people who aren’t familiar with 3D programming. This book assumes you have basic knowledge of 3D concepts, C++, design patterns and OpenGL. This means it’s a beginner’s guide for people unfamiliar with OpenSceneGraph. A good thing because the focus is on the engine itself and not the basics that most readers know anyway.</p>
<p>The approach behind this book is “learn by doing: less theory, more results”. I have to say that the authors (<a href="https://www.packtpub.com/authors/profiles/rui-wang">Rui Wang</a> and <a href="https://www.packtpub.com/authors/profiles/xuelei-qian">Xuelei Qian</a>) did a tremendous job. There’s a good balance between theory, code samples and explanation. After the obligatory introduction and compilation &amp; installation chapters they’re diving straight into the code. Basics like memory management, reference pointers and logging are explained and then they move on to building geometry models, managing the scene graph, rendering effects, animation, interaction and storage. The book ends with a very useful chapter about rendering efficiency that deals with multi threading, culling, quad trees and data paging.</p>
<p>By reading this book you really get to know OpenSceneGraph very well. You’ll not only learn about 3D but also about things like smart pointers and design patterns. Some things I really like about OpenSceneGraph are the way you can use polygonal techniques (simplifier, smoothing, tesselator, etc), <a href="http://www.openscenegraph.org/projects/osg/wiki/Support/KnowledgeBase/Functor">functors</a> and level-of-detail management. By using the polygon reduction class called “Simplifier” you can auto-generate low-polygon models that you attach to an LOD node. Extremely powerful stuff.</p>
<p>This book is available from Packt Publishing for $31.19/$50.99/€39.75. Highly recommended. <a href="https://www.packtpub.com/openscenegraph-3-0-beginners-guide/book">https://www.packtpub.com/openscenegraph-3-0-beginners-guide/book</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.rozengain.com/blog/2011/02/15/book-review-openscenegraph-3-0-beginner%e2%80%99s-guide/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The gotoAndSki(&#8220;Switzerland&#8221;) conference</title>
		<link>http://www.rozengain.com/blog/2011/02/01/the-gotoandskiswitzerland-conference/</link>
		<comments>http://www.rozengain.com/blog/2011/02/01/the-gotoandskiswitzerland-conference/#comments</comments>
		<pubDate>Tue, 01 Feb 2011 14:35:42 +0000</pubDate>
		<dc:creator>Dennis</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Kinect]]></category>
		<category><![CDATA[Speaking]]></category>
		<category><![CDATA[Conference]]></category>
		<category><![CDATA[gotoAndSki]]></category>
		<category><![CDATA[Presenting]]></category>
		<category><![CDATA[Switzerland]]></category>

		<guid isPermaLink="false">http://www.rozengain.com/blog/?p=679</guid>
		<description><![CDATA[Disclaimer: I’ve kept the session descriptions short. I recommend keeping an eye on the video site on which the session videos will be published. The rural village of Stechelberg in Switzerland was the setting of the second edition of the gotoAndSki() conference. Skiing in the Alps is always a great experience and combining this with [...]]]></description>
			<content:encoded><![CDATA[<div>
<div style="width: 100%; text-align: center">
<img class="aligncenter" title="gotoAndSki() attendees" src="/files/gotoandski-group.jpg" alt="" width="484" height="379" />
</div>
<p>Disclaimer: I’ve kept the session descriptions short. I recommend <a href="http://vimeo.com/album/1521902">keeping an eye on the video site</a> on which the session videos will be published.</p>
<p>The rural village of <a href="http://maps.google.co.uk/maps?f=q&amp;source=s_q&amp;hl=en&amp;q=Stechelberg+3824+Lauterbrunnen,+Interlaken,+Canton+of+Bern,+Switzerland&amp;aq=&amp;sll=53.800651,-4.064941&amp;sspn=22.594151,67.631836&amp;ie=UTF8&amp;geocode=FQIwxgIdhI94AA&amp;split=0&amp;hq=&amp;hnear=Stechelberg+Lauterbrunnen,+Interlaken,+Canton+of+Bern,+Switzerland&amp;t=h&amp;z=15">Stechelberg</a> in Switzerland was the setting of the second edition of the <a href="http://www.gotoandski.com/">gotoAndSki() conference</a>. Skiing in the Alps is always a great experience and combining this with networking, fun and presentations is a terrific concept.<br />
This edition was organized by <a href="http://fcolaco.com/blog/">Fernando Colaço</a> and <a href="http://almeidavid.com/">David Almeida</a>. They chose the picturesque village of Stechelberg as the conference location. Stechelberg is a beautiful little village situated in between the mountains and close to the skiing areas.<br />
After being picked up from Geneva airport by Fernando we headed off to Stechelberg. It was already dark so we didn’t see much of the Swiss alps.<br />
When we arrived at <a href="http://www.hotel-stechelberg.ch/e-seiten/e-index.htm">the hotel</a> most of the attendees were already present and quenching their thirst with Swiss beers. After eating röstis and drinking beers we were invited to drink some Polish wodka which <a href="http://www.inou.pl/">Maciek</a> brought with him. It ended up being a very fun night.</p>
<div style="float: left; margin-right: 10px">
<img class="alignleft" title="Drinking beer after a day of hardcore skiing" src="/files/gotoandski-beer.jpg" alt="Drinking beer after a day of hardcore skiing" width="334" height="265" />
</div>
<p>The next day we went out to explore the skiing area. It was very quiet on the slopes because it was off-season. The more space the better because I’m a bit of a clumsy skier. I got through the day without breaking anything or hitting someone so this could be considered a very good day.<br />
After a quick nap and shower it was time for the sessions to start.</p>
<p>The conference was kicked off by Adobe’s <a href="http://www.corlan.org/">Mihai Corlan</a>. He talked about building mobile apps with AIR, Flash Builder &amp; Flex hero. He showed off some new features and also showed how you  can use AIR on the Blackberry Playbook. Very interesting session.</p>
<p>The interlude was used to fill our stomachs with quality Swiss food. Fernando had a nice surprise for us because he invited <a href="http://www.vimeo.com/19413117">the local yodelling choir</a> to come and sing for us. I was only familiar with the fast-paced eccentric yodelling but this version was much more refined and slower than that. It gave the evening a true Alpine atmosphere.</p>
<p>The second session was done by <a href="http://twitter.com/petermaseide">Peter Maseide</a>. Peter is a Game designer &amp; developer for <a href="http://agens.no/">Agens</a>. He showed us some very nice game examples and he explained which techniques they used to make their games truly engaging. He also announced the release of <a href="http://agens.no/2011/01/fungrid/">Fungrid</a>, an open source Flash Game API for 2D/parallax scrolling games. The framework looked very easy to use and flexible. An inspiring session by someone with a lot of passion for game development.</p>
<p>The last session of the evening was done by <a href="http://twitter.com/mcorlan">Mihai Corlan</a> again. This time he talked about optimising Flash &amp; AIR applications. Very handy tips &amp; tricks that are always useful to have in your toolbox. A good ending to a great night.</p>
<div style="width: 100%; text-align: center">
<img class="alignnone" title="On our way to the slopes" src="/files/gotoandski-bus.jpg" alt="" width="500" height="374" />
</div>
<p>The second day we went to the skiing area on the other side of the mountains. We had a pretty intense day of skiing because we were trying to keep up with <a href="http://twitter.com/inoutin">Maciek</a>, the human cannonball who disregards human life. Ricardo suffered especially because he never had an intense skiing session like this. But he managed to stay on his feet until the very last end. Respect! The day ended with me being in a rush to get in time for my session, running out of the restaurant and forgetting to pay for my beer (thanks guys for paying for that one <img src='http://www.rozengain.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ). Although I ran to the bus stop to be on time I ended up in the same bus as them. Pretty useless exercise.</p>
<p>After the quickest shower ever it was time for my session. It went well except for the fact that my system crashed (Murphy’s law was proven several times this evening). After a quick reboot I was able to show my demos (I will put these on youtube later) and they were received well.</p>
<p>Dinner time after that. <a href="http://images.google.com/images?hl=en&amp;source=imghp&amp;biw=1920&amp;bih=989&amp;q=swiss+cheese+fondue&amp;gbv=2&amp;aq=0&amp;aqi=g1&amp;aql=&amp;oq=swiss+cheese+fon">Swiss cheese fondue</a> with white wine. Absolutely delicious. This time not accompanied by yodellers unfortunately. You can’t have it all <img src='http://www.rozengain.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>It was <a href="http://blog.starnut.com/">Michel Wacker</a>’s turn to entertain an audience that were half human, half cheese. Not an easy task but he managed to pull it off brilliantly. His talk was called “Hot Wireless Data Fudge” and dealt with the exchange of data over wireless LAN between an AIR application running on a desktop and one running on a mobile device. He showed us how he found the optimal solution by trial &amp; error. I’m definitely going to play around with this. Fortunately he is going to release his source code so <a href="http://blog.starnut.com/">keep an eye on his blog</a>.</p>
<p>Last session of the evening. <a href="http://blog.six4rty.ch/">Tiago Dias</a> talking about “Developing AIR for TV”. Very interesting because this was something I absolutely didn’t know anything about. He showed some demos using StageVideo, a P2P multiplayer game and using an Android phone as a remote controller. Learned a lot from this one!</p>
<p>After the sessions there were more beers and some <a href="http://www.flickr.com/photos/32064257@N03/5406648573/in/pool-1568756@N25/">really tasty Portuguese drinks</a> (thanks to <a href="http://imhugo.com/">Hugo</a> the <a href="http://www.flickr.com/photos/uselesspics/5399600792/in/pool-1568756@N25/">Swiss cheese killer</a> &amp; <a href="http://blog.ricardocastelhano.net/wp/">Ricardo</a> for that!).</p>
<div style="width: 100%; text-align: center">
<img class="aligncenter" title="The view on the slopes" src="/files/gotoandski-view.jpg" alt="" width="430" height="339" />
</div>
<p>The last day was an early one. We decided to beat the crowds because it was a Saturday and a lot of Swiss went out to the slopes as well.<br />
During lunchtime we went up to the <a href="http://www.jamesbondlifestyle.com/index_travel.php?m=tr&amp;g=tr012">“James Bond” restaurant</a> to have some food, some more beers and <a href="http://www.flickr.com/photos/25190572@N05/5407466786/in/pool-1568756@N25/">a power nap</a>.</p>
<p>Then it was time to kick off the last three sessions. First up was <a href="http://trinefalbe.com/">Trine Falbe</a>. Her talk was about cognitive psychology. A lot different from all the other sessions and refreshing because of that. She explained some of the theories behind interaction design. Lots of very good &amp; useful insights and a very professional presentation.</p>
<p>Next up was a proper geeky session. “Flash + Arduino: A Connection With Feelings” by <a href="http://twitter.com/riccastelhano">Ricardo Castelhano</a>. A very inspiring session showcasing some awesome interactive installation work &amp; interesting demos. I wasn’t the only one being inspired by this &amp; I think most of the attendees are going to order an <a href="http://www.arduino.cc/">Arduino</a> kit now! It was Ricardo’s first presentation in English and he did a great job at it.</p>
<p>Then some more food, more beers, interesting chats and an ice &amp; chocolate dessert.</p>
<div style="width: 100%; text-align: center">
<img class="alignnone" title="Edelweiss bier" src="/files/gotoandski-edelweiss.jpg" alt="" width="360" height="477" />
</div>
<p>Time for the last session on the last day. Not an easy job for <a href="http://blog.swfjunkie.com/">Sandro Ducceschi</a>. His talk was about accessibility and he jokingly called it the “awesomest accessibility talk ever”. Accessibility is never an easy topic to bring to an audience but he mixed it with jokes &amp; games which made the talk quite entertaining. He talked about the cons of the current accessibility options in Flash &amp; Flex and he showed us how he managed to simplify his way of working. He also proved how irritating <a href="http://www.freedomscientific.com/products/fs/jaws-product-page.asp">Jaws</a> can be because Jaws just doesn’t shut up!<br />
He announced the release of his open-source accessibility framework called <a href="http://wiki.swfjunkie.com/jacc">JAcc</a>. It makes it a lot easier to make Flash &amp; Flex sites more accessible. A highly recommended framework!</p>
<p>gotoAndSki() was an amazing experience. Because the conference is smaller in size than other conferences you really get to know most of the people who are attending. It is the best networking event that I’ve been to. It goes beyond superficial contact and you actually make new friends! I’m sure you’ll hear that from everyone who was attending. Fernando said he will be organising gotoAndSki(“Switzerland”) again next year. Fortunately you won’t have to wait that long. <a href="http://twitter.com/jenschr">Jens</a> &amp; <a href="http://twitter.com/thomasnesse">Thomas</a> told us that they will be organising another gotoAndSki(“Norway”) in June. So if you’re up for networking, fun, great sessions, eating, drinking, etc …. go there!!!</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.rozengain.com/blog/2011/02/01/the-gotoandskiswitzerland-conference/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

