Index: code/trunk/data/levels/BumpMap.oxw
===================================================================
--- code/trunk/data/levels/BumpMap.oxw	(revision 12189)
+++ code/trunk/data/levels/BumpMap.oxw	(revision 12189)
@@ -0,0 +1,82 @@
+<!-- Author: Philip Wiese <wiesep@student.ethz.ch> -->
+<LevelInfo
+ name = "BumpMap"
+ description = "A demonstration of bump maps (created HS18)"
+ tags = "test, showcase"
+ screenshot = "bumpMap.png"
+/>
+
+<?lua
+  include("stats.oxo")
+  include("HUDTemplates3.oxo")
+  include("templates/lodInformation.oxt")
+?>
+
+<?lua
+  include("templates/spaceshipEscort.oxt")
+?>
+
+<Level>
+  <templates>
+    <Template link=lodtemplate_default />
+  </templates>
+  <?lua include("includes/notifications.oxi") ?>
+
+  <Scene
+    ambientlight = "0.5, 0.5, 0.5"
+    skybox       = "Orxonox/Starbox"
+  >
+
+
+  <!--
+    <Light type=directional position="0,0,0" direction="0.253, 0.593, -0.765" diffuse="1.0, 0.9, 0.9, 1.0" specular="1.0, 0.9, 0.9, 1.0"/>
+  -->
+
+    <Light type=point position="100,30,300" lookat="0,0,0" diffuse="0.8, 0.8, 0.8, 1.0" specular="0.5, 0.9, 0.9, 1.0"/>
+    <Model position="100,30,200" mesh="rocket.mesh" scale="3" lookat="0,0,0"/>
+
+    <Light type=point position="-20,-30,-200" lookat="0,0,0" diffuse="0.8, 0.8, 0.8, 1.0" specular="0.5, 0.5, 0.5, 1.0"/>
+    <Model position="-20,-30,-200" mesh="rocket.mesh" scale="3" lookat="0,0,0"/>
+    
+    <Light type=point position="20,200,20" lookat="0,0,0" diffuse="0.3, 0.3, 0.3, 1.0" specular="0.5, 0.5, 0.5, 1.0"/>
+    <Model position="20,200,20" mesh="rocket.mesh" scale="3" lookat="0,0,0"/>
+<!--
+    <Light type=point position="100,200,0" lookat="0,0,0" diffuse="0.8, 0.7, 0.7, 1.0" specular="1.0, 0.9, 0.9, 1.0"/>
+    <Model position="100,200,0" mesh="Coordinates.mesh" scale="3" lookat="0,0,0"/>
+
+    <Light type=point position="20,-200,0" lookat="0,0,0" diffuse="0.8, 0.7, 0.7, 1.0" specular="1.0, 0.9, 0.9, 1.0"/>
+    <Model position="20,-200,0" mesh="Coordinates.mesh" scale="3" lookat="0,0,0"/>
+
+    <Light type=point position="200,0,0" lookat="0,0,0" diffuse="0.8, 0.7, 0.7, 1.0" specular="1.0, 0.9, 0.9, 1.0"/>
+    <Model position="200,0,0" mesh="Coordinates.mesh" scale="3" lookat="0,0,0"/>
+
+    <Light type=point position="-200,0,0" lookat="0,0,0" diffuse="0.8, 0.7, 0.7, 1.0" specular="1.0, 0.9, 0.9, 1.0"/>
+    <Model position="-200,0,0" mesh="Coordinates.mesh" scale="3" lookat="0,0,0"/>
+-->
+    <SpawnPoint team=0 position="-80,0,0" lookat="0,0,0" spawnclass=SpaceShip pawndesign=spaceshipescort />
+
+    <!--<Model position="0, -50,-160" yaw="90" pitch="-90" roll="0" scale="5" mesh="Cube_Lava.mesh" />
+    <Model position="0, 0,-160" yaw="90" pitch="-90" roll="0" scale="5" mesh="Cube_Lava_Normal.mesh" />
+    <Model position="0, 12,0" yaw="90" pitch="-90" roll="0" scale="10" mesh="Cube_Lava_V2.mesh" />
+    <Model position="0, -12,0" yaw="90" pitch="-90" roll="0" scale="10" mesh="Cube_Lava_V2_Normal.mesh" />
+    -->
+
+    <MovableEntity position="0,0,40" rotationrate="30" rotationaxis="1,0,1">
+      <attached>
+          <Model position="0, 0,0" roll="45" scale="10" mesh="Cube_Lava.mesh" />
+      </attached>
+    </MovableEntity>
+
+    <MovableEntity position="0,0,0" rotationrate="30" rotationaxis="1,0,1">
+      <attached>
+          <Model position="0, 0,0" roll="45" scale="10" mesh="Cube_Lava_Normal.mesh" />
+      </attached>
+    </MovableEntity>
+    <MovableEntity position="0,0,-40" rotationrate="30" rotationaxis="1,0,1">
+      <attached>
+          <Model position="0, 0,0" roll="45" scale="10" mesh="Cube_Lava_Normal_Blank.mesh" />
+      </attached>
+    </MovableEntity>
+
+  </Scene>
+</Level>
Index: code/trunk/data/levels/tutorial.oxw
===================================================================
--- code/trunk/data/levels/tutorial.oxw	(revision 12099)
+++ code/trunk/data/levels/tutorial.oxw	(revision 12189)
@@ -55,8 +55,8 @@
     <?lua end ?>
 
-    <GlobalShader compositor="Bloom" visible=false>
+    <GlobalShader compositor="Bloom" visible=true>
       <events>
         <visibility>
-          <DistanceTrigger position="0,0,0" distance=30 target="Spectator" switch=true />
+          <DistanceTrigger position="0,0,0" distance=300 target="Spectator" switch=false />
         </visibility>
       </events>
Index: code/trunk/src/libraries/tools/Mesh.cc
===================================================================
--- code/trunk/src/libraries/tools/Mesh.cc	(revision 12099)
+++ code/trunk/src/libraries/tools/Mesh.cc	(revision 12189)
@@ -35,4 +35,5 @@
 #include <OgreSubEntity.h>
 #include <OgreSceneManager.h>
+#include <OgreHardwareVertexBuffer.h>
 
 #include "util/Convert.h"
@@ -64,4 +65,5 @@
             this->scenemanager_->destroyEntity(this->entity_);
 
+
         if (GameMode::showsGraphics())
         {
@@ -70,6 +72,22 @@
                 this->entity_ = this->scenemanager_->createEntity("Mesh" + multi_cast<std::string>(Mesh::meshCounter_s++), meshsource);
                 this->entity_->setCastShadows(this->bCastShadows_);
-            }
-            catch (...)
+
+
+                unsigned short src, dest;
+                try
+                {
+                    if (!this->entity_->getMesh()->suggestTangentVectorBuildParams(Ogre::VertexElementSemantic::VES_TANGENT, src, dest))
+                    {
+                        orxout() << "Generate Tanget for \"" << meshsource << '"' << endl;
+                        this->entity_->getMesh()->buildTangentVectors(Ogre::VertexElementSemantic::VES_TANGENT, src, dest);
+                        // this version cleans mirrored and rotated UVs but requires quality models
+                        // mesh->buildTangentVectors(VES_TANGENT, src, dest, true, true);
+                    }
+                } catch (...)
+                {
+                    orxout(internal_warning) << "Couldn't generat tangets for \"" << meshsource << '"' << endl;
+                }
+
+            } catch (...)
             {
                 orxout(internal_error) << "Couldn't load mesh \"" << meshsource << '"' << endl;
@@ -107,5 +125,5 @@
                 this->entity_->getSubEntity(index)->setMaterialName(name);
         }
-        else 
+        else
             orxout() << "ERROR at Index " << index << endl;
     }
Index: code/trunk/src/libraries/tools/Timer.h
===================================================================
--- code/trunk/src/libraries/tools/Timer.h	(revision 12099)
+++ code/trunk/src/libraries/tools/Timer.h	(revision 12189)
@@ -79,4 +79,5 @@
 #include "tools/ToolsPrereqs.h"
 #include <functional>
+
 #include "core/object/Listable.h"
 #include "core/command/ExecutorPtr.h"
