This is Sinbad, OGRE's official mascot as of January 2010. His name comes from the community nickname of Steve Streeting, OGRE's Founder and former Project Lead. The character design and 3D model were made by Zi Ye (aka omniter), with input from the OGRE community. The OGRE mesh and Blender scene file are available in the OGRE SDK (1.7 and up) under the Creative Commons Attribution-Share Alike 3.0 Unported License.
Sinbad can perform the following actions:
- Take out swords
- Put away swords
- Swing swords (vertically or horizontally)
These are achieved by mixing and playing 13 different animations. Some animations control different parts of Sinbad's body, and can be played simultaneously (e.g., swinging the swords while running). Others control the same parts, and are therefore mutually exclusive (e.g., idling or dancing but not both). In addition to the animations, two sword entities can be attached to tag points on Sinbad's hands or sheaths to complete the character.
Here is a slightly older video of Sinbad in action:
<iframe src="http://player.vimeo.com/video/8815075" width="400" height="300" frameborder="0"></iframe>
If you just want to load Sinbad into your application and animate him, first make sure media/packs/Sinbad.zip is properly loaded. If you don't have that file, download it.
Now do this in your setup:
// Create entity from mesh and attach it to a scene node. SceneNode* node = sceneMgr->getRootSceneNode()->createChildSceneNode(); Entity* ent = sceneMgr->createEntity("Sinbad", "Sinbad.mesh"); node->attachObject(ent); // Set animation blend mode to additive / cumulative. ent->getSkeleton()->setBlendMode(ANIMBLEND_CUMULATIVE); // Get the two halves of the idle animation. baseAnim = ent->getAnimationState("IdleBase"); topAnim = ent->getAnimationState("IdleTop"); // Enable both of them and set them to loop. baseAnim->setLoop(true); topAnim->setLoop(true); baseAnim->setEnabled(true); topAnim->setEnabled(true);
Now do this in your update every frame:
// Update the animations according to elapsed frame time. baseAnim->addTime(elapsedTime); topAnim->addTime(elapsedTime);
There are many details involved in controlling animated characters - way too many for this article. The Character sample in the SDK provides a full demonstration of Sinbad's capabilities. In particular, refer to the code in SinbadCharacterController.h. The comments should provide a fairly decent explanation of what is going on.
The development of Sinbad happened in this thread. Below are a few images showing Sinbad during various stages of development.
For creating, publishing, leading and support of Ogre for awesome 10 years, Steve got this award from the Ogre community when he retired from his lead position in 2010.