<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://horde3d.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wild13</id>
		<title>Horde3D Wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://horde3d.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wild13"/>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Special:Contributions/Wild13"/>
		<updated>2026-05-26T23:39:10Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.29.3</generator>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Gtkmm&amp;diff=318</id>
		<title>Tutorial - Setup Horde with Gtkmm</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Gtkmm&amp;diff=318"/>
				<updated>2008-08-17T18:06:26Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|  border=&amp;quot;0&amp;quot; &lt;br /&gt;
| {{ContentBlock|width=800|color=white&lt;br /&gt;
|content='''Here is a small example on how to use Horde with Gtkmm.''' &lt;br /&gt;
This is a small tutorial on how to setup Horde with Gtk+ using Gtkmm and Gtkglextmm.&lt;br /&gt;
This one is setup with the knight example. I leave the adjusting of the camera to you :)&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cHordeWidget.hpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
#define CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3DUtils.h&amp;gt;&lt;br /&gt;
#include &amp;lt;cstdlib&amp;gt;&lt;br /&gt;
#include &amp;lt;gtkmm.h&amp;gt;&lt;br /&gt;
#include &amp;lt;gtkglmm.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sstream&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
#include &amp;lt;iomanip&amp;gt;&lt;br /&gt;
#include &amp;lt;glibmm/timer.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class cHordeWidget : public Gtk::GL::DrawingArea{&lt;br /&gt;
    public:&lt;br /&gt;
        cHordeWidget();&lt;br /&gt;
        virtual ~cHordeWidget();&lt;br /&gt;
        bool on_timeout();&lt;br /&gt;
        float			_x, _y, _z, _rx, _ry;	// Viewer position and orientation&lt;br /&gt;
        float			_curFPS;&lt;br /&gt;
    protected:&lt;br /&gt;
        virtual void on_realize();&lt;br /&gt;
        virtual bool on_configure_event(GdkEventConfigure* event);&lt;br /&gt;
        virtual bool on_expose_event(GdkEventExpose* event);&lt;br /&gt;
        virtual bool on_motion_notify_event(GdkEventMotion* event);&lt;br /&gt;
        void init_hordeScene();&lt;br /&gt;
        void setup_hordeViewport();&lt;br /&gt;
        void render_hordeScene();&lt;br /&gt;
        void update_hordeScene();&lt;br /&gt;
        void get_FramesPerSecond();&lt;br /&gt;
    private:&lt;br /&gt;
        ResHandle		_pipeRes, _fontMatRes, _logoMatRes, _hdrPipeRes, _forwardPipeRes, _deferredPipeRes;&lt;br /&gt;
        NodeHandle		_cam, _knight, _particleSys;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        bool			_freeze;&lt;br /&gt;
        float			_animTime, _weight;&lt;br /&gt;
&lt;br /&gt;
        double          last_time;&lt;br /&gt;
        int             frames;&lt;br /&gt;
&lt;br /&gt;
        Glib::Timer     m_animtimer;&lt;br /&gt;
        Glib::Timer     m_fpstimer;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif // CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now for the cHordeWidget.cpp *Read the comments*&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cHordeWidget.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;../include/cHordeWidget.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
NodeHandle model = 0, cam = 0;&lt;br /&gt;
&lt;br /&gt;
cHordeWidget::cHordeWidget(){&lt;br /&gt;
&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Config&amp;gt; glconfig;&lt;br /&gt;
&lt;br /&gt;
    glconfig = Gdk::GL::Config::create(Gdk::GL::MODE_RGB | Gdk::GL::MODE_DEPTH | Gdk::GL::MODE_DOUBLE);&lt;br /&gt;
    add_events(Gdk::POINTER_MOTION_MASK);&lt;br /&gt;
    set_gl_capability(glconfig);&lt;br /&gt;
    Glib::signal_timeout().connect( sigc::mem_fun(*this, &amp;amp;cHordeWidget::on_timeout), 10);&lt;br /&gt;
    m_animtimer.start();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
cHordeWidget::~cHordeWidget(){&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::on_realize(){&lt;br /&gt;
    Gtk::GL::DrawingArea::on_realize();&lt;br /&gt;
&lt;br /&gt;
    //get gl::window&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
&lt;br /&gt;
    //begin gl commands&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
&lt;br /&gt;
    //init horde&lt;br /&gt;
    init_hordeScene();&lt;br /&gt;
    &lt;br /&gt;
    /end gl commands&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cHordeWidget::on_configure_event(GdkEventConfigure* event){&lt;br /&gt;
&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
&lt;br /&gt;
    //setup the viewport&lt;br /&gt;
    setup_hordeViewport();&lt;br /&gt;
&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cHordeWidget::on_expose_event(GdkEventExpose* event){&lt;br /&gt;
    &lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
&lt;br /&gt;
    //render the horde scene&lt;br /&gt;
    render_hordeScene();&lt;br /&gt;
    &lt;br /&gt;
    //swap our gl buffers use glflush if you use only one buffer&lt;br /&gt;
    glwindow-&amp;gt;swap_buffers();&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cHordeWidget::on_timeout(){&lt;br /&gt;
&lt;br /&gt;
    //update the horde scee&lt;br /&gt;
    update_hordeScene();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::init_hordeScene(){&lt;br /&gt;
&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::SceneGraph, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Geometry, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Animation, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Material, &amp;quot;materials&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Code, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Shader, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Texture2D, &amp;quot;textures&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::TextureCube, &amp;quot;textures&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Effect, &amp;quot;effects&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Pipeline, &amp;quot;pipelines&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	// Set options&lt;br /&gt;
	Horde3D::setOption( EngineOptions::LoadTextures, 1 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::TexCompression, 0 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::FastAnimation, 0 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::AnisotropyFactor, 8 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::ShadowMapSize, 2048 );&lt;br /&gt;
&lt;br /&gt;
	_hdrPipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;hdr.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
	_forwardPipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;forward.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
	_deferredPipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;deferred.pipeline.xml&amp;quot;,0);&lt;br /&gt;
	// Font&lt;br /&gt;
	_fontMatRes = Horde3D::addResource( ResourceTypes::Material, &amp;quot;font.material.xml&amp;quot;, 0 );&lt;br /&gt;
	// Logo&lt;br /&gt;
	_logoMatRes = Horde3D::addResource( ResourceTypes::Material, &amp;quot;logo.material.xml&amp;quot;, 0 );&lt;br /&gt;
	// Environment&lt;br /&gt;
	ResHandle envRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;sphere.scene.xml&amp;quot;, 0 );&lt;br /&gt;
	// Knight&lt;br /&gt;
	ResHandle knightRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;knight.scene.xml&amp;quot;, 0 );&lt;br /&gt;
	ResHandle knightAnim1Res = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;knight_order.anim&amp;quot;, 0 );&lt;br /&gt;
	ResHandle knightAnim2Res = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;knight_attack.anim&amp;quot;, 0 );&lt;br /&gt;
	// Particle system&lt;br /&gt;
	ResHandle particleSysRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;particleSys1.scene.xml&amp;quot;, 0 );&lt;br /&gt;
&lt;br /&gt;
        ResHandle skyBoxRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;skybox.scene.xml&amp;quot; ,0);&lt;br /&gt;
        // Load resources&lt;br /&gt;
	Horde3DUtils::loadResourcesFromDisk( &amp;quot;media&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	// Add camera&lt;br /&gt;
	_cam = Horde3D::addCameraNode( RootNode, &amp;quot;Camera&amp;quot;, _forwardPipeRes );&lt;br /&gt;
	//Horde3D::setNodeParami( _cam, CameraNodeParams::OcclusionCulling, 1 );&lt;br /&gt;
	// Add environment&lt;br /&gt;
	NodeHandle env = Horde3D::addNodes( RootNode, envRes );&lt;br /&gt;
&lt;br /&gt;
	Horde3D::setNodeTransform( env, 0, -20, 0, 0, 0, 0, 20, 20, 20 );&lt;br /&gt;
	// Add knight&lt;br /&gt;
	_knight = Horde3D::addNodes( RootNode, knightRes );&lt;br /&gt;
	Horde3D::setNodeTransform( _knight, 0, 0, 0, 0, 180, 0, 0.1f, 0.1f, 0.1f );&lt;br /&gt;
	Horde3D::setupModelAnimStage( _knight, 0, knightAnim1Res, &amp;quot;&amp;quot;, false );&lt;br /&gt;
	Horde3D::setupModelAnimStage( _knight, 1, knightAnim2Res, &amp;quot;&amp;quot;, false );&lt;br /&gt;
&lt;br /&gt;
	// Attach particle system to hand joint&lt;br /&gt;
	Horde3D::findNodes( _knight, &amp;quot;Bip01_R_Hand&amp;quot;, SceneNodeTypes::Joint );&lt;br /&gt;
	NodeHandle hand = Horde3D::getNodeFindResult( 0 );&lt;br /&gt;
	_particleSys = Horde3D::addNodes( hand, particleSysRes );&lt;br /&gt;
	Horde3D::setNodeTransform( _particleSys, 0, 40, 0, 90, 0, 0, 1, 1, 1 );&lt;br /&gt;
&lt;br /&gt;
        //add skybox&lt;br /&gt;
	NodeHandle sky = Horde3D::addNodes( RootNode, skyBoxRes);&lt;br /&gt;
	//set skybox position&lt;br /&gt;
	Horde3D::setNodeTransform( sky, 0, 0, 0, 0, 0, 0, 210, 50, 210 );&lt;br /&gt;
	// Add light source&lt;br /&gt;
	NodeHandle light = Horde3D::addLightNode( RootNode, &amp;quot;Light1&amp;quot;, 0, &amp;quot;LIGHTING&amp;quot;, &amp;quot;SHADOWMAP&amp;quot; );&lt;br /&gt;
	Horde3D::setNodeTransform( light, 0, 15, 10, -60, 0, 0, 1, 1, 1 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Radius, 30 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::FOV, 90 );&lt;br /&gt;
	Horde3D::setNodeParami( light, LightNodeParams::ShadowMapCount, 1 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::ShadowMapBias, 0.01f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_R, 1.0f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_G, 0.8f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_B, 0.7f );&lt;br /&gt;
&lt;br /&gt;
	// Customize post processing effects&lt;br /&gt;
	NodeHandle matRes = Horde3D::findResource( ResourceTypes::Material, &amp;quot;postHDR.material.xml&amp;quot; );&lt;br /&gt;
	// hdrParams: exposure, brightpass threshold, brightpass offset (see shader for description)&lt;br /&gt;
	Horde3D::setMaterialUniform( matRes, &amp;quot;hdrParams&amp;quot;, 2.5f, 0.5f, 0.08f, 0 );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::setup_hordeViewport(){&lt;br /&gt;
    //We have to init horde here becuase this is the first thing gtkmm calls when the widget is created. &lt;br /&gt;
    //This is also called everytime the window is expanded the boolean is there just so nothing bad happens when initing horde over and over.&lt;br /&gt;
    bool hinit = false;&lt;br /&gt;
    if(hinit == false){ Horde3D::init(); hinit = true;}&lt;br /&gt;
    Horde3D::resize(0,0,get_width(),get_height());&lt;br /&gt;
    Horde3D::setupCameraView(cam,45.0f,(float)get_width()/get_height(),0.1f,1000.0f);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::render_hordeScene(){&lt;br /&gt;
    m_fpstimer.start();&lt;br /&gt;
&lt;br /&gt;
    //Horde3D::setOption( EngineOptions::DebugViewMode, _debugViewMode ? 1.0f : 0.0f );&lt;br /&gt;
    //Horde3D::setOption( EngineOptions::WireframeMode, _wireframeMode ? 1.0f : 0.0f );&lt;br /&gt;
&lt;br /&gt;
    // Do animation blending&lt;br /&gt;
    Horde3D::setModelAnimParams( _knight, 0, _animTime  , _weight );&lt;br /&gt;
    Horde3D::setModelAnimParams( _knight, 1, _animTime , 1.0f - _weight );&lt;br /&gt;
&lt;br /&gt;
    // Animate particle systems (several emitters in a group node)&lt;br /&gt;
    unsigned int cnt = cnt = Horde3D::findNodes( _particleSys, &amp;quot;&amp;quot;, SceneNodeTypes::Emitter );&lt;br /&gt;
&lt;br /&gt;
    for( unsigned int i = 0; i &amp;lt; cnt; ++i )&lt;br /&gt;
        Horde3D::advanceEmitterTime( Horde3D::getNodeFindResult( i ), 1.0f / _curFPS );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    // Set camera parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    // Show logo&lt;br /&gt;
    Horde3D::showOverlay( 0.75f, 0, 0, 0, 1, 0, 1, 0,&lt;br /&gt;
					  1, 0.2f, 1, 1, 0.75f, 0.2f, 0, 1,&lt;br /&gt;
					  7, _logoMatRes );&lt;br /&gt;
&lt;br /&gt;
    // Render scene&lt;br /&gt;
    Horde3D::render( _cam );&lt;br /&gt;
&lt;br /&gt;
    // Remove all overlays&lt;br /&gt;
    Horde3D::clearOverlays();&lt;br /&gt;
&lt;br /&gt;
    get_FramesPerSecond();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::update_hordeScene(){&lt;br /&gt;
&lt;br /&gt;
    double seconds = m_animtimer.elapsed();&lt;br /&gt;
&lt;br /&gt;
    _animTime +=  seconds * 30;&lt;br /&gt;
&lt;br /&gt;
    m_animtimer.reset();&lt;br /&gt;
    Horde3D::setNodeTransform( _cam, _x, _y, _z, _rx ,_ry, 0, 1, 1, 1 );&lt;br /&gt;
    Gtk::Widget::queue_draw();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::get_FramesPerSecond(){&lt;br /&gt;
    ++frames;&lt;br /&gt;
&lt;br /&gt;
    last_time = last_time + m_fpstimer.elapsed();&lt;br /&gt;
&lt;br /&gt;
    if(last_time &amp;gt;= 0){&lt;br /&gt;
        _curFPS = (float)(frames / last_time);&lt;br /&gt;
        frames = 0;&lt;br /&gt;
        last_time = 0;&lt;br /&gt;
        m_fpstimer.reset();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    std::cout&amp;lt;&amp;lt;_curFPS&amp;lt;&amp;lt;endl;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//This event handler must be set and return false in order for are mouse movement to be captured&lt;br /&gt;
bool cHordeWidget::on_motion_notify_event(GdkEventMotion* event){&lt;br /&gt;
&lt;br /&gt;
        return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now for the window widget.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cWindow.hpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef CWINDOW_HPP_INCLUDED&lt;br /&gt;
#define CWINDOW_HPP_INCLUDED&lt;br /&gt;
#include &amp;lt;gtkmm.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
#include &amp;quot;cHordeWidget.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class cWindow : public Gtk::Window{&lt;br /&gt;
    public:&lt;br /&gt;
        cWindow();&lt;br /&gt;
        virtual ~cWindow();&lt;br /&gt;
&lt;br /&gt;
    protected:&lt;br /&gt;
&lt;br /&gt;
        virtual bool on_key_press_event(GdkEventKey* event);&lt;br /&gt;
        virtual bool on_key_release_event(GdkEventKey* event);&lt;br /&gt;
        virtual bool on_motion_notify_event(GdkEventMotion* event);&lt;br /&gt;
        virtual bool on_focus_in (GdkEventFocus*);&lt;br /&gt;
        bool on_timeout();&lt;br /&gt;
        void handleinput();&lt;br /&gt;
    private:&lt;br /&gt;
        Gtk::VBox m_vBox;&lt;br /&gt;
&lt;br /&gt;
        cHordeWidget m_hordeWidget;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif // CWINDOW_HPP_INCLUDED&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now the window widgets cpp&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cWindow.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;../include/cWindow.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inline float degToRad( float f )&lt;br /&gt;
{&lt;br /&gt;
	return f * (3.1415926f / 180.0f);&lt;br /&gt;
}&lt;br /&gt;
//array to hold keys&lt;br /&gt;
int keyDown[256];&lt;br /&gt;
&lt;br /&gt;
cWindow::cWindow(){&lt;br /&gt;
    set_title(&amp;quot;Horde with gtkmm&amp;quot;);&lt;br /&gt;
    set_reallocate_redraws(true);&lt;br /&gt;
&lt;br /&gt;
    add(m_vBox);&lt;br /&gt;
    add_events(Gdk::POINTER_MOTION_MASK | Gdk::POINTER_MOTION_HINT_MASK |&lt;br /&gt;
    Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK);&lt;br /&gt;
    Glib::signal_timeout().connect( sigc::mem_fun(*this, &amp;amp;cWindow::on_timeout), 10);&lt;br /&gt;
    signal_focus_in_event().connect(sigc::mem_fun(*this, &amp;amp;cWindow::on_focus_in) );&lt;br /&gt;
    m_hordeWidget.set_size_request(800,600);&lt;br /&gt;
&lt;br /&gt;
    m_vBox.pack_start(m_hordeWidget);&lt;br /&gt;
&lt;br /&gt;
    show_all();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
cWindow::~cWindow(){&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cWindow::on_key_press_event(GdkEventKey* event){&lt;br /&gt;
&lt;br /&gt;
    if(event-&amp;gt;keyval == GDK_Escape){&lt;br /&gt;
      Gtk::Main::quit();}else{&lt;br /&gt;
&lt;br /&gt;
    //sets the key in the array to true&lt;br /&gt;
    keyDown[event-&amp;gt;keyval] = 1;}&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cWindow::on_key_release_event(GdkEventKey *event){&lt;br /&gt;
    //sets the key in the array to false&lt;br /&gt;
    keyDown[event-&amp;gt;keyval] = 0;&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cWindow::handleinput(){&lt;br /&gt;
    float curVel = 240/m_hordeWidget._curFPS;&lt;br /&gt;
    //checks if a certain key is true and acts on it&lt;br /&gt;
    if(keyDown['w']){&lt;br /&gt;
        m_hordeWidget._x -= sinf( degToRad( m_hordeWidget._ry ) ) * cosf( -degToRad( m_hordeWidget._rx ) ) * curVel;&lt;br /&gt;
		m_hordeWidget._y -= sinf( -degToRad( m_hordeWidget._rx ) ) * curVel;&lt;br /&gt;
		m_hordeWidget._z -= cosf( degToRad( m_hordeWidget._ry ) ) * cosf( -degToRad( m_hordeWidget._rx ) ) * curVel;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if(keyDown['s']){&lt;br /&gt;
        m_hordeWidget._x += sinf( degToRad( m_hordeWidget._ry ) ) * cosf( -degToRad( m_hordeWidget._rx ) ) * curVel;&lt;br /&gt;
		m_hordeWidget._y += sinf( -degToRad( m_hordeWidget._rx ) ) * curVel;&lt;br /&gt;
		m_hordeWidget._z += cosf( degToRad( m_hordeWidget._ry ) ) * cosf( -degToRad( m_hordeWidget._rx ) ) * curVel;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if(keyDown['a']){&lt;br /&gt;
        m_hordeWidget._x += sinf( degToRad( m_hordeWidget._ry - 90) ) * curVel;&lt;br /&gt;
		m_hordeWidget._z += cosf( degToRad( m_hordeWidget._ry - 90 ) ) * curVel;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if(keyDown['d']){&lt;br /&gt;
        m_hordeWidget._x += sinf( degToRad( m_hordeWidget._ry + 90 ) ) * curVel;&lt;br /&gt;
		m_hordeWidget._z += cosf( degToRad( m_hordeWidget._ry + 90 ) ) * curVel;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
//called only when mouse is moved *cause for the camera appearing glitchy*&lt;br /&gt;
bool cWindow::on_motion_notify_event(GdkEventMotion* event){&lt;br /&gt;
&lt;br /&gt;
    m_hordeWidget._ry -= (event-&amp;gt;x -(get_width() /2)) / 450 ;&lt;br /&gt;
&lt;br /&gt;
   	m_hordeWidget._rx -= (event-&amp;gt;y -(get_height()/2)) / 450 ;&lt;br /&gt;
&lt;br /&gt;
	if( m_hordeWidget._rx &amp;gt; 90 ) m_hordeWidget._rx = 90;&lt;br /&gt;
	if( m_hordeWidget._rx &amp;lt; -90 ) m_hordeWidget._rx = -90;&lt;br /&gt;
&lt;br /&gt;
    return false;&lt;br /&gt;
}&lt;br /&gt;
//called constantly&lt;br /&gt;
bool cWindow::on_timeout(){&lt;br /&gt;
    int xp = 0;&lt;br /&gt;
    int yp = 0;&lt;br /&gt;
    get_pointer(xp,yp);&lt;br /&gt;
    handleinput();&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cWindow::on_focus_in(GdkEventFocus* event )&lt;br /&gt;
{&lt;br /&gt;
    //Hide the curosr&lt;br /&gt;
    // Ok, here we create a dummy cursor. See gdkmm reference for more details&lt;br /&gt;
    Gdk::Cursor cursor = Gdk::Cursor(Gdk::Display::get_default(),&lt;br /&gt;
				     Gdk::Pixbuf::create(&lt;br /&gt;
					 Gdk::COLORSPACE_RGB, true, 8, 1, 1),&lt;br /&gt;
				     0, 0);&lt;br /&gt;
&lt;br /&gt;
    get_window()-&amp;gt;set_cursor(cursor);&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Finnaly the main.cpp *Read the Comments*&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= main.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;gtkmm.h&amp;gt;&lt;br /&gt;
//Include our custom widget&lt;br /&gt;
#include &amp;quot;include/cWindow.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]){&lt;br /&gt;
    //Init Gtk+&lt;br /&gt;
    Gtk::Main init (argc, argv);&lt;br /&gt;
    //Init Gtk+ opengl&lt;br /&gt;
    Gtk::GL::init (argc, argv);&lt;br /&gt;
    //Create our Window object&lt;br /&gt;
    cWindow window;&lt;br /&gt;
    //Run the program&lt;br /&gt;
    Gtk::Main::run(window);&lt;br /&gt;
    //Safe exit message&lt;br /&gt;
    return EXIT_SUCCESS;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 23:21, 8 August 2008 (CEST)&lt;br /&gt;
}}&lt;br /&gt;
|  valign=&amp;quot;top&amp;quot; | {{Extension_Summary|&lt;br /&gt;
name = Horde With Gtkmm|&lt;br /&gt;
screenshot = H3DPlaceHolder.png|&lt;br /&gt;
description = This tutorial introduces the use of Horde3D with Gtkmm|&lt;br /&gt;
version = 1.0|&lt;br /&gt;
horde3dversion = 1.0 beta|&lt;br /&gt;
released = 2008-07-8|&lt;br /&gt;
author = Raynaldo Rivera|&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
[[category: Tutorials]]&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Gtkmm&amp;diff=317</id>
		<title>Tutorial - Setup Horde with Gtkmm</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Gtkmm&amp;diff=317"/>
				<updated>2008-08-15T05:56:27Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|  border=&amp;quot;0&amp;quot; &lt;br /&gt;
| {{ContentBlock|width=800|color=white&lt;br /&gt;
|content='''Here is a small example on how to use Horde with Gtkmm.''' &lt;br /&gt;
This is a small tutorial on how to setup Horde with Gtk+ using Gtkmm and Gtkglextmm.&lt;br /&gt;
This one is setup with the knight example. I leave the adjusting of the camera to you :)&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cHordeWidget.hpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
#define CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3DUtils.h&amp;gt;&lt;br /&gt;
#include &amp;lt;cstdlib&amp;gt;&lt;br /&gt;
#include &amp;lt;gtkmm.h&amp;gt;&lt;br /&gt;
#include &amp;lt;gtkglmm.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sstream&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
#include &amp;lt;iomanip&amp;gt;&lt;br /&gt;
#include &amp;lt;glibmm/timer.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class cHordeWidget : public Gtk::GL::DrawingArea{&lt;br /&gt;
    public:&lt;br /&gt;
        cHordeWidget();&lt;br /&gt;
        virtual ~cHordeWidget();&lt;br /&gt;
        bool on_timeout();&lt;br /&gt;
        float			_x, _y, _z, _rx, _ry;	// Viewer position and orientation&lt;br /&gt;
        float			_curFPS;&lt;br /&gt;
    protected:&lt;br /&gt;
        virtual void on_realize();&lt;br /&gt;
        virtual bool on_configure_event(GdkEventConfigure* event);&lt;br /&gt;
        virtual bool on_expose_event(GdkEventExpose* event);&lt;br /&gt;
        virtual bool on_motion_notify_event(GdkEventMotion* event);&lt;br /&gt;
        void init_hordeScene();&lt;br /&gt;
        void setup_hordeViewport();&lt;br /&gt;
        void render_hordeScene();&lt;br /&gt;
        void update_hordeScene();&lt;br /&gt;
        void get_FramesPerSecond();&lt;br /&gt;
    private:&lt;br /&gt;
        ResHandle		_pipeRes, _fontMatRes, _logoMatRes, _hdrPipeRes, _forwardPipeRes, _deferredPipeRes;&lt;br /&gt;
        NodeHandle		_cam, _knight, _particleSys;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        bool			_freeze;&lt;br /&gt;
        float			_animTime, _weight;&lt;br /&gt;
&lt;br /&gt;
        double          last_time;&lt;br /&gt;
        int             frames;&lt;br /&gt;
&lt;br /&gt;
        Glib::Timer     m_animtimer;&lt;br /&gt;
        Glib::Timer     m_fpstimer;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif // CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now for the cHordeWidget.cpp *Read the comments*&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cHordeWidget.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;../include/cHordeWidget.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
NodeHandle model = 0, cam = 0;&lt;br /&gt;
&lt;br /&gt;
cHordeWidget::cHordeWidget(){&lt;br /&gt;
&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Config&amp;gt; glconfig;&lt;br /&gt;
&lt;br /&gt;
    glconfig = Gdk::GL::Config::create(Gdk::GL::MODE_RGB | Gdk::GL::MODE_DEPTH | Gdk::GL::MODE_DOUBLE);&lt;br /&gt;
    add_events(Gdk::POINTER_MOTION_MASK);&lt;br /&gt;
    set_gl_capability(glconfig);&lt;br /&gt;
    Glib::signal_timeout().connect( sigc::mem_fun(*this, &amp;amp;cHordeWidget::on_timeout), 10);&lt;br /&gt;
    m_animtimer.start();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
cHordeWidget::~cHordeWidget(){&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::on_realize(){&lt;br /&gt;
    Gtk::GL::DrawingArea::on_realize();&lt;br /&gt;
&lt;br /&gt;
    //get gl::window&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
&lt;br /&gt;
    //begin gl commands&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
&lt;br /&gt;
    //init horde&lt;br /&gt;
    init_hordeScene();&lt;br /&gt;
    &lt;br /&gt;
    /end gl commands&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cHordeWidget::on_configure_event(GdkEventConfigure* event){&lt;br /&gt;
&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
&lt;br /&gt;
    //setup the viewport&lt;br /&gt;
    setup_hordeViewport();&lt;br /&gt;
&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cHordeWidget::on_expose_event(GdkEventExpose* event){&lt;br /&gt;
    &lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
&lt;br /&gt;
    //render the horde scene&lt;br /&gt;
    render_hordeScene();&lt;br /&gt;
    &lt;br /&gt;
    //swap our gl buffers use glflush if you use only one buffer&lt;br /&gt;
    glwindow-&amp;gt;swap_buffers();&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cHordeWidget::on_timeout(){&lt;br /&gt;
&lt;br /&gt;
    //update the horde scee&lt;br /&gt;
    update_hordeScene();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::init_hordeScene(){&lt;br /&gt;
&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::SceneGraph, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Geometry, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Animation, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Material, &amp;quot;materials&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Code, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Shader, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Texture2D, &amp;quot;textures&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::TextureCube, &amp;quot;textures&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Effect, &amp;quot;effects&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Pipeline, &amp;quot;pipelines&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	// Set options&lt;br /&gt;
	Horde3D::setOption( EngineOptions::LoadTextures, 1 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::TexCompression, 0 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::FastAnimation, 0 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::AnisotropyFactor, 8 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::ShadowMapSize, 2048 );&lt;br /&gt;
&lt;br /&gt;
	_hdrPipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;hdr.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
	_forwardPipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;forward.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
	_deferredPipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;deferred.pipeline.xml&amp;quot;,0);&lt;br /&gt;
	// Font&lt;br /&gt;
	_fontMatRes = Horde3D::addResource( ResourceTypes::Material, &amp;quot;font.material.xml&amp;quot;, 0 );&lt;br /&gt;
	// Logo&lt;br /&gt;
	_logoMatRes = Horde3D::addResource( ResourceTypes::Material, &amp;quot;logo.material.xml&amp;quot;, 0 );&lt;br /&gt;
	// Environment&lt;br /&gt;
	ResHandle envRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;sphere.scene.xml&amp;quot;, 0 );&lt;br /&gt;
	// Knight&lt;br /&gt;
	ResHandle knightRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;knight.scene.xml&amp;quot;, 0 );&lt;br /&gt;
	ResHandle knightAnim1Res = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;knight_order.anim&amp;quot;, 0 );&lt;br /&gt;
	ResHandle knightAnim2Res = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;knight_attack.anim&amp;quot;, 0 );&lt;br /&gt;
	// Particle system&lt;br /&gt;
	ResHandle particleSysRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;particleSys1.scene.xml&amp;quot;, 0 );&lt;br /&gt;
&lt;br /&gt;
        ResHandle skyBoxRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;skybox.scene.xml&amp;quot; ,0);&lt;br /&gt;
        // Load resources&lt;br /&gt;
	Horde3DUtils::loadResourcesFromDisk( &amp;quot;media&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	// Add camera&lt;br /&gt;
	_cam = Horde3D::addCameraNode( RootNode, &amp;quot;Camera&amp;quot;, _forwardPipeRes );&lt;br /&gt;
	//Horde3D::setNodeParami( _cam, CameraNodeParams::OcclusionCulling, 1 );&lt;br /&gt;
	// Add environment&lt;br /&gt;
	NodeHandle env = Horde3D::addNodes( RootNode, envRes );&lt;br /&gt;
&lt;br /&gt;
	Horde3D::setNodeTransform( env, 0, -20, 0, 0, 0, 0, 20, 20, 20 );&lt;br /&gt;
	// Add knight&lt;br /&gt;
	_knight = Horde3D::addNodes( RootNode, knightRes );&lt;br /&gt;
	Horde3D::setNodeTransform( _knight, 0, 0, 0, 0, 180, 0, 0.1f, 0.1f, 0.1f );&lt;br /&gt;
	Horde3D::setupModelAnimStage( _knight, 0, knightAnim1Res, &amp;quot;&amp;quot;, false );&lt;br /&gt;
	Horde3D::setupModelAnimStage( _knight, 1, knightAnim2Res, &amp;quot;&amp;quot;, false );&lt;br /&gt;
&lt;br /&gt;
	// Attach particle system to hand joint&lt;br /&gt;
	Horde3D::findNodes( _knight, &amp;quot;Bip01_R_Hand&amp;quot;, SceneNodeTypes::Joint );&lt;br /&gt;
	NodeHandle hand = Horde3D::getNodeFindResult( 0 );&lt;br /&gt;
	_particleSys = Horde3D::addNodes( hand, particleSysRes );&lt;br /&gt;
	Horde3D::setNodeTransform( _particleSys, 0, 40, 0, 90, 0, 0, 1, 1, 1 );&lt;br /&gt;
&lt;br /&gt;
        //add skybox&lt;br /&gt;
	NodeHandle sky = Horde3D::addNodes( RootNode, skyBoxRes);&lt;br /&gt;
	//set skybox position&lt;br /&gt;
	Horde3D::setNodeTransform( sky, 0, 0, 0, 0, 0, 0, 210, 50, 210 );&lt;br /&gt;
	// Add light source&lt;br /&gt;
	NodeHandle light = Horde3D::addLightNode( RootNode, &amp;quot;Light1&amp;quot;, 0, &amp;quot;LIGHTING&amp;quot;, &amp;quot;SHADOWMAP&amp;quot; );&lt;br /&gt;
	Horde3D::setNodeTransform( light, 0, 15, 10, -60, 0, 0, 1, 1, 1 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Radius, 30 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::FOV, 90 );&lt;br /&gt;
	Horde3D::setNodeParami( light, LightNodeParams::ShadowMapCount, 1 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::ShadowMapBias, 0.01f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_R, 1.0f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_G, 0.8f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_B, 0.7f );&lt;br /&gt;
&lt;br /&gt;
	// Customize post processing effects&lt;br /&gt;
	NodeHandle matRes = Horde3D::findResource( ResourceTypes::Material, &amp;quot;postHDR.material.xml&amp;quot; );&lt;br /&gt;
	// hdrParams: exposure, brightpass threshold, brightpass offset (see shader for description)&lt;br /&gt;
	Horde3D::setMaterialUniform( matRes, &amp;quot;hdrParams&amp;quot;, 2.5f, 0.5f, 0.08f, 0 );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::setup_hordeViewport(){&lt;br /&gt;
    //We have to init horde here becuase this is the first thing gtkmm calls when the widget is created. &lt;br /&gt;
    //This is also called everytime the window is expanded the boolean is there just so nothing bad happens when initing horde over and over.&lt;br /&gt;
    bool hinit = false;&lt;br /&gt;
    if(hinit == false){ Horde3D::init(); hinit = true;}&lt;br /&gt;
    Horde3D::resize(0,0,get_width(),get_height());&lt;br /&gt;
    Horde3D::setupCameraView(cam,45.0f,(float)get_width()/get_height(),0.1f,1000.0f);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::render_hordeScene(){&lt;br /&gt;
    m_fpstimer.start();&lt;br /&gt;
&lt;br /&gt;
    //Horde3D::setOption( EngineOptions::DebugViewMode, _debugViewMode ? 1.0f : 0.0f );&lt;br /&gt;
    //Horde3D::setOption( EngineOptions::WireframeMode, _wireframeMode ? 1.0f : 0.0f );&lt;br /&gt;
&lt;br /&gt;
    // Do animation blending&lt;br /&gt;
    Horde3D::setModelAnimParams( _knight, 0, _animTime  , _weight );&lt;br /&gt;
    Horde3D::setModelAnimParams( _knight, 1, _animTime , 1.0f - _weight );&lt;br /&gt;
&lt;br /&gt;
    // Animate particle systems (several emitters in a group node)&lt;br /&gt;
    unsigned int cnt = cnt = Horde3D::findNodes( _particleSys, &amp;quot;&amp;quot;, SceneNodeTypes::Emitter );&lt;br /&gt;
&lt;br /&gt;
    for( unsigned int i = 0; i &amp;lt; cnt; ++i )&lt;br /&gt;
        Horde3D::advanceEmitterTime( Horde3D::getNodeFindResult( i ), 1.0f / _curFPS );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    // Set camera parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    // Show logo&lt;br /&gt;
    Horde3D::showOverlay( 0.75f, 0, 0, 0, 1, 0, 1, 0,&lt;br /&gt;
					  1, 0.2f, 1, 1, 0.75f, 0.2f, 0, 1,&lt;br /&gt;
					  7, _logoMatRes );&lt;br /&gt;
&lt;br /&gt;
    // Render scene&lt;br /&gt;
    Horde3D::render( _cam );&lt;br /&gt;
&lt;br /&gt;
    // Remove all overlays&lt;br /&gt;
    Horde3D::clearOverlays();&lt;br /&gt;
&lt;br /&gt;
    get_FramesPerSecond();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::update_hordeScene(){&lt;br /&gt;
&lt;br /&gt;
    double seconds = m_animtimer.elapsed();&lt;br /&gt;
&lt;br /&gt;
    _animTime +=  seconds * 30;&lt;br /&gt;
&lt;br /&gt;
    m_animtimer.reset();&lt;br /&gt;
    Horde3D::setNodeTransform( _cam, _x, _y, _z, _rx ,_ry, 0, 1, 1, 1 );&lt;br /&gt;
    Gtk::Widget::queue_draw();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::get_FramesPerSecond(){&lt;br /&gt;
    ++frames;&lt;br /&gt;
&lt;br /&gt;
    last_time = last_time + m_fpstimer.elapsed();&lt;br /&gt;
&lt;br /&gt;
    if(last_time &amp;gt;= 0){&lt;br /&gt;
        _curFPS = (float)(frames / last_time);&lt;br /&gt;
        frames = 0;&lt;br /&gt;
        last_time = 0;&lt;br /&gt;
        m_fpstimer.reset();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    std::cout&amp;lt;&amp;lt;_curFPS&amp;lt;&amp;lt;endl;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//This event handler must be set and return false in order for are mouse movement to be captured&lt;br /&gt;
bool cHordeWidget::on_motion_notify_event(GdkEventMotion* event){&lt;br /&gt;
&lt;br /&gt;
        return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now for the window widget.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cWindow.hpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef CWINDOW_HPP_INCLUDED&lt;br /&gt;
#define CWINDOW_HPP_INCLUDED&lt;br /&gt;
#include &amp;lt;gtkmm.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
#include &amp;quot;cHordeWidget.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class cWindow : public Gtk::Window{&lt;br /&gt;
    public:&lt;br /&gt;
        cWindow();&lt;br /&gt;
        virtual ~cWindow();&lt;br /&gt;
&lt;br /&gt;
    protected:&lt;br /&gt;
&lt;br /&gt;
        virtual bool on_key_press_event(GdkEventKey* event);&lt;br /&gt;
        virtual bool on_key_release_event(GdkEventKey* event);&lt;br /&gt;
        virtual bool on_motion_notify_event(GdkEventMotion* event);&lt;br /&gt;
        virtual bool on_focus_in (GdkEventFocus*);&lt;br /&gt;
        bool on_timeout();&lt;br /&gt;
        void handleinput();&lt;br /&gt;
    private:&lt;br /&gt;
        Gtk::VBox m_vBox;&lt;br /&gt;
&lt;br /&gt;
        cHordeWidget m_hordeWidget;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif // CWINDOW_HPP_INCLUDED&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now the window widgets cpp&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cWindow.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;../include/cWindow.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inline float degToRad( float f )&lt;br /&gt;
{&lt;br /&gt;
	return f * (3.1415926f / 180.0f);&lt;br /&gt;
}&lt;br /&gt;
//array to hold keys&lt;br /&gt;
int keyDown[256];&lt;br /&gt;
&lt;br /&gt;
cWindow::cWindow(){&lt;br /&gt;
    set_title(&amp;quot;Horde with gtkmm&amp;quot;);&lt;br /&gt;
    set_reallocate_redraws(true);&lt;br /&gt;
&lt;br /&gt;
    add(m_vBox);&lt;br /&gt;
    add_events(Gdk::POINTER_MOTION_MASK | Gdk::POINTER_MOTION_HINT_MASK |&lt;br /&gt;
    Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK);&lt;br /&gt;
    Glib::signal_timeout().connect( sigc::mem_fun(*this, &amp;amp;cWindow::on_timeout), 10);&lt;br /&gt;
    signal_focus_in_event().connect(sigc::mem_fun(*this, &amp;amp;cWindow::on_focus_in) );&lt;br /&gt;
    m_hordeWidget.set_size_request(800,600);&lt;br /&gt;
&lt;br /&gt;
    m_vBox.pack_start(m_hordeWidget);&lt;br /&gt;
&lt;br /&gt;
    show_all();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
cWindow::~cWindow(){&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cWindow::on_key_press_event(GdkEventKey* event){&lt;br /&gt;
&lt;br /&gt;
    if(event-&amp;gt;keyval == GDK_Escape){&lt;br /&gt;
      Gtk::Main::quit();}else{&lt;br /&gt;
&lt;br /&gt;
    //sets the key in the array to true&lt;br /&gt;
    keyDown[event-&amp;gt;keyval] = 1;}&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cWindow::on_key_release_event(GdkEventKey *event){&lt;br /&gt;
    //sets the key in the array to false&lt;br /&gt;
    keyDown[event-&amp;gt;keyval] = 0;&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cWindow::handleinput(){&lt;br /&gt;
    float curVel = 240/m_hordeWidget._curFPS;&lt;br /&gt;
    //checks if a certain key is true and acts on it&lt;br /&gt;
    if(keyDown['w']){&lt;br /&gt;
        m_hordeWidget._x -= sinf( degToRad( m_hordeWidget._ry ) ) * cosf( -degToRad( m_hordeWidget._rx ) ) * curVel;&lt;br /&gt;
		m_hordeWidget._y -= sinf( -degToRad( m_hordeWidget._rx ) ) * curVel;&lt;br /&gt;
		m_hordeWidget._z -= cosf( degToRad( m_hordeWidget._ry ) ) * cosf( -degToRad( m_hordeWidget._rx ) ) * curVel;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if(keyDown['s']){&lt;br /&gt;
        m_hordeWidget._x += sinf( degToRad( m_hordeWidget._ry ) ) * cosf( -degToRad( m_hordeWidget._rx ) ) * curVel;&lt;br /&gt;
		m_hordeWidget._y += sinf( -degToRad( m_hordeWidget._rx ) ) * curVel;&lt;br /&gt;
		m_hordeWidget._z += cosf( degToRad( m_hordeWidget._ry ) ) * cosf( -degToRad( m_hordeWidget._rx ) ) * curVel;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if(keyDown['a']){&lt;br /&gt;
        m_hordeWidget._x += sinf( degToRad( m_hordeWidget._ry - 90) ) * curVel;&lt;br /&gt;
		m_hordeWidget._z += cosf( degToRad( m_hordeWidget._ry - 90 ) ) * curVel;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if(keyDown['d']){&lt;br /&gt;
        m_hordeWidget._x += sinf( degToRad( m_hordeWidget._ry + 90 ) ) * curVel;&lt;br /&gt;
		m_hordeWidget._z += cosf( degToRad( m_hordeWidget._ry + 90 ) ) * curVel;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
//called only when mouse is moved *cause for the camera appearing glitchy*&lt;br /&gt;
bool cWindow::on_motion_notify_event(GdkEventMotion* event){&lt;br /&gt;
&lt;br /&gt;
    m_hordeWidget._ry -= (event-&amp;gt;x -(get_width() /2)) / 450 ;&lt;br /&gt;
&lt;br /&gt;
   	m_hordeWidget._rx -= (event-&amp;gt;y -(get_height()/2)) / 450 ;&lt;br /&gt;
&lt;br /&gt;
	if( m_hordeWidget._rx &amp;gt; 90 ) m_hordeWidget._rx = 90;&lt;br /&gt;
	if( m_hordeWidget._rx &amp;lt; -90 ) m_hordeWidget._rx = -90;&lt;br /&gt;
&lt;br /&gt;
    return false;&lt;br /&gt;
}&lt;br /&gt;
//called constantly&lt;br /&gt;
bool cWindow::on_timeout(){&lt;br /&gt;
    int xp = 0;&lt;br /&gt;
    int yp = 0;&lt;br /&gt;
    get_pointer(xp,yp);&lt;br /&gt;
    handleinput();&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cWindow::on_focus_in(GdkEventFocus* event )&lt;br /&gt;
{&lt;br /&gt;
    //Hide the curosr&lt;br /&gt;
    // Ok, here we create a dummy cursor. See gdkmm reference for more details&lt;br /&gt;
    Gdk::Cursor cursor = Gdk::Cursor(Gdk::Display::get_default(),&lt;br /&gt;
				     Gdk::Pixbuf::create(&lt;br /&gt;
					 Gdk::COLORSPACE_RGB, true, 8, 1, 1),&lt;br /&gt;
				     0, 0);&lt;br /&gt;
&lt;br /&gt;
    get_window()-&amp;gt;set_cursor(cursor);&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Finnaly the main.cpp *Read the Comments*&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= main.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;gtkmm.h&amp;gt;&lt;br /&gt;
//Include our custom widget&lt;br /&gt;
#include &amp;quot;include/cHordeWidget.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]){&lt;br /&gt;
    //Init Gtk+&lt;br /&gt;
    Gtk::Main init (argc, argv);&lt;br /&gt;
    //Init Gtk+ opengl&lt;br /&gt;
    Gtk::GL::init (argc, argv);&lt;br /&gt;
    //Create our Window object&lt;br /&gt;
    Gtk::Window window;&lt;br /&gt;
    //Set our window title&lt;br /&gt;
    window.set_title (&amp;quot;Horde3D In Gtk+ Window&amp;quot;);&lt;br /&gt;
    //Create our cHordeWidget&lt;br /&gt;
    cHordeWidget drawing;&lt;br /&gt;
    //Set the cHordeWidgets size&lt;br /&gt;
    drawing.set_size_request(800, 600);&lt;br /&gt;
    //Add the cHordeWidget to our window&lt;br /&gt;
    window.add (drawing);&lt;br /&gt;
    //Show our cHordeWidget. All widgets are invisible by default.&lt;br /&gt;
    window.show_all ();&lt;br /&gt;
    //Run our window&lt;br /&gt;
    Gtk::Main::run (window);&lt;br /&gt;
    //Just a return statement&lt;br /&gt;
    return EXIT_SUCCESS;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 23:21, 8 August 2008 (CEST)&lt;br /&gt;
}}&lt;br /&gt;
|  valign=&amp;quot;top&amp;quot; | {{Extension_Summary|&lt;br /&gt;
name = Horde With Gtkmm|&lt;br /&gt;
screenshot = H3DPlaceHolder.png|&lt;br /&gt;
description = This tutorial introduces the use of Horde3D with Gtkmm|&lt;br /&gt;
version = 1.0|&lt;br /&gt;
horde3dversion = 1.0 beta|&lt;br /&gt;
released = 2008-07-8|&lt;br /&gt;
author = Raynaldo Rivera|&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
[[category: Tutorials]]&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Gtkmm&amp;diff=311</id>
		<title>Tutorial - Setup Horde with Gtkmm</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Gtkmm&amp;diff=311"/>
				<updated>2008-08-09T17:19:14Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|  border=&amp;quot;0&amp;quot; &lt;br /&gt;
| {{ContentBlock|width=800|color=white&lt;br /&gt;
|content='''Here is a small example on how to use Horde with Gtkmm.''' &lt;br /&gt;
This is a small tutorial on how to setup Horde with Gtk+ using Gtkmm and Gtkglextmm.&lt;br /&gt;
This one is setup with the knight example. I leave the adjusting of the camera to you :)&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cHordeWidget.hpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
#define CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3DUtils.h&amp;gt;&lt;br /&gt;
#include &amp;lt;cstdlib&amp;gt;&lt;br /&gt;
#include &amp;lt;gtkmm.h&amp;gt;&lt;br /&gt;
#include &amp;lt;gtkglmm.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sstream&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
#include &amp;lt;iomanip&amp;gt;&lt;br /&gt;
#include &amp;lt;glibmm/timer.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class cHordeWidget : public Gtk::GL::DrawingArea{&lt;br /&gt;
    public:&lt;br /&gt;
        cHordeWidget();&lt;br /&gt;
        virtual ~cHordeWidget();&lt;br /&gt;
        bool on_timeout();&lt;br /&gt;
&lt;br /&gt;
    protected:&lt;br /&gt;
        virtual void on_realize();&lt;br /&gt;
        virtual bool on_configure_event(GdkEventConfigure* event);&lt;br /&gt;
        virtual bool on_expose_event(GdkEventExpose* event);&lt;br /&gt;
        //our horde init function&lt;br /&gt;
        void init_hordeScene();&lt;br /&gt;
        //our horde viewport functon&lt;br /&gt;
        void setup_hordeViewport();&lt;br /&gt;
        //our horde render function&lt;br /&gt;
        void render_hordeScene();&lt;br /&gt;
        //finnaly our horde update function&lt;br /&gt;
        void update_hordeScene();&lt;br /&gt;
        //gets are current fps&lt;br /&gt;
        void get_FramesPerSecond();&lt;br /&gt;
&lt;br /&gt;
    private:&lt;br /&gt;
        ResHandle		_pipeRes, _fontMatRes, _logoMatRes, _hdrPipeRes, _forwardPipeRes;&lt;br /&gt;
        NodeHandle		_cam, _knight, _particleSys;&lt;br /&gt;
        float			_x, _y, _z, _rx, _ry;	// Viewer position and orientation&lt;br /&gt;
        float			_curFPS;&lt;br /&gt;
&lt;br /&gt;
        bool			_freeze;&lt;br /&gt;
        float			_animTime, _weight;&lt;br /&gt;
&lt;br /&gt;
        double          last_time;&lt;br /&gt;
        int             frames;&lt;br /&gt;
&lt;br /&gt;
        Glib::Timer     m_animtimer; // our animation timer gets miliseconds&lt;br /&gt;
        Glib::Timer     m_fpstimer;  // our fps timer gets current fps&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif // CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now for the cHordeWidget.cpp *Read the comments*&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cHordeWidget.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;../include/cHordeWidget.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
NodeHandle model = 0, cam = 0;&lt;br /&gt;
&lt;br /&gt;
cHordeWidget::cHordeWidget(){&lt;br /&gt;
    //sets the fps we want &lt;br /&gt;
    fps = 60;&lt;br /&gt;
    _curFPS = fps;&lt;br /&gt;
&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Config&amp;gt; glconfig;&lt;br /&gt;
    //Pick our opengl options&lt;br /&gt;
    glconfig = Gdk::GL::Config::create(Gdk::GL::MODE_RGB | Gdk::GL::MODE_DEPTH | Gdk::GL::MODE_DOUBLE);&lt;br /&gt;
    //set the opengl options&lt;br /&gt;
    set_gl_capability(glconfig);&lt;br /&gt;
    //add our idle signal.&lt;br /&gt;
    Glib::signal_timeout().connect( sigc::mem_fun(*this, &amp;amp;cHordeWidget::on_timeout), 20 );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
cHordeWidget::~cHordeWidget(){&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::on_realize(){&lt;br /&gt;
    Gtk::GL::DrawingArea::on_realize();&lt;br /&gt;
&lt;br /&gt;
    //get gl::window&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
&lt;br /&gt;
    //begin gl commands&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
&lt;br /&gt;
    //init horde&lt;br /&gt;
    init_hordeScene();&lt;br /&gt;
    &lt;br /&gt;
    /end gl commands&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cHordeWidget::on_configure_event(GdkEventConfigure* event){&lt;br /&gt;
&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
&lt;br /&gt;
    //setup the viewport&lt;br /&gt;
    setup_hordeViewport();&lt;br /&gt;
&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cHordeWidget::on_expose_event(GdkEventExpose* event){&lt;br /&gt;
    &lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
&lt;br /&gt;
    //render the horde scene&lt;br /&gt;
    render_hordeScene();&lt;br /&gt;
    &lt;br /&gt;
    //swap our gl buffers use glflush if you use only one buffer&lt;br /&gt;
    glwindow-&amp;gt;swap_buffers();&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cHordeWidget::on_timeout(){&lt;br /&gt;
&lt;br /&gt;
    //update the horde scee&lt;br /&gt;
    update_hordeScene();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::init_hordeScene(){&lt;br /&gt;
&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::SceneGraph, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Geometry, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Animation, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Material, &amp;quot;materials&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Code, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Shader, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Texture2D, &amp;quot;textures&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::TextureCube, &amp;quot;textures&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Effect, &amp;quot;effects&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Pipeline, &amp;quot;pipelines&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	// Set options&lt;br /&gt;
	Horde3D::setOption( EngineOptions::LoadTextures, 1 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::TexCompression, 0 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::FastAnimation, 0 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::AnisotropyFactor, 8 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::ShadowMapSize, 2048 );&lt;br /&gt;
&lt;br /&gt;
	// Add resources&lt;br /&gt;
	// Pipelines&lt;br /&gt;
	_hdrPipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;hdr.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
	_forwardPipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;forward.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
	// Font&lt;br /&gt;
	_fontMatRes = Horde3D::addResource( ResourceTypes::Material, &amp;quot;font.material.xml&amp;quot;, 0 );&lt;br /&gt;
	// Logo&lt;br /&gt;
	_logoMatRes = Horde3D::addResource( ResourceTypes::Material, &amp;quot;logo.material.xml&amp;quot;, 0 );&lt;br /&gt;
	// Environment&lt;br /&gt;
	ResHandle envRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;sphere.scene.xml&amp;quot;, 0 );&lt;br /&gt;
	// Knight&lt;br /&gt;
	ResHandle knightRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;knight.scene.xml&amp;quot;, 0 );&lt;br /&gt;
	ResHandle knightAnim1Res = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;knight_order.anim&amp;quot;, 0 );&lt;br /&gt;
	ResHandle knightAnim2Res = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;knight_attack.anim&amp;quot;, 0 );&lt;br /&gt;
	// Particle system&lt;br /&gt;
	ResHandle particleSysRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;particleSys1.scene.xml&amp;quot;, 0 );&lt;br /&gt;
&lt;br /&gt;
	// Load resources&lt;br /&gt;
	Horde3DUtils::loadResourcesFromDisk( &amp;quot;media&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	// Add scene nodes&lt;br /&gt;
	// Add camera&lt;br /&gt;
	_cam = Horde3D::addCameraNode( RootNode, &amp;quot;Camera&amp;quot;, _hdrPipeRes );&lt;br /&gt;
	//Horde3D::setNodeParami( _cam, CameraNodeParams::OcclusionCulling, 1 );&lt;br /&gt;
	// Add environment&lt;br /&gt;
	NodeHandle env = Horde3D::addNodes( RootNode, envRes );&lt;br /&gt;
	Horde3D::setNodeTransform( env, 0, -20, 0, 0, 0, 0, 20, 20, 20 );&lt;br /&gt;
	// Add knight&lt;br /&gt;
	_knight = Horde3D::addNodes( RootNode, knightRes );&lt;br /&gt;
	Horde3D::setNodeTransform( _knight, 0, 0, 0, 0, 180, 0, 0.1f, 0.1f, 0.1f );&lt;br /&gt;
	Horde3D::setupModelAnimStage( _knight, 0, knightAnim1Res, &amp;quot;&amp;quot;, false );&lt;br /&gt;
	Horde3D::setupModelAnimStage( _knight, 1, knightAnim2Res, &amp;quot;&amp;quot;, false );&lt;br /&gt;
	// Attach particle system to hand joint&lt;br /&gt;
	Horde3D::findNodes( _knight, &amp;quot;Bip01_R_Hand&amp;quot;, SceneNodeTypes::Joint );&lt;br /&gt;
	NodeHandle hand = Horde3D::getNodeFindResult( 0 );&lt;br /&gt;
	_particleSys = Horde3D::addNodes( hand, particleSysRes );&lt;br /&gt;
	Horde3D::setNodeTransform( _particleSys, 0, 40, 0, 90, 0, 0, 1, 1, 1 );&lt;br /&gt;
&lt;br /&gt;
	// Add light source&lt;br /&gt;
	NodeHandle light = Horde3D::addLightNode( RootNode, &amp;quot;Light1&amp;quot;, 0, &amp;quot;LIGHTING&amp;quot;, &amp;quot;SHADOWMAP&amp;quot; );&lt;br /&gt;
	Horde3D::setNodeTransform( light, 0, 15, 10, -60, 0, 0, 1, 1, 1 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Radius, 30 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::FOV, 90 );&lt;br /&gt;
	Horde3D::setNodeParami( light, LightNodeParams::ShadowMapCount, 1 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::ShadowMapBias, 0.01f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_R, 1.0f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_G, 0.8f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_B, 0.7f );&lt;br /&gt;
&lt;br /&gt;
	// Customize post processing effects&lt;br /&gt;
	NodeHandle matRes = Horde3D::findResource( ResourceTypes::Material, &amp;quot;postHDR.material.xml&amp;quot; );&lt;br /&gt;
	// hdrParams: exposure, brightpass threshold, brightpass offset (see shader for description)&lt;br /&gt;
	Horde3D::setMaterialUniform( matRes, &amp;quot;hdrParams&amp;quot;, 2.5f, 0.5f, 0.08f, 0 );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::setup_hordeViewport(){&lt;br /&gt;
    //We have to init horde here becuase this is the first thing gtkmm calls when the widget is created. &lt;br /&gt;
    //This is also called everytime the window is expanded the boolean is there just so nothing bad happens when initing horde over and over.&lt;br /&gt;
    bool hinit = false;&lt;br /&gt;
    if(hinit == false){ Horde3D::init(); hinit = true;}&lt;br /&gt;
    Horde3D::resize(0,0,get_width(),get_height());&lt;br /&gt;
    Horde3D::setupCameraView(cam,45.0f,(float)get_width()/get_height(),0.1f,1000.0f);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::render_hordeScene(){&lt;br /&gt;
    m_fpstimer.start();//start fps timer&lt;br /&gt;
&lt;br /&gt;
    //Horde3D::setOption( EngineOptions::DebugViewMode, 1.0f );&lt;br /&gt;
    //Horde3D::setOption( EngineOptions::WireframeMode, 1.0f );&lt;br /&gt;
&lt;br /&gt;
    // Do animation blending&lt;br /&gt;
    Horde3D::setModelAnimParams( _knight, 0, _animTime  , _weight );&lt;br /&gt;
    Horde3D::setModelAnimParams( _knight, 1, _animTime , 1.0f - _weight );&lt;br /&gt;
&lt;br /&gt;
    // Animate particle systems (several emitters in a group node)&lt;br /&gt;
    unsigned int cnt = cnt = Horde3D::findNodes( _particleSys, &amp;quot;&amp;quot;, SceneNodeTypes::Emitter );&lt;br /&gt;
&lt;br /&gt;
    for( unsigned int i = 0; i &amp;lt; cnt; ++i )&lt;br /&gt;
        Horde3D::advanceEmitterTime( Horde3D::getNodeFindResult( i ), 1.0f / _curFPS );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    // Set camera parameters&lt;br /&gt;
    Horde3D::setNodeTransform( _cam, _x, 4, 25, _rx ,_ry, 0, 1, 1, 1 );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    // Show logo&lt;br /&gt;
    Horde3D::showOverlay( 0.75f, 0, 0, 0, 1, 0, 1, 0,&lt;br /&gt;
					  1, 0.2f, 1, 1, 0.75f, 0.2f, 0, 1,&lt;br /&gt;
				          7, _logoMatRes );&lt;br /&gt;
&lt;br /&gt;
    // Render scene&lt;br /&gt;
    Horde3D::render( _cam );&lt;br /&gt;
&lt;br /&gt;
    // Remove all overlays&lt;br /&gt;
    Horde3D::clearOverlays();&lt;br /&gt;
&lt;br /&gt;
    get_FramesPerSecond();//get are frame rate *only call once per a frame&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::update_hordeScene(){&lt;br /&gt;
&lt;br /&gt;
    double seconds = m_animtimer.elapsed(); //sets the elapsed time in a double&lt;br /&gt;
&lt;br /&gt;
    _animTime +=  seconds * 30; // gets the elapsed time and multiplys it by 30 for some smooth animation&lt;br /&gt;
&lt;br /&gt;
    m_animtimer.reset(); //reset animiation timer.&lt;br /&gt;
&lt;br /&gt;
    Gtk::Widget::queue_draw();//redraw the screen&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::get_FramesPerSecond(){&lt;br /&gt;
    ++frames;&lt;br /&gt;
&lt;br /&gt;
    last_time = last_time + m_fpstimer.elapsed();&lt;br /&gt;
&lt;br /&gt;
    if(last_time &amp;gt;= 0){&lt;br /&gt;
        _curFPS = (float)(frames / last_time);&lt;br /&gt;
        frames = 0;&lt;br /&gt;
        last_time = 0;&lt;br /&gt;
        m_fpstimer.reset();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    std::cout&amp;lt;&amp;lt;_curFPS&amp;lt;&amp;lt;endl;//prints the current fps to console.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now for the window widget.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cWindow.hpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef CWINDOW_HPP_INCLUDED&lt;br /&gt;
#define CWINDOW_HPP_INCLUDED&lt;br /&gt;
#include &amp;lt;gtkmm.h&amp;gt;&lt;br /&gt;
#include &amp;quot;cHordeWidget.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class cWindow : public Gtk::Window{&lt;br /&gt;
    public:&lt;br /&gt;
        cWindow();&lt;br /&gt;
        virtual ~cWindow();&lt;br /&gt;
&lt;br /&gt;
    protected:&lt;br /&gt;
&lt;br /&gt;
        virtual bool on_key_press_event(GdkEventKey* event);&lt;br /&gt;
&lt;br /&gt;
    private:&lt;br /&gt;
        Gtk::VBox m_vBox;&lt;br /&gt;
&lt;br /&gt;
        cHordeWidget m_hordeWidget;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif // CWINDOW_HPP_INCLUDED&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now the window widgets cpp&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cWindow.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;../include/cWindow.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cWindow::cWindow(){&lt;br /&gt;
    //set the windows title&lt;br /&gt;
    set_title(&amp;quot;Horde with gtkmm&amp;quot;);&lt;br /&gt;
    //makes the window update if it is expanded etc.&lt;br /&gt;
    set_reallocate_redraws(true);&lt;br /&gt;
    //adds a box to place the hordewidget and other widgets into&lt;br /&gt;
    add(m_vBox);&lt;br /&gt;
    //sets the minimum and default size for our window&lt;br /&gt;
    m_hordeWidget.set_size_request(800,600);&lt;br /&gt;
    //makes the widget expand when the window is expanded&lt;br /&gt;
    m_vBox.pack_start(m_hordeWidget);&lt;br /&gt;
    //shows all widgets. by default all widgets are invisible.  &lt;br /&gt;
    show_all();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
cWindow::~cWindow(){&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cWindow::on_key_press_event(GdkEventKey* event){&lt;br /&gt;
&lt;br /&gt;
    switch (event-&amp;gt;keyval)&lt;br /&gt;
    {&lt;br /&gt;
    case GDK_a:&lt;br /&gt;
      std::cout&amp;lt;&amp;lt;&amp;quot;test&amp;quot;;&lt;br /&gt;
      break;&lt;br /&gt;
&lt;br /&gt;
    case GDK_Escape:&lt;br /&gt;
      //ends our app&lt;br /&gt;
      Gtk::Main::quit();&lt;br /&gt;
&lt;br /&gt;
      break;&lt;br /&gt;
      default:&lt;br /&gt;
      return true;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Finnaly the main.cpp *Read the Comments*&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= main.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;gtkmm.h&amp;gt;&lt;br /&gt;
//Include our custom widget&lt;br /&gt;
#include &amp;quot;include/cHordeWidget.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]){&lt;br /&gt;
    //Init Gtk+&lt;br /&gt;
    Gtk::Main init (argc, argv);&lt;br /&gt;
    //Init Gtk+ opengl&lt;br /&gt;
    Gtk::GL::init (argc, argv);&lt;br /&gt;
    //Create our Window object&lt;br /&gt;
    Gtk::Window window;&lt;br /&gt;
    //Set our window title&lt;br /&gt;
    window.set_title (&amp;quot;Horde3D In Gtk+ Window&amp;quot;);&lt;br /&gt;
    //Create our cHordeWidget&lt;br /&gt;
    cHordeWidget drawing;&lt;br /&gt;
    //Set the cHordeWidgets size&lt;br /&gt;
    drawing.set_size_request(800, 600);&lt;br /&gt;
    //Add the cHordeWidget to our window&lt;br /&gt;
    window.add (drawing);&lt;br /&gt;
    //Show our cHordeWidget. All widgets are invisible by default.&lt;br /&gt;
    window.show_all ();&lt;br /&gt;
    //Run our window&lt;br /&gt;
    Gtk::Main::run (window);&lt;br /&gt;
    //Just a return statement&lt;br /&gt;
    return EXIT_SUCCESS;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 23:21, 8 August 2008 (CEST)&lt;br /&gt;
}}&lt;br /&gt;
|  valign=&amp;quot;top&amp;quot; | {{Extension_Summary|&lt;br /&gt;
name = Horde With Gtkmm|&lt;br /&gt;
screenshot = H3DPlaceHolder.png|&lt;br /&gt;
description = This tutorial introduces the use of Horde3D with Gtkmm|&lt;br /&gt;
version = 1.0|&lt;br /&gt;
horde3dversion = 1.0 beta|&lt;br /&gt;
released = 2008-07-8|&lt;br /&gt;
author = Raynaldo Rivera|&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
[[category: Tutorials]]&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Gtkmm&amp;diff=310</id>
		<title>Tutorial - Setup Horde with Gtkmm</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Gtkmm&amp;diff=310"/>
				<updated>2008-08-08T19:17:59Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|  border=&amp;quot;0&amp;quot; &lt;br /&gt;
| {{ContentBlock|width=800|color=white&lt;br /&gt;
|content='''Here is a small example on how to use Horde with Gtkmm.''' &lt;br /&gt;
This is a small tutorial on how to setup Horde with Gtk+ using Gtkmm and Gtkglextmm.&lt;br /&gt;
This one is setup with the knight example. I leave the adjusting of the camera to you :)&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cHordeWidget.hpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
#define CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3DUtils.h&amp;gt;&lt;br /&gt;
#include &amp;lt;cstdlib&amp;gt;&lt;br /&gt;
#include &amp;lt;gtkmm.h&amp;gt;&lt;br /&gt;
#include &amp;lt;gtkglmm.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sstream&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
#include &amp;lt;iomanip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class cHordeWidget : public Gtk::GL::DrawingArea{&lt;br /&gt;
    public:&lt;br /&gt;
        cHordeWidget();&lt;br /&gt;
        virtual ~cHordeWidget();&lt;br /&gt;
        bool on_timeout();&lt;br /&gt;
&lt;br /&gt;
    protected:&lt;br /&gt;
        virtual void on_realize();&lt;br /&gt;
        virtual bool on_configure_event(GdkEventConfigure* event);&lt;br /&gt;
        virtual bool on_expose_event(GdkEventExpose* event);&lt;br /&gt;
        //our horde init function&lt;br /&gt;
        void init_hordeScene();&lt;br /&gt;
        //our horde viewport functon&lt;br /&gt;
        void setup_hordeViewport();&lt;br /&gt;
        //our horde render function&lt;br /&gt;
        void render_hordeScene();&lt;br /&gt;
        //finnaly our horde update function&lt;br /&gt;
        void update_hordeScene();&lt;br /&gt;
&lt;br /&gt;
    private:&lt;br /&gt;
        ResHandle		_pipeRes, _fontMatRes, _logoMatRes, _hdrPipeRes, _forwardPipeRes;&lt;br /&gt;
        NodeHandle		_cam, _knight, _particleSys;&lt;br /&gt;
        float			_x, _y, _z, _rx, _ry;	// Viewer position and orientation&lt;br /&gt;
        float			_velocity;				// Velocity for movement&lt;br /&gt;
        float			_curFPS, _timer;&lt;br /&gt;
&lt;br /&gt;
        stringstream	_fpsText;&lt;br /&gt;
&lt;br /&gt;
        bool			_freeze, _showFPS, _debugViewMode, _wireframeMode;&lt;br /&gt;
        float			_animTime, _weight,fps;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif // CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now for the cHordeWidget.cpp *Read the comments*&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cHordeWidget.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;../include/cHordeWidget.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
NodeHandle model = 0, cam = 0;&lt;br /&gt;
&lt;br /&gt;
cHordeWidget::cHordeWidget(){&lt;br /&gt;
    //sets the fps we want &lt;br /&gt;
    fps = 60;&lt;br /&gt;
    _curFPS = fps;&lt;br /&gt;
&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Config&amp;gt; glconfig;&lt;br /&gt;
    //Pick our opengl options&lt;br /&gt;
    glconfig = Gdk::GL::Config::create(Gdk::GL::MODE_RGB | Gdk::GL::MODE_DEPTH | Gdk::GL::MODE_DOUBLE);&lt;br /&gt;
    //set the opengl options&lt;br /&gt;
    set_gl_capability(glconfig);&lt;br /&gt;
    //add our idle signal.&lt;br /&gt;
    Glib::signal_timeout().connect( sigc::mem_fun(*this, &amp;amp;cHordeWidget::on_timeout), 20 );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
cHordeWidget::~cHordeWidget(){&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::on_realize(){&lt;br /&gt;
    Gtk::GL::DrawingArea::on_realize();&lt;br /&gt;
&lt;br /&gt;
    //get gl::window&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
&lt;br /&gt;
    //begin gl commands&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
&lt;br /&gt;
    //init horde&lt;br /&gt;
    init_hordeScene();&lt;br /&gt;
    &lt;br /&gt;
    /end gl commands&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cHordeWidget::on_configure_event(GdkEventConfigure* event){&lt;br /&gt;
&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
&lt;br /&gt;
    //setup the viewport&lt;br /&gt;
    setup_hordeViewport();&lt;br /&gt;
&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cHordeWidget::on_expose_event(GdkEventExpose* event){&lt;br /&gt;
    &lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
&lt;br /&gt;
    //render the horde scene&lt;br /&gt;
    render_hordeScene();&lt;br /&gt;
    &lt;br /&gt;
    //swap our gl buffers use glflush if you use only one buffer&lt;br /&gt;
    glwindow-&amp;gt;swap_buffers();&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cHordeWidget::on_timeout(){&lt;br /&gt;
&lt;br /&gt;
    //update the horde scee&lt;br /&gt;
    update_hordeScene();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::init_hordeScene(){&lt;br /&gt;
&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::SceneGraph, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Geometry, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Animation, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Material, &amp;quot;materials&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Code, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Shader, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Texture2D, &amp;quot;textures&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::TextureCube, &amp;quot;textures&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Effect, &amp;quot;effects&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Pipeline, &amp;quot;pipelines&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	// Set options&lt;br /&gt;
	Horde3D::setOption( EngineOptions::LoadTextures, 1 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::TexCompression, 0 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::FastAnimation, 0 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::AnisotropyFactor, 8 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::ShadowMapSize, 2048 );&lt;br /&gt;
&lt;br /&gt;
	// Add resources&lt;br /&gt;
	// Pipelines&lt;br /&gt;
	_hdrPipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;hdr.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
	_forwardPipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;forward.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
	// Font&lt;br /&gt;
	_fontMatRes = Horde3D::addResource( ResourceTypes::Material, &amp;quot;font.material.xml&amp;quot;, 0 );&lt;br /&gt;
	// Logo&lt;br /&gt;
	_logoMatRes = Horde3D::addResource( ResourceTypes::Material, &amp;quot;logo.material.xml&amp;quot;, 0 );&lt;br /&gt;
	// Environment&lt;br /&gt;
	ResHandle envRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;sphere.scene.xml&amp;quot;, 0 );&lt;br /&gt;
	// Knight&lt;br /&gt;
	ResHandle knightRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;knight.scene.xml&amp;quot;, 0 );&lt;br /&gt;
	ResHandle knightAnim1Res = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;knight_order.anim&amp;quot;, 0 );&lt;br /&gt;
	ResHandle knightAnim2Res = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;knight_attack.anim&amp;quot;, 0 );&lt;br /&gt;
	// Particle system&lt;br /&gt;
	ResHandle particleSysRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;particleSys1.scene.xml&amp;quot;, 0 );&lt;br /&gt;
&lt;br /&gt;
	// Load resources&lt;br /&gt;
	Horde3DUtils::loadResourcesFromDisk( &amp;quot;media&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	// Add scene nodes&lt;br /&gt;
	// Add camera&lt;br /&gt;
	_cam = Horde3D::addCameraNode( RootNode, &amp;quot;Camera&amp;quot;, _hdrPipeRes );&lt;br /&gt;
	//Horde3D::setNodeParami( _cam, CameraNodeParams::OcclusionCulling, 1 );&lt;br /&gt;
	// Add environment&lt;br /&gt;
	NodeHandle env = Horde3D::addNodes( RootNode, envRes );&lt;br /&gt;
	Horde3D::setNodeTransform( env, 0, -20, 0, 0, 0, 0, 20, 20, 20 );&lt;br /&gt;
	// Add knight&lt;br /&gt;
	_knight = Horde3D::addNodes( RootNode, knightRes );&lt;br /&gt;
	Horde3D::setNodeTransform( _knight, 0, 0, 0, 0, 180, 0, 0.1f, 0.1f, 0.1f );&lt;br /&gt;
	Horde3D::setupModelAnimStage( _knight, 0, knightAnim1Res, &amp;quot;&amp;quot;, false );&lt;br /&gt;
	Horde3D::setupModelAnimStage( _knight, 1, knightAnim2Res, &amp;quot;&amp;quot;, false );&lt;br /&gt;
	// Attach particle system to hand joint&lt;br /&gt;
	Horde3D::findNodes( _knight, &amp;quot;Bip01_R_Hand&amp;quot;, SceneNodeTypes::Joint );&lt;br /&gt;
	NodeHandle hand = Horde3D::getNodeFindResult( 0 );&lt;br /&gt;
	_particleSys = Horde3D::addNodes( hand, particleSysRes );&lt;br /&gt;
	Horde3D::setNodeTransform( _particleSys, 0, 40, 0, 90, 0, 0, 1, 1, 1 );&lt;br /&gt;
&lt;br /&gt;
	// Add light source&lt;br /&gt;
	NodeHandle light = Horde3D::addLightNode( RootNode, &amp;quot;Light1&amp;quot;, 0, &amp;quot;LIGHTING&amp;quot;, &amp;quot;SHADOWMAP&amp;quot; );&lt;br /&gt;
	Horde3D::setNodeTransform( light, 0, 15, 10, -60, 0, 0, 1, 1, 1 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Radius, 30 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::FOV, 90 );&lt;br /&gt;
	Horde3D::setNodeParami( light, LightNodeParams::ShadowMapCount, 1 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::ShadowMapBias, 0.01f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_R, 1.0f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_G, 0.8f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_B, 0.7f );&lt;br /&gt;
&lt;br /&gt;
	// Customize post processing effects&lt;br /&gt;
	NodeHandle matRes = Horde3D::findResource( ResourceTypes::Material, &amp;quot;postHDR.material.xml&amp;quot; );&lt;br /&gt;
	// hdrParams: exposure, brightpass threshold, brightpass offset (see shader for description)&lt;br /&gt;
	Horde3D::setMaterialUniform( matRes, &amp;quot;hdrParams&amp;quot;, 2.5f, 0.5f, 0.08f, 0 );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::setup_hordeViewport(){&lt;br /&gt;
    //We have to init horde here becuase this is the first thing gtkmm calls when the widget is created. &lt;br /&gt;
    //This is also called everytime the window is expanded the boolean is there just so nothing bad happens when initing horde over and over.&lt;br /&gt;
    bool hinit = false;&lt;br /&gt;
    if(hinit == false){ Horde3D::init(); hinit = true;}&lt;br /&gt;
    Horde3D::resize(0,0,get_width(),get_height());&lt;br /&gt;
    Horde3D::setupCameraView(cam,45.0f,(float)get_width()/get_height(),0.1f,1000.0f);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::render_hordeScene(){&lt;br /&gt;
&lt;br /&gt;
    Horde3D::setOption( EngineOptions::DebugViewMode, _debugViewMode ? 1.0f : 0.0f );&lt;br /&gt;
    Horde3D::setOption( EngineOptions::WireframeMode, _wireframeMode ? 1.0f : 0.0f );&lt;br /&gt;
&lt;br /&gt;
		// Do animation blending&lt;br /&gt;
    Horde3D::setModelAnimParams( _knight, 0, _animTime * 24.0f, _weight );&lt;br /&gt;
    Horde3D::setModelAnimParams( _knight, 1, _animTime * 24.0f, 1.0f - _weight );&lt;br /&gt;
&lt;br /&gt;
    // Animate particle systems (several emitters in a group node)&lt;br /&gt;
    unsigned int cnt = cnt = Horde3D::findNodes( _particleSys, &amp;quot;&amp;quot;, SceneNodeTypes::Emitter );&lt;br /&gt;
    for( unsigned int i = 0; i &amp;lt; cnt; ++i )&lt;br /&gt;
        Horde3D::advanceEmitterTime( Horde3D::getNodeFindResult( i ), 1.0f / _curFPS );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	// Set camera parameters&lt;br /&gt;
	Horde3D::setNodeTransform( _cam, _x, _y, _z, _rx ,_ry, 0, 1, 1, 1 );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	// Show logo&lt;br /&gt;
	Horde3D::showOverlay( 0.75f, 0, 0, 0, 1, 0, 1, 0,&lt;br /&gt;
						  1, 0.2f, 1, 1, 0.75f, 0.2f, 0, 1,&lt;br /&gt;
						  7, _logoMatRes );&lt;br /&gt;
&lt;br /&gt;
	// Render scene&lt;br /&gt;
	Horde3D::render( _cam );&lt;br /&gt;
&lt;br /&gt;
	// Remove all overlays&lt;br /&gt;
	Horde3D::clearOverlays();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::update_hordeScene(){&lt;br /&gt;
    //This is to update the screen when it goes idle you can use this has a extra update function.&lt;br /&gt;
    _timer += 1 / fps;&lt;br /&gt;
    _animTime += 1.0f / _curFPS;&lt;br /&gt;
&lt;br /&gt;
    Gtk::Widget::queue_draw();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now for the window widget.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cWindow.hpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef CWINDOW_HPP_INCLUDED&lt;br /&gt;
#define CWINDOW_HPP_INCLUDED&lt;br /&gt;
#include &amp;lt;gtkmm.h&amp;gt;&lt;br /&gt;
#include &amp;quot;cHordeWidget.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class cWindow : public Gtk::Window{&lt;br /&gt;
    public:&lt;br /&gt;
        cWindow();&lt;br /&gt;
        virtual ~cWindow();&lt;br /&gt;
&lt;br /&gt;
    protected:&lt;br /&gt;
&lt;br /&gt;
        virtual bool on_key_press_event(GdkEventKey* event);&lt;br /&gt;
&lt;br /&gt;
    private:&lt;br /&gt;
        Gtk::VBox m_vBox;&lt;br /&gt;
&lt;br /&gt;
        cHordeWidget m_hordeWidget;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif // CWINDOW_HPP_INCLUDED&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now the window widgets cpp&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cWindow.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;../include/cWindow.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cWindow::cWindow(){&lt;br /&gt;
    //set the windows title&lt;br /&gt;
    set_title(&amp;quot;Horde with gtkmm&amp;quot;);&lt;br /&gt;
    //makes the window update if it is expanded etc.&lt;br /&gt;
    set_reallocate_redraws(true);&lt;br /&gt;
    //adds a box to place the hordewidget and other widgets into&lt;br /&gt;
    add(m_vBox);&lt;br /&gt;
    //sets the minimum and default size for our window&lt;br /&gt;
    m_hordeWidget.set_size_request(800,600);&lt;br /&gt;
    //makes the widget expand when the window is expanded&lt;br /&gt;
    m_vBox.pack_start(m_hordeWidget);&lt;br /&gt;
    //shows all widgets. by default all widgets are invisible.  &lt;br /&gt;
    show_all();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
cWindow::~cWindow(){&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cWindow::on_key_press_event(GdkEventKey* event){&lt;br /&gt;
&lt;br /&gt;
    switch (event-&amp;gt;keyval)&lt;br /&gt;
    {&lt;br /&gt;
    case GDK_a:&lt;br /&gt;
      std::cout&amp;lt;&amp;lt;&amp;quot;test&amp;quot;;&lt;br /&gt;
      break;&lt;br /&gt;
&lt;br /&gt;
    case GDK_Escape:&lt;br /&gt;
      //ends our app&lt;br /&gt;
      Gtk::Main::quit();&lt;br /&gt;
&lt;br /&gt;
      break;&lt;br /&gt;
      default:&lt;br /&gt;
      return true;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Finnaly the main.cpp *Read the Comments*&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= main.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;gtkmm.h&amp;gt;&lt;br /&gt;
//Include our custom widget&lt;br /&gt;
#include &amp;quot;include/cHordeWidget.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]){&lt;br /&gt;
    //Init Gtk+&lt;br /&gt;
    Gtk::Main init (argc, argv);&lt;br /&gt;
    //Init Gtk+ opengl&lt;br /&gt;
    Gtk::GL::init (argc, argv);&lt;br /&gt;
    //Create our Window object&lt;br /&gt;
    Gtk::Window window;&lt;br /&gt;
    //Set our window title&lt;br /&gt;
    window.set_title (&amp;quot;Horde3D In Gtk+ Window&amp;quot;);&lt;br /&gt;
    //Create our cHordeWidget&lt;br /&gt;
    cHordeWidget drawing;&lt;br /&gt;
    //Set the cHordeWidgets size&lt;br /&gt;
    drawing.set_size_request(800, 600);&lt;br /&gt;
    //Add the cHordeWidget to our window&lt;br /&gt;
    window.add (drawing);&lt;br /&gt;
    //Show our cHordeWidget. All widgets are invisible by default.&lt;br /&gt;
    window.show_all ();&lt;br /&gt;
    //Run our window&lt;br /&gt;
    Gtk::Main::run (window);&lt;br /&gt;
    //Just a return statement&lt;br /&gt;
    return EXIT_SUCCESS;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 23:21, 8 August 2008 (CEST)&lt;br /&gt;
}}&lt;br /&gt;
|  valign=&amp;quot;top&amp;quot; | {{Extension_Summary|&lt;br /&gt;
name = Horde With Gtkmm|&lt;br /&gt;
screenshot = H3DPlaceHolder.png|&lt;br /&gt;
description = This tutorial introduces the use of Horde3D with Gtkmm|&lt;br /&gt;
version = 1.0|&lt;br /&gt;
horde3dversion = 1.0 beta|&lt;br /&gt;
released = 2008-07-8|&lt;br /&gt;
author = Raynaldo Rivera|&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
[[category: Tutorials]]&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Qt4&amp;diff=309</id>
		<title>Tutorial - Setup Horde with Qt4</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Qt4&amp;diff=309"/>
				<updated>2008-08-08T19:13:47Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|  border=&amp;quot;0&amp;quot; &lt;br /&gt;
| {{ContentBlock|width=800|color=white&lt;br /&gt;
|content='''Here is a small example on how to use Horde with Qt4.''' &lt;br /&gt;
Keep in mind that the qt license is gpl and horde is lgpl and in order to use your app commercially you need to purchase a Qt license.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= glwidget.h|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef GLWIDGET_H_INCLUDED&lt;br /&gt;
&lt;br /&gt;
#define GLWIDGET_H_INCLUDED&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;QtOpenGL/qgl.h&amp;gt;&lt;br /&gt;
#include &amp;lt;QKeyEvent&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3DUtils.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class GLWidget : public QGLWidget{&lt;br /&gt;
    Q_OBJECT&lt;br /&gt;
&lt;br /&gt;
    public:&lt;br /&gt;
        GLWidget(QWidget *parent = 0);&lt;br /&gt;
        ~GLWidget();&lt;br /&gt;
        QSize minimumSizeHint() const;&lt;br /&gt;
        QSize sizeHint() const;&lt;br /&gt;
&lt;br /&gt;
    protected:&lt;br /&gt;
        void initializeGL();&lt;br /&gt;
        void paintGL();&lt;br /&gt;
        void resizeGL(int width,int height);&lt;br /&gt;
        void mousePressEvent(QMouseEvent *event);&lt;br /&gt;
        void mouseMoveEvent(QMouseEvent *event);&lt;br /&gt;
        void keyPressEvent(QKeyEvent *event);&lt;br /&gt;
&lt;br /&gt;
    private:&lt;br /&gt;
        ResHandle logoRes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#endif // GLWIDGET_H_INCLUDED&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now the cpp file. the paintGL() function is the game loop.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= glwidget.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;../include/glwidget.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
NodeHandle model = 0, cam = 0;&lt;br /&gt;
&lt;br /&gt;
GLWidget::GLWidget(QWidget *parent) : QGLWidget(parent){&lt;br /&gt;
    resize(sizeHint());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
GLWidget::~GLWidget(){&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
QSize GLWidget::minimumSizeHint() const{&lt;br /&gt;
    return QSize(50,50);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
QSize GLWidget::sizeHint() const{&lt;br /&gt;
    return QSize(800,600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::initializeGL(){&lt;br /&gt;
    if(!Horde3D::init()){&lt;br /&gt;
        Horde3DUtils::dumpMessages();&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::SceneGraph, &amp;quot;models&amp;quot; );&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::Geometry, &amp;quot;models&amp;quot; );&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::Animation, &amp;quot;models&amp;quot; );&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::Material, &amp;quot;materials&amp;quot; );&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::Code, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::Shader, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::Texture2D, &amp;quot;textures&amp;quot; );&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::TextureCube, &amp;quot;textures&amp;quot; );&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::Effect, &amp;quot;effects&amp;quot; );&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::Pipeline, &amp;quot;pipelines&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
    ResHandle pipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;deferred.pipeline.xml&amp;quot;,0);&lt;br /&gt;
    ResHandle modelRes = Horde3D::addResource(ResourceTypes::SceneGraph,&amp;quot;charecter.scene.xml&amp;quot;,0);&lt;br /&gt;
    ResHandle animRes = Horde3D::addResource(ResourceTypes::Animation,&amp;quot;walk.anim.xml&amp;quot;,0);&lt;br /&gt;
    ResHandle fontRes = Horde3D::addResource(ResourceTypes::Material,&amp;quot;font.material.xml&amp;quot;,0);&lt;br /&gt;
&lt;br /&gt;
    logoRes = Horde3D::addResource(ResourceTypes::Material,&amp;quot;logo.material.xml&amp;quot;,0);&lt;br /&gt;
&lt;br /&gt;
    Horde3DUtils::loadResourcesFromDisk(&amp;quot;media&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    Horde3D::setOption( EngineOptions::LoadTextures, 1 );&lt;br /&gt;
    Horde3D::setOption( EngineOptions::TexCompression, 0 );&lt;br /&gt;
    Horde3D::setOption( EngineOptions::FastAnimation, 0 );&lt;br /&gt;
    Horde3D::setOption( EngineOptions::AnisotropyFactor, 8 );&lt;br /&gt;
    Horde3D::setOption( EngineOptions::ShadowMapSize, 2048 );&lt;br /&gt;
    Horde3D::setOption( EngineOptions::DebugViewMode,0.0f);&lt;br /&gt;
    model = Horde3D::addNodes(RootNode,modelRes);&lt;br /&gt;
&lt;br /&gt;
    //Horde3D::setupModelAnimStage(model,0,animRes,&amp;quot;&amp;quot;,true);&lt;br /&gt;
&lt;br /&gt;
    NodeHandle light = Horde3D::addLightNode(RootNode,&amp;quot;Light1&amp;quot;, 0,&amp;quot;LIGHTING&amp;quot;,&amp;quot;SHADOWMAP&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    Horde3D::setNodeTransform(light,0,2,0,0,00,0,1,1,1);&lt;br /&gt;
&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Radius, 50 );&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::FOV, 90 );&lt;br /&gt;
    Horde3D::setNodeParami( light, LightNodeParams::ShadowMapCount, 3 );&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowSplitLambda, 0.9f );&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowMapBias, 0.001f );&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_R, 0.9f );&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_G, 0.7f );&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_B, 0.75f );&lt;br /&gt;
&lt;br /&gt;
    cam = Horde3D::addCameraNode(RootNode,&amp;quot;Camera&amp;quot;,pipeRes);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::paintGL(){&lt;br /&gt;
    float curFps = 60;&lt;br /&gt;
    curFps = curFps + 10.0f * ( 1/curFps);&lt;br /&gt;
    Horde3D::setNodeTransform(model,curFps*10,0,0,0,0,0,1,1,1);&lt;br /&gt;
    Horde3D::showOverlay(0.75f,0,0,0,1,0,1,0,1,0.2f,1,1,0.75f,0.2f,0,1,7,logoRes);&lt;br /&gt;
    Horde3D::render(cam);&lt;br /&gt;
    Horde3D::clearOverlays();&lt;br /&gt;
    Horde3DUtils::dumpMessages();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::resizeGL(int width,int height){&lt;br /&gt;
    Horde3D::resize(0,0,800,600);&lt;br /&gt;
    Horde3D::setupCameraView(cam,45.0f,(float)width /height,0.1f,1000.0f);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::mousePressEvent(QMouseEvent *event){&lt;br /&gt;
    if (event-&amp;gt;buttons() &amp;amp; Qt::LeftButton)&lt;br /&gt;
    {&lt;br /&gt;
      std::cout&amp;lt;&amp;lt;&amp;quot;left mouse button pressed&amp;quot;;&lt;br /&gt;
    } &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::mouseMoveEvent(QMouseEvent *event){&lt;br /&gt;
    QPoint pnt = event-&amp;gt;pos();&lt;br /&gt;
    &lt;br /&gt;
    if ( pnt.x() == 0 )&lt;br /&gt;
            std::cout&amp;lt;&amp;lt;&amp;quot;pointers xvalue equals zero&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    if ( pnt.y() == 0 )&lt;br /&gt;
            std::cout&amp;lt;&amp;lt;&amp;quot;pointers yvalue equals zero&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::keyPressEvent(QKeyEvent *event){&lt;br /&gt;
&lt;br /&gt;
    switch( event-&amp;gt;key() )&lt;br /&gt;
    {&lt;br /&gt;
      case Qt::Key_Up:&lt;br /&gt;
         std::cout&amp;lt;&amp;lt;&amp;quot;up pressed&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	 break;&lt;br /&gt;
      case Qt::Key_Down:&lt;br /&gt;
         std::cout&amp;lt;&amp;lt;&amp;quot;down pressed&amp;quot;;&lt;br /&gt;
                 &lt;br /&gt;
         break;&lt;br /&gt;
      default:&lt;br /&gt;
         GLWidget::keyPressEvent( event );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
The very simple main.cpp&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= main.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;qapplication.h&amp;gt;&lt;br /&gt;
#include &amp;lt;include/glwidget.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[])&lt;br /&gt;
{&lt;br /&gt;
    QApplication app(argc, argv);&lt;br /&gt;
    GLWidget widget;&lt;br /&gt;
&lt;br /&gt;
    widget.show();&lt;br /&gt;
&lt;br /&gt;
    return app.exec();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Here is the custom pro file customized for ubuntu and my box you will need to modify this to your paths.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= main.pro|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
######################################################################&lt;br /&gt;
# Automatically generated by qmake (2.01a) Mon Aug 4 18:39:01 2008&lt;br /&gt;
######################################################################&lt;br /&gt;
&lt;br /&gt;
TEMPLATE = app&lt;br /&gt;
TARGET = &lt;br /&gt;
DEPENDPATH += . include src&lt;br /&gt;
INCLUDEPATH += . include /usr/include/Horde3D1.0.0/Bindings/C++&lt;br /&gt;
LIBS += -L/usr/include/Horde3D1.0.0/Binaries/Linux_x86 -lHorde3D -lHorde3DUtils&lt;br /&gt;
&lt;br /&gt;
QT += opengl&lt;br /&gt;
&lt;br /&gt;
# Input&lt;br /&gt;
HEADERS += include/glwidget.h&lt;br /&gt;
SOURCES += main.cpp src/glwidget.cpp&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 05:28, 5 August 2008 (CEST)&lt;br /&gt;
}}&lt;br /&gt;
|  valign=&amp;quot;top&amp;quot; | {{Extension_Summary|&lt;br /&gt;
name = Horde With Qt4|&lt;br /&gt;
screenshot = H3DPlaceHolder.png|&lt;br /&gt;
description = This tutorial introduces the use of Horde3D with Qt4|&lt;br /&gt;
version = 1.0|&lt;br /&gt;
horde3dversion = 1.0 beta|&lt;br /&gt;
released = 2008-08-5|&lt;br /&gt;
author = Raynaldo Rivera|&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
[[category: Tutorials]]&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Qt4&amp;diff=308</id>
		<title>Tutorial - Setup Horde with Qt4</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Qt4&amp;diff=308"/>
				<updated>2008-08-08T19:12:28Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|  border=&amp;quot;0&amp;quot; &lt;br /&gt;
| {{ContentBlock|width=800|color=white&lt;br /&gt;
|content='''Here is a small example on how to use Horde with Qt4.''' &lt;br /&gt;
Keep in mind that the qt license is gpl and horde is lgpl and in order to use your app commercially you need to purchase a Qt license.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= glwidget.h|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef GLWIDGET_H_INCLUDED&lt;br /&gt;
&lt;br /&gt;
#define GLWIDGET_H_INCLUDED&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;QtOpenGL/qgl.h&amp;gt;&lt;br /&gt;
#include &amp;lt;QKeyEvent&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3DUtils.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class GLWidget : public QGLWidget{&lt;br /&gt;
    Q_OBJECT&lt;br /&gt;
&lt;br /&gt;
    public:&lt;br /&gt;
        GLWidget(QWidget *parent = 0);&lt;br /&gt;
        ~GLWidget();&lt;br /&gt;
        QSize minimumSizeHint() const;&lt;br /&gt;
        QSize sizeHint() const;&lt;br /&gt;
&lt;br /&gt;
    protected:&lt;br /&gt;
        void initializeGL();&lt;br /&gt;
        void paintGL();&lt;br /&gt;
        void resizeGL(int width,int height);&lt;br /&gt;
        void mousePressEvent(QMouseEvent *event);&lt;br /&gt;
        void mouseMoveEvent(QMouseEvent *event);&lt;br /&gt;
        void keyPressEvent(QKeyEvent *event);&lt;br /&gt;
&lt;br /&gt;
    private:&lt;br /&gt;
        ResHandle logoRes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#endif // GLWIDGET_H_INCLUDED&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now the cpp file. the paintGL() function is the game loop.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= glwidget.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;../include/glwidget.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
NodeHandle model = 0, cam = 0;&lt;br /&gt;
&lt;br /&gt;
GLWidget::GLWidget(QWidget *parent) : QGLWidget(parent){&lt;br /&gt;
    resize(sizeHint());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
GLWidget::~GLWidget(){&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
QSize GLWidget::minimumSizeHint() const{&lt;br /&gt;
    return QSize(50,50);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
QSize GLWidget::sizeHint() const{&lt;br /&gt;
    return QSize(800,600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::initializeGL(){&lt;br /&gt;
    if(!Horde3D::init()){&lt;br /&gt;
        Horde3DUtils::dumpMessages();&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::SceneGraph, &amp;quot;models&amp;quot; );&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::Geometry, &amp;quot;models&amp;quot; );&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::Animation, &amp;quot;models&amp;quot; );&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::Material, &amp;quot;materials&amp;quot; );&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::Code, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::Shader, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::Texture2D, &amp;quot;textures&amp;quot; );&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::TextureCube, &amp;quot;textures&amp;quot; );&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::Effect, &amp;quot;effects&amp;quot; );&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::Pipeline, &amp;quot;pipelines&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
    ResHandle pipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;deferred.pipeline.xml&amp;quot;,0);&lt;br /&gt;
    ResHandle modelRes = Horde3D::addResource(ResourceTypes::SceneGraph,&amp;quot;charecter.scene.xml&amp;quot;,0);&lt;br /&gt;
    ResHandle animRes = Horde3D::addResource(ResourceTypes::Animation,&amp;quot;walk.anim.xml&amp;quot;,0);&lt;br /&gt;
    ResHandle fontRes = Horde3D::addResource(ResourceTypes::Material,&amp;quot;font.material.xml&amp;quot;,0);&lt;br /&gt;
&lt;br /&gt;
    logoRes = Horde3D::addResource(ResourceTypes::Material,&amp;quot;logo.material.xml&amp;quot;,0);&lt;br /&gt;
&lt;br /&gt;
    Horde3DUtils::loadResourcesFromDisk(&amp;quot;media&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    Horde3D::setOption( EngineOptions::LoadTextures, 1 );&lt;br /&gt;
    Horde3D::setOption( EngineOptions::TexCompression, 0 );&lt;br /&gt;
    Horde3D::setOption( EngineOptions::FastAnimation, 0 );&lt;br /&gt;
    Horde3D::setOption( EngineOptions::AnisotropyFactor, 8 );&lt;br /&gt;
    Horde3D::setOption( EngineOptions::ShadowMapSize, 2048 );&lt;br /&gt;
    Horde3D::setOption( EngineOptions::DebugViewMode,0.0f);&lt;br /&gt;
    model = Horde3D::addNodes(RootNode,modelRes);&lt;br /&gt;
&lt;br /&gt;
    //Horde3D::setupModelAnimStage(model,0,animRes,&amp;quot;&amp;quot;,true);&lt;br /&gt;
&lt;br /&gt;
    NodeHandle light = Horde3D::addLightNode(RootNode,&amp;quot;Light1&amp;quot;, 0,&amp;quot;LIGHTING&amp;quot;,&amp;quot;SHADOWMAP&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    Horde3D::setNodeTransform(light,0,2,0,0,00,0,1,1,1);&lt;br /&gt;
&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Radius, 50 );&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::FOV, 90 );&lt;br /&gt;
    Horde3D::setNodeParami( light, LightNodeParams::ShadowMapCount, 3 );&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowSplitLambda, 0.9f );&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowMapBias, 0.001f );&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_R, 0.9f );&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_G, 0.7f );&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_B, 0.75f );&lt;br /&gt;
&lt;br /&gt;
    cam = Horde3D::addCameraNode(RootNode,&amp;quot;Camera&amp;quot;,pipeRes);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::paintGL(){&lt;br /&gt;
    float curFps = 60;&lt;br /&gt;
    curFps = curFps + 10.0f * ( 1/curFps);&lt;br /&gt;
    Horde3D::setNodeTransform(model,curFps*10,0,0,0,0,0,1,1,1);&lt;br /&gt;
    Horde3D::showOverlay(0.75f,0,0,0,1,0,1,0,1,0.2f,1,1,0.75f,0.2f,0,1,7,logoRes);&lt;br /&gt;
    Horde3D::render(cam);&lt;br /&gt;
    Horde3D::clearOverlays();&lt;br /&gt;
    Horde3DUtils::dumpMessages();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::resizeGL(int width,int height){&lt;br /&gt;
    Horde3D::resize(0,0,800,600);&lt;br /&gt;
    Horde3D::setupCameraView(cam,45.0f,(float)width /height,0.1f,1000.0f);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::mousePressEvent(QMouseEvent *event){&lt;br /&gt;
    if (event-&amp;gt;buttons() &amp;amp; Qt::LeftButton)&lt;br /&gt;
    {&lt;br /&gt;
      std::cout&amp;lt;&amp;lt;&amp;quot;left mouse button pressed&amp;quot;;&lt;br /&gt;
    } &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::mouseMoveEvent(QMouseEvent *event){&lt;br /&gt;
    QPoint pnt = event-&amp;gt;pos();&lt;br /&gt;
    &lt;br /&gt;
    if ( pnt.x() == 0 )&lt;br /&gt;
            std::cout&amp;lt;&amp;lt;&amp;quot;pointers xvalue equals zero&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    if ( pnt.y() == 0 )&lt;br /&gt;
            std::cout&amp;lt;&amp;lt;&amp;quot;pointers yvalue equals zero&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::keyPressEvent(QKeyEvent *event){&lt;br /&gt;
&lt;br /&gt;
	switch( event-&amp;gt;key() )&lt;br /&gt;
	{&lt;br /&gt;
	case Qt::Key_Up:&lt;br /&gt;
                std::cout&amp;lt;&amp;lt;&amp;quot;up pressed&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
		break;&lt;br /&gt;
	case Qt::Key_Down:&lt;br /&gt;
                std::cout&amp;lt;&amp;lt;&amp;quot;down pressed&amp;quot;;&lt;br /&gt;
                 &lt;br /&gt;
                break;&lt;br /&gt;
&lt;br /&gt;
	default:&lt;br /&gt;
		GLWidget::keyPressEvent( event );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
The very simple main.cpp&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= main.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;qapplication.h&amp;gt;&lt;br /&gt;
#include &amp;lt;include/glwidget.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[])&lt;br /&gt;
{&lt;br /&gt;
    QApplication app(argc, argv);&lt;br /&gt;
    GLWidget widget;&lt;br /&gt;
&lt;br /&gt;
    widget.show();&lt;br /&gt;
&lt;br /&gt;
    return app.exec();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Here is the custom pro file customized for ubuntu and my box you will need to modify this to your paths.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= main.pro|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
######################################################################&lt;br /&gt;
# Automatically generated by qmake (2.01a) Mon Aug 4 18:39:01 2008&lt;br /&gt;
######################################################################&lt;br /&gt;
&lt;br /&gt;
TEMPLATE = app&lt;br /&gt;
TARGET = &lt;br /&gt;
DEPENDPATH += . include src&lt;br /&gt;
INCLUDEPATH += . include /usr/include/Horde3D1.0.0/Bindings/C++&lt;br /&gt;
LIBS += -L/usr/include/Horde3D1.0.0/Binaries/Linux_x86 -lHorde3D -lHorde3DUtils&lt;br /&gt;
&lt;br /&gt;
QT += opengl&lt;br /&gt;
&lt;br /&gt;
# Input&lt;br /&gt;
HEADERS += include/glwidget.h&lt;br /&gt;
SOURCES += main.cpp src/glwidget.cpp&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 05:28, 5 August 2008 (CEST)&lt;br /&gt;
}}&lt;br /&gt;
|  valign=&amp;quot;top&amp;quot; | {{Extension_Summary|&lt;br /&gt;
name = Horde With Qt4|&lt;br /&gt;
screenshot = H3DPlaceHolder.png|&lt;br /&gt;
description = This tutorial introduces the use of Horde3D with Qt4|&lt;br /&gt;
version = 1.0|&lt;br /&gt;
horde3dversion = 1.0 beta|&lt;br /&gt;
released = 2008-08-5|&lt;br /&gt;
author = Raynaldo Rivera|&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
[[category: Tutorials]]&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Qt4&amp;diff=307</id>
		<title>Tutorial - Setup Horde with Qt4</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Qt4&amp;diff=307"/>
				<updated>2008-08-08T19:11:06Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|  border=&amp;quot;0&amp;quot; &lt;br /&gt;
| {{ContentBlock|width=800|color=white&lt;br /&gt;
|content='''Here is a small example on how to use Horde with Qt4.''' &lt;br /&gt;
Keep in mind that the qt license is gpl and horde is lgpl and in order to use your app commercially you need to purchase a Qt license.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= glwidget.h|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef GLWIDGET_H_INCLUDED&lt;br /&gt;
&lt;br /&gt;
#define GLWIDGET_H_INCLUDED&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;QtOpenGL/qgl.h&amp;gt;&lt;br /&gt;
#include &amp;lt;QKeyEvent&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3DUtils.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class GLWidget : public QGLWidget{&lt;br /&gt;
    Q_OBJECT&lt;br /&gt;
&lt;br /&gt;
    public:&lt;br /&gt;
        GLWidget(QWidget *parent = 0);&lt;br /&gt;
        ~GLWidget();&lt;br /&gt;
        QSize minimumSizeHint() const;&lt;br /&gt;
        QSize sizeHint() const;&lt;br /&gt;
&lt;br /&gt;
    protected:&lt;br /&gt;
        void initializeGL();&lt;br /&gt;
        void paintGL();&lt;br /&gt;
        void resizeGL(int width,int height);&lt;br /&gt;
        void mousePressEvent(QMouseEvent *event);&lt;br /&gt;
        void mouseMoveEvent(QMouseEvent *event);&lt;br /&gt;
        void keyPressEvent(QKeyEvent *event);&lt;br /&gt;
&lt;br /&gt;
    private:&lt;br /&gt;
        ResHandle logoRes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#endif // GLWIDGET_H_INCLUDED&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now the cpp file. the paintGL() function is the game loop.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= glwidget.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;../include/glwidget.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
NodeHandle model = 0, cam = 0;&lt;br /&gt;
&lt;br /&gt;
GLWidget::GLWidget(QWidget *parent) : QGLWidget(parent){&lt;br /&gt;
    resize(sizeHint());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
GLWidget::~GLWidget(){&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
QSize GLWidget::minimumSizeHint() const{&lt;br /&gt;
    return QSize(50,50);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
QSize GLWidget::sizeHint() const{&lt;br /&gt;
    return QSize(800,600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::initializeGL(){&lt;br /&gt;
    if(!Horde3D::init()){&lt;br /&gt;
        Horde3DUtils::dumpMessages();&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::SceneGraph, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Geometry, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Animation, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Material, &amp;quot;materials&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Code, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Shader, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Texture2D, &amp;quot;textures&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::TextureCube, &amp;quot;textures&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Effect, &amp;quot;effects&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Pipeline, &amp;quot;pipelines&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
    ResHandle pipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;deferred.pipeline.xml&amp;quot;,0);&lt;br /&gt;
    ResHandle modelRes = Horde3D::addResource(ResourceTypes::SceneGraph,&amp;quot;charecter.scene.xml&amp;quot;,0);&lt;br /&gt;
    ResHandle animRes = Horde3D::addResource(ResourceTypes::Animation,&amp;quot;walk.anim.xml&amp;quot;,0);&lt;br /&gt;
    ResHandle fontRes = Horde3D::addResource(ResourceTypes::Material,&amp;quot;font.material.xml&amp;quot;,0);&lt;br /&gt;
&lt;br /&gt;
    logoRes = Horde3D::addResource(ResourceTypes::Material,&amp;quot;logo.material.xml&amp;quot;,0);&lt;br /&gt;
&lt;br /&gt;
    Horde3DUtils::loadResourcesFromDisk(&amp;quot;media&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    Horde3D::setOption( EngineOptions::LoadTextures, 1 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::TexCompression, 0 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::FastAnimation, 0 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::AnisotropyFactor, 8 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::ShadowMapSize, 2048 );&lt;br /&gt;
    Horde3D::setOption( EngineOptions::DebugViewMode,0.0f);&lt;br /&gt;
    model = Horde3D::addNodes(RootNode,modelRes);&lt;br /&gt;
&lt;br /&gt;
    //Horde3D::setupModelAnimStage(model,0,animRes,&amp;quot;&amp;quot;,true);&lt;br /&gt;
&lt;br /&gt;
    NodeHandle light = Horde3D::addLightNode(RootNode,&amp;quot;Light1&amp;quot;, 0,&amp;quot;LIGHTING&amp;quot;,&amp;quot;SHADOWMAP&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    Horde3D::setNodeTransform(light,0,2,0,0,00,0,1,1,1);&lt;br /&gt;
&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Radius, 50 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::FOV, 90 );&lt;br /&gt;
	Horde3D::setNodeParami( light, LightNodeParams::ShadowMapCount, 3 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::ShadowSplitLambda, 0.9f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::ShadowMapBias, 0.001f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_R, 0.9f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_G, 0.7f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_B, 0.75f );&lt;br /&gt;
&lt;br /&gt;
    cam = Horde3D::addCameraNode(RootNode,&amp;quot;Camera&amp;quot;,pipeRes);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::paintGL(){&lt;br /&gt;
    float curFps = 60;&lt;br /&gt;
    curFps = curFps + 10.0f * ( 1/curFps);&lt;br /&gt;
    Horde3D::setNodeTransform(model,curFps*10,0,0,0,0,0,1,1,1);&lt;br /&gt;
    Horde3D::showOverlay(0.75f,0,0,0,1,0,1,0,1,0.2f,1,1,0.75f,0.2f,0,1,7,logoRes);&lt;br /&gt;
    Horde3D::render(cam);&lt;br /&gt;
    Horde3D::clearOverlays();&lt;br /&gt;
    Horde3DUtils::dumpMessages();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::resizeGL(int width,int height){&lt;br /&gt;
    Horde3D::resize(0,0,800,600);&lt;br /&gt;
    Horde3D::setupCameraView(cam,45.0f,(float)width /height,0.1f,1000.0f);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::mousePressEvent(QMouseEvent *event){&lt;br /&gt;
    if (event-&amp;gt;buttons() &amp;amp; Qt::LeftButton)&lt;br /&gt;
    {&lt;br /&gt;
      std::cout&amp;lt;&amp;lt;&amp;quot;left mouse button pressed&amp;quot;;&lt;br /&gt;
    } &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::mouseMoveEvent(QMouseEvent *event){&lt;br /&gt;
    QPoint pnt = event-&amp;gt;pos();&lt;br /&gt;
    &lt;br /&gt;
    if ( pnt.x() == 0 )&lt;br /&gt;
            std::cout&amp;lt;&amp;lt;&amp;quot;pointers xvalue equals zero&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    if ( pnt.y() == 0 )&lt;br /&gt;
            std::cout&amp;lt;&amp;lt;&amp;quot;pointers yvalue equals zero&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::keyPressEvent(QKeyEvent *event){&lt;br /&gt;
&lt;br /&gt;
	switch( event-&amp;gt;key() )&lt;br /&gt;
	{&lt;br /&gt;
	case Qt::Key_Up:&lt;br /&gt;
                std::cout&amp;lt;&amp;lt;&amp;quot;up pressed&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
		break;&lt;br /&gt;
	case Qt::Key_Down:&lt;br /&gt;
                std::cout&amp;lt;&amp;lt;&amp;quot;down pressed&amp;quot;;&lt;br /&gt;
                 &lt;br /&gt;
                break;&lt;br /&gt;
&lt;br /&gt;
	default:&lt;br /&gt;
		GLWidget::keyPressEvent( event );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
The very simple main.cpp&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= main.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;qapplication.h&amp;gt;&lt;br /&gt;
#include &amp;lt;include/glwidget.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[])&lt;br /&gt;
{&lt;br /&gt;
    QApplication app(argc, argv);&lt;br /&gt;
    GLWidget widget;&lt;br /&gt;
&lt;br /&gt;
    widget.show();&lt;br /&gt;
&lt;br /&gt;
    return app.exec();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Here is the custom pro file customized for ubuntu and my box you will need to modify this to your paths.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= main.pro|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
######################################################################&lt;br /&gt;
# Automatically generated by qmake (2.01a) Mon Aug 4 18:39:01 2008&lt;br /&gt;
######################################################################&lt;br /&gt;
&lt;br /&gt;
TEMPLATE = app&lt;br /&gt;
TARGET = &lt;br /&gt;
DEPENDPATH += . include src&lt;br /&gt;
INCLUDEPATH += . include /usr/include/Horde3D1.0.0/Bindings/C++&lt;br /&gt;
LIBS += -L/usr/include/Horde3D1.0.0/Binaries/Linux_x86 -lHorde3D -lHorde3DUtils&lt;br /&gt;
&lt;br /&gt;
QT += opengl&lt;br /&gt;
&lt;br /&gt;
# Input&lt;br /&gt;
HEADERS += include/glwidget.h&lt;br /&gt;
SOURCES += main.cpp src/glwidget.cpp&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 05:28, 5 August 2008 (CEST)&lt;br /&gt;
}}&lt;br /&gt;
|  valign=&amp;quot;top&amp;quot; | {{Extension_Summary|&lt;br /&gt;
name = Horde With Qt4|&lt;br /&gt;
screenshot = H3DPlaceHolder.png|&lt;br /&gt;
description = This tutorial introduces the use of Horde3D with Qt4|&lt;br /&gt;
version = 1.0|&lt;br /&gt;
horde3dversion = 1.0 beta|&lt;br /&gt;
released = 2008-08-5|&lt;br /&gt;
author = Raynaldo Rivera|&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
[[category: Tutorials]]&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Qt4&amp;diff=306</id>
		<title>Tutorial - Setup Horde with Qt4</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Qt4&amp;diff=306"/>
				<updated>2008-08-08T19:03:17Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|  border=&amp;quot;0&amp;quot; &lt;br /&gt;
| {{ContentBlock|width=800|color=white&lt;br /&gt;
|content='''Here is a small example on how to use Horde with Qt4.''' &lt;br /&gt;
Keep in mind that the qt license is gpl and horde is lgpl and in order to use your app commercially you need to purchase a Qt license.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= glwidget.h|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef GLWIDGET_H_INCLUDED&lt;br /&gt;
&lt;br /&gt;
#define GLWIDGET_H_INCLUDED&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;QtOpenGL/qgl.h&amp;gt;&lt;br /&gt;
#include &amp;lt;QKeyEvent&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3DUtils.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class GLWidget : public QGLWidget{&lt;br /&gt;
    Q_OBJECT&lt;br /&gt;
&lt;br /&gt;
    public:&lt;br /&gt;
        GLWidget(QWidget *parent = 0);&lt;br /&gt;
        ~GLWidget();&lt;br /&gt;
        QSize minimumSizeHint() const;&lt;br /&gt;
        QSize sizeHint() const;&lt;br /&gt;
&lt;br /&gt;
    protected:&lt;br /&gt;
        void initializeGL();&lt;br /&gt;
        void paintGL();&lt;br /&gt;
        void resizeGL(int width,int height);&lt;br /&gt;
        void mousePressEvent(QMouseEvent *event);&lt;br /&gt;
        void mouseMoveEvent(QMouseEvent *event);&lt;br /&gt;
        void keyPressEvent(QKeyEvent *event);&lt;br /&gt;
&lt;br /&gt;
    private:&lt;br /&gt;
        ResHandle logoRes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#endif // GLWIDGET_H_INCLUDED&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now the cpp file. the paintGL() function is the game loop.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= glwidget.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;../include/glwidget.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
NodeHandle model = 0, cam = 0;&lt;br /&gt;
&lt;br /&gt;
GLWidget::GLWidget(QWidget *parent) : QGLWidget(parent){&lt;br /&gt;
    resize(sizeHint());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
GLWidget::~GLWidget(){&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
QSize GLWidget::minimumSizeHint() const{&lt;br /&gt;
    return QSize(50,50);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
QSize GLWidget::sizeHint() const{&lt;br /&gt;
    return QSize(800,600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::initializeGL(){&lt;br /&gt;
    if(!Horde3D::init()){&lt;br /&gt;
        Horde3DUtils::dumpMessages();&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::SceneGraph, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Geometry, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Animation, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Material, &amp;quot;materials&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Code, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Shader, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Texture2D, &amp;quot;textures&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::TextureCube, &amp;quot;textures&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Effect, &amp;quot;effects&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Pipeline, &amp;quot;pipelines&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
    ResHandle pipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;deferred.pipeline.xml&amp;quot;,0);&lt;br /&gt;
    ResHandle modelRes = Horde3D::addResource(ResourceTypes::SceneGraph,&amp;quot;charecter.scene.xml&amp;quot;,0);&lt;br /&gt;
    ResHandle animRes = Horde3D::addResource(ResourceTypes::Animation,&amp;quot;walk.anim.xml&amp;quot;,0);&lt;br /&gt;
    ResHandle fontRes = Horde3D::addResource(ResourceTypes::Material,&amp;quot;font.material.xml&amp;quot;,0);&lt;br /&gt;
&lt;br /&gt;
    logoRes = Horde3D::addResource(ResourceTypes::Material,&amp;quot;logo.material.xml&amp;quot;,0);&lt;br /&gt;
&lt;br /&gt;
    Horde3DUtils::loadResourcesFromDisk(&amp;quot;media&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    Horde3D::setOption( EngineOptions::LoadTextures, 1 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::TexCompression, 0 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::FastAnimation, 0 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::AnisotropyFactor, 8 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::ShadowMapSize, 2048 );&lt;br /&gt;
    Horde3D::setOption( EngineOptions::DebugViewMode,0.0f);&lt;br /&gt;
    model = Horde3D::addNodes(RootNode,modelRes);&lt;br /&gt;
&lt;br /&gt;
    //Horde3D::setupModelAnimStage(model,0,animRes,&amp;quot;&amp;quot;,true);&lt;br /&gt;
&lt;br /&gt;
    NodeHandle light = Horde3D::addLightNode(RootNode,&amp;quot;Light1&amp;quot;, 0,&amp;quot;LIGHTING&amp;quot;,&amp;quot;SHADOWMAP&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    Horde3D::setNodeTransform(light,0,2,0,0,00,0,1,1,1);&lt;br /&gt;
&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Radius, 50 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::FOV, 90 );&lt;br /&gt;
	Horde3D::setNodeParami( light, LightNodeParams::ShadowMapCount, 3 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::ShadowSplitLambda, 0.9f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::ShadowMapBias, 0.001f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_R, 0.9f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_G, 0.7f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_B, 0.75f );&lt;br /&gt;
&lt;br /&gt;
    cam = Horde3D::addCameraNode(RootNode,&amp;quot;Camera&amp;quot;,pipeRes);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::paintGL(){&lt;br /&gt;
    float curFps = 60;&lt;br /&gt;
    curFps = curFps + 10.0f * ( 1/curFps);&lt;br /&gt;
    Horde3D::setNodeTransform(model,curFps*10,0,0,0,0,0,1,1,1);&lt;br /&gt;
    Horde3D::showOverlay(0.75f,0,0,0,1,0,1,0,1,0.2f,1,1,0.75f,0.2f,0,1,7,logoRes);&lt;br /&gt;
    Horde3D::render(cam);&lt;br /&gt;
    Horde3D::clearOverlays();&lt;br /&gt;
    Horde3DUtils::dumpMessages();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::resizeGL(int width,int height){&lt;br /&gt;
    Horde3D::resize(0,0,800,600);&lt;br /&gt;
    Horde3D::setupCameraView(cam,45.0f,(float)width /height,0.1f,1000.0f);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::mousePressEvent(QMouseEvent *event){&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::mouseMoveEvent(QMouseEvent *event){&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::keyPressEvent(QKeyEvent *event){&lt;br /&gt;
&lt;br /&gt;
	switch( event-&amp;gt;key() )&lt;br /&gt;
	{&lt;br /&gt;
	case Qt::Key_Up:&lt;br /&gt;
                std::cout&amp;lt;&amp;lt;&amp;quot;up pressed&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
		break;&lt;br /&gt;
	case Qt::Key_Down:&lt;br /&gt;
                std::cout&amp;lt;&amp;lt;&amp;quot;down pressed&amp;quot;;&lt;br /&gt;
                 &lt;br /&gt;
                break;&lt;br /&gt;
&lt;br /&gt;
	default:&lt;br /&gt;
		GLWidget::keyPressEvent( event );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
The very simple main.cpp&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= main.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;qapplication.h&amp;gt;&lt;br /&gt;
#include &amp;lt;include/glwidget.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[])&lt;br /&gt;
{&lt;br /&gt;
    QApplication app(argc, argv);&lt;br /&gt;
    GLWidget widget;&lt;br /&gt;
&lt;br /&gt;
    widget.show();&lt;br /&gt;
&lt;br /&gt;
    return app.exec();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Here is the custom pro file customized for ubuntu and my box you will need to modify this to your paths.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= main.pro|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
######################################################################&lt;br /&gt;
# Automatically generated by qmake (2.01a) Mon Aug 4 18:39:01 2008&lt;br /&gt;
######################################################################&lt;br /&gt;
&lt;br /&gt;
TEMPLATE = app&lt;br /&gt;
TARGET = &lt;br /&gt;
DEPENDPATH += . include src&lt;br /&gt;
INCLUDEPATH += . include /usr/include/Horde3D1.0.0/Bindings/C++&lt;br /&gt;
LIBS += -L/usr/include/Horde3D1.0.0/Binaries/Linux_x86 -lHorde3D -lHorde3DUtils&lt;br /&gt;
&lt;br /&gt;
QT += opengl&lt;br /&gt;
&lt;br /&gt;
# Input&lt;br /&gt;
HEADERS += include/glwidget.h&lt;br /&gt;
SOURCES += main.cpp src/glwidget.cpp&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 05:28, 5 August 2008 (CEST)&lt;br /&gt;
}}&lt;br /&gt;
|  valign=&amp;quot;top&amp;quot; | {{Extension_Summary|&lt;br /&gt;
name = Horde With Qt4|&lt;br /&gt;
screenshot = H3DPlaceHolder.png|&lt;br /&gt;
description = This tutorial introduces the use of Horde3D with Qt4|&lt;br /&gt;
version = 1.0|&lt;br /&gt;
horde3dversion = 1.0 beta|&lt;br /&gt;
released = 2008-08-5|&lt;br /&gt;
author = Raynaldo Rivera|&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
[[category: Tutorials]]&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Gtkmm&amp;diff=305</id>
		<title>Tutorial - Setup Horde with Gtkmm</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Gtkmm&amp;diff=305"/>
				<updated>2008-08-08T18:56:23Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|  border=&amp;quot;0&amp;quot; &lt;br /&gt;
| {{ContentBlock|width=800|color=white&lt;br /&gt;
|content='''Here is a small example on how to use Horde with Gtkmm.''' &lt;br /&gt;
This is a small tutorial on how to setup Horde with Gtk+ using Gtkmm and Gtkglextmm.&lt;br /&gt;
This one is setup with the knight example. I leave the adjusting of the camera to you :)&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cHordeWidget.hpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
#define CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3DUtils.h&amp;gt;&lt;br /&gt;
#include &amp;lt;cstdlib&amp;gt;&lt;br /&gt;
#include &amp;lt;gtkmm.h&amp;gt;&lt;br /&gt;
#include &amp;lt;gtkglmm.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sstream&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
#include &amp;lt;iomanip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class cHordeWidget : public Gtk::GL::DrawingArea{&lt;br /&gt;
    public:&lt;br /&gt;
        cHordeWidget();&lt;br /&gt;
        virtual ~cHordeWidget();&lt;br /&gt;
        bool on_timeout();&lt;br /&gt;
&lt;br /&gt;
    protected:&lt;br /&gt;
        virtual void on_realize();&lt;br /&gt;
        virtual bool on_configure_event(GdkEventConfigure* event);&lt;br /&gt;
        virtual bool on_expose_event(GdkEventExpose* event);&lt;br /&gt;
        //our horde init function&lt;br /&gt;
        void init_hordeScene();&lt;br /&gt;
        //our horde viewport functon&lt;br /&gt;
        void setup_hordeViewport();&lt;br /&gt;
        //our horde render function&lt;br /&gt;
        void render_hordeScene();&lt;br /&gt;
        //finnaly our horde update function&lt;br /&gt;
        void update_hordeScene();&lt;br /&gt;
&lt;br /&gt;
    private:&lt;br /&gt;
        ResHandle		_pipeRes, _fontMatRes, _logoMatRes, _hdrPipeRes, _forwardPipeRes;&lt;br /&gt;
        NodeHandle		_cam, _knight, _particleSys;&lt;br /&gt;
        float			_x, _y, _z, _rx, _ry;	// Viewer position and orientation&lt;br /&gt;
        float			_velocity;				// Velocity for movement&lt;br /&gt;
        float			_curFPS, _timer;&lt;br /&gt;
&lt;br /&gt;
        stringstream	_fpsText;&lt;br /&gt;
&lt;br /&gt;
        bool			_freeze, _showFPS, _debugViewMode, _wireframeMode;&lt;br /&gt;
        float			_animTime, _weight;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif // CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now for the cHordeWidget.cpp *Read the comments*&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cHordeWidget.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;../include/cHordeWidget.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
NodeHandle model = 0, cam = 0;&lt;br /&gt;
&lt;br /&gt;
cHordeWidget::cHordeWidget(){&lt;br /&gt;
&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Config&amp;gt; glconfig;&lt;br /&gt;
    //Pick our opengl options&lt;br /&gt;
    glconfig = Gdk::GL::Config::create(Gdk::GL::MODE_RGB | Gdk::GL::MODE_DEPTH | Gdk::GL::MODE_DOUBLE);&lt;br /&gt;
    //set the opengl options&lt;br /&gt;
    set_gl_capability(glconfig);&lt;br /&gt;
    //add our idle signal.&lt;br /&gt;
    Glib::signal_timeout().connect( sigc::mem_fun(*this, &amp;amp;cHordeWidget::on_timeout), 20 );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
cHordeWidget::~cHordeWidget(){&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::on_realize(){&lt;br /&gt;
    Gtk::GL::DrawingArea::on_realize();&lt;br /&gt;
&lt;br /&gt;
    //get gl::window&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
&lt;br /&gt;
    //begin gl commands&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
&lt;br /&gt;
    //init horde&lt;br /&gt;
    init_hordeScene();&lt;br /&gt;
    &lt;br /&gt;
    /end gl commands&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cHordeWidget::on_configure_event(GdkEventConfigure* event){&lt;br /&gt;
&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
&lt;br /&gt;
    //setup the viewport&lt;br /&gt;
    setup_hordeViewport();&lt;br /&gt;
&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cHordeWidget::on_expose_event(GdkEventExpose* event){&lt;br /&gt;
    &lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
&lt;br /&gt;
    //render the horde scene&lt;br /&gt;
    render_hordeScene();&lt;br /&gt;
    &lt;br /&gt;
    //swap our gl buffers use glflush if you use only one buffer&lt;br /&gt;
    glwindow-&amp;gt;swap_buffers();&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cHordeWidget::on_timeout(){&lt;br /&gt;
&lt;br /&gt;
    //update the horde scee&lt;br /&gt;
    update_hordeScene();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::init_hordeScene(){&lt;br /&gt;
&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::SceneGraph, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Geometry, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Animation, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Material, &amp;quot;materials&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Code, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Shader, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Texture2D, &amp;quot;textures&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::TextureCube, &amp;quot;textures&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Effect, &amp;quot;effects&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Pipeline, &amp;quot;pipelines&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	// Set options&lt;br /&gt;
	Horde3D::setOption( EngineOptions::LoadTextures, 1 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::TexCompression, 0 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::FastAnimation, 0 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::AnisotropyFactor, 8 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::ShadowMapSize, 2048 );&lt;br /&gt;
&lt;br /&gt;
	// Add resources&lt;br /&gt;
	// Pipelines&lt;br /&gt;
	_hdrPipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;hdr.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
	_forwardPipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;forward.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
	// Font&lt;br /&gt;
	_fontMatRes = Horde3D::addResource( ResourceTypes::Material, &amp;quot;font.material.xml&amp;quot;, 0 );&lt;br /&gt;
	// Logo&lt;br /&gt;
	_logoMatRes = Horde3D::addResource( ResourceTypes::Material, &amp;quot;logo.material.xml&amp;quot;, 0 );&lt;br /&gt;
	// Environment&lt;br /&gt;
	ResHandle envRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;sphere.scene.xml&amp;quot;, 0 );&lt;br /&gt;
	// Knight&lt;br /&gt;
	ResHandle knightRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;knight.scene.xml&amp;quot;, 0 );&lt;br /&gt;
	ResHandle knightAnim1Res = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;knight_order.anim&amp;quot;, 0 );&lt;br /&gt;
	ResHandle knightAnim2Res = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;knight_attack.anim&amp;quot;, 0 );&lt;br /&gt;
	// Particle system&lt;br /&gt;
	ResHandle particleSysRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;particleSys1.scene.xml&amp;quot;, 0 );&lt;br /&gt;
&lt;br /&gt;
	// Load resources&lt;br /&gt;
	Horde3DUtils::loadResourcesFromDisk( &amp;quot;media&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	// Add scene nodes&lt;br /&gt;
	// Add camera&lt;br /&gt;
	_cam = Horde3D::addCameraNode( RootNode, &amp;quot;Camera&amp;quot;, _hdrPipeRes );&lt;br /&gt;
	//Horde3D::setNodeParami( _cam, CameraNodeParams::OcclusionCulling, 1 );&lt;br /&gt;
	// Add environment&lt;br /&gt;
	NodeHandle env = Horde3D::addNodes( RootNode, envRes );&lt;br /&gt;
	Horde3D::setNodeTransform( env, 0, -20, 0, 0, 0, 0, 20, 20, 20 );&lt;br /&gt;
	// Add knight&lt;br /&gt;
	_knight = Horde3D::addNodes( RootNode, knightRes );&lt;br /&gt;
	Horde3D::setNodeTransform( _knight, 0, 0, 0, 0, 180, 0, 0.1f, 0.1f, 0.1f );&lt;br /&gt;
	Horde3D::setupModelAnimStage( _knight, 0, knightAnim1Res, &amp;quot;&amp;quot;, false );&lt;br /&gt;
	Horde3D::setupModelAnimStage( _knight, 1, knightAnim2Res, &amp;quot;&amp;quot;, false );&lt;br /&gt;
	// Attach particle system to hand joint&lt;br /&gt;
	Horde3D::findNodes( _knight, &amp;quot;Bip01_R_Hand&amp;quot;, SceneNodeTypes::Joint );&lt;br /&gt;
	NodeHandle hand = Horde3D::getNodeFindResult( 0 );&lt;br /&gt;
	_particleSys = Horde3D::addNodes( hand, particleSysRes );&lt;br /&gt;
	Horde3D::setNodeTransform( _particleSys, 0, 40, 0, 90, 0, 0, 1, 1, 1 );&lt;br /&gt;
&lt;br /&gt;
	// Add light source&lt;br /&gt;
	NodeHandle light = Horde3D::addLightNode( RootNode, &amp;quot;Light1&amp;quot;, 0, &amp;quot;LIGHTING&amp;quot;, &amp;quot;SHADOWMAP&amp;quot; );&lt;br /&gt;
	Horde3D::setNodeTransform( light, 0, 15, 10, -60, 0, 0, 1, 1, 1 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Radius, 30 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::FOV, 90 );&lt;br /&gt;
	Horde3D::setNodeParami( light, LightNodeParams::ShadowMapCount, 1 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::ShadowMapBias, 0.01f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_R, 1.0f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_G, 0.8f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_B, 0.7f );&lt;br /&gt;
&lt;br /&gt;
	// Customize post processing effects&lt;br /&gt;
	NodeHandle matRes = Horde3D::findResource( ResourceTypes::Material, &amp;quot;postHDR.material.xml&amp;quot; );&lt;br /&gt;
	// hdrParams: exposure, brightpass threshold, brightpass offset (see shader for description)&lt;br /&gt;
	Horde3D::setMaterialUniform( matRes, &amp;quot;hdrParams&amp;quot;, 2.5f, 0.5f, 0.08f, 0 );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::setup_hordeViewport(){&lt;br /&gt;
    //We have to init horde here becuase this is the first thing gtkmm calls when the widget is created. &lt;br /&gt;
    //This is also called everytime the window is expanded the boolean is there just so nothing bad happens when initing horde over and over.&lt;br /&gt;
    bool hinit = false;&lt;br /&gt;
    if(hinit == false){ Horde3D::init(); hinit = true;}&lt;br /&gt;
    Horde3D::resize(0,0,get_width(),get_height());&lt;br /&gt;
    Horde3D::setupCameraView(cam,45.0f,(float)get_width()/get_height(),0.1f,1000.0f);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::render_hordeScene(){&lt;br /&gt;
    //sets the fps we want &lt;br /&gt;
    float fps = 60;&lt;br /&gt;
    _curFPS = fps;&lt;br /&gt;
	_timer += 1 / fps;&lt;br /&gt;
&lt;br /&gt;
	Horde3D::setOption( EngineOptions::DebugViewMode, _debugViewMode ? 1.0f : 0.0f );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::WireframeMode, _wireframeMode ? 1.0f : 0.0f );&lt;br /&gt;
&lt;br /&gt;
    _animTime += 1.0f / _curFPS;&lt;br /&gt;
&lt;br /&gt;
		// Do animation blending&lt;br /&gt;
    Horde3D::setModelAnimParams( _knight, 0, _animTime * 24.0f, _weight );&lt;br /&gt;
    Horde3D::setModelAnimParams( _knight, 1, _animTime * 24.0f, 1.0f - _weight );&lt;br /&gt;
&lt;br /&gt;
    // Animate particle systems (several emitters in a group node)&lt;br /&gt;
    unsigned int cnt = cnt = Horde3D::findNodes( _particleSys, &amp;quot;&amp;quot;, SceneNodeTypes::Emitter );&lt;br /&gt;
    for( unsigned int i = 0; i &amp;lt; cnt; ++i )&lt;br /&gt;
        Horde3D::advanceEmitterTime( Horde3D::getNodeFindResult( i ), 1.0f / _curFPS );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	// Set camera parameters&lt;br /&gt;
	Horde3D::setNodeTransform( _cam, _x, _y, _z, _rx ,_ry, 0, 1, 1, 1 );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	// Show logo&lt;br /&gt;
	Horde3D::showOverlay( 0.75f, 0, 0, 0, 1, 0, 1, 0,&lt;br /&gt;
						  1, 0.2f, 1, 1, 0.75f, 0.2f, 0, 1,&lt;br /&gt;
						  7, _logoMatRes );&lt;br /&gt;
&lt;br /&gt;
	// Render scene&lt;br /&gt;
	Horde3D::render( _cam );&lt;br /&gt;
&lt;br /&gt;
	// Remove all overlays&lt;br /&gt;
	Horde3D::clearOverlays();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::update_hordeScene(){&lt;br /&gt;
    //This is to update the screen when it goes idle you can use this has a extra update function.&lt;br /&gt;
    Gtk::Widget::queue_draw();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now for the window widget.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cWindow.hpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef CWINDOW_HPP_INCLUDED&lt;br /&gt;
#define CWINDOW_HPP_INCLUDED&lt;br /&gt;
#include &amp;lt;gtkmm.h&amp;gt;&lt;br /&gt;
#include &amp;quot;cHordeWidget.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class cWindow : public Gtk::Window{&lt;br /&gt;
    public:&lt;br /&gt;
        cWindow();&lt;br /&gt;
        virtual ~cWindow();&lt;br /&gt;
&lt;br /&gt;
    protected:&lt;br /&gt;
&lt;br /&gt;
        virtual bool on_key_press_event(GdkEventKey* event);&lt;br /&gt;
&lt;br /&gt;
    private:&lt;br /&gt;
        Gtk::VBox m_vBox;&lt;br /&gt;
&lt;br /&gt;
        cHordeWidget m_hordeWidget;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif // CWINDOW_HPP_INCLUDED&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now the window widgets cpp&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cWindow.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;../include/cWindow.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cWindow::cWindow(){&lt;br /&gt;
    //set the windows title&lt;br /&gt;
    set_title(&amp;quot;Horde with gtkmm&amp;quot;);&lt;br /&gt;
    //makes the window update if it is expanded etc.&lt;br /&gt;
    set_reallocate_redraws(true);&lt;br /&gt;
    //adds a box to place the hordewidget and other widgets into&lt;br /&gt;
    add(m_vBox);&lt;br /&gt;
    //sets the minimum and default size for our window&lt;br /&gt;
    m_hordeWidget.set_size_request(800,600);&lt;br /&gt;
    //makes the widget expand when the window is expanded&lt;br /&gt;
    m_vBox.pack_start(m_hordeWidget);&lt;br /&gt;
    //shows all widgets. by default all widgets are invisible.  &lt;br /&gt;
    show_all();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
cWindow::~cWindow(){&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cWindow::on_key_press_event(GdkEventKey* event){&lt;br /&gt;
&lt;br /&gt;
    switch (event-&amp;gt;keyval)&lt;br /&gt;
    {&lt;br /&gt;
    case GDK_a:&lt;br /&gt;
      std::cout&amp;lt;&amp;lt;&amp;quot;test&amp;quot;;&lt;br /&gt;
      break;&lt;br /&gt;
&lt;br /&gt;
    case GDK_Escape:&lt;br /&gt;
      //ends our app&lt;br /&gt;
      Gtk::Main::quit();&lt;br /&gt;
&lt;br /&gt;
      break;&lt;br /&gt;
      default:&lt;br /&gt;
      return true;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Finnaly the main.cpp *Read the Comments*&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= main.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;gtkmm.h&amp;gt;&lt;br /&gt;
//Include our custom widget&lt;br /&gt;
#include &amp;quot;include/cHordeWidget.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]){&lt;br /&gt;
    //Init Gtk+&lt;br /&gt;
    Gtk::Main init (argc, argv);&lt;br /&gt;
    //Init Gtk+ opengl&lt;br /&gt;
    Gtk::GL::init (argc, argv);&lt;br /&gt;
    //Create our Window object&lt;br /&gt;
    Gtk::Window window;&lt;br /&gt;
    //Set our window title&lt;br /&gt;
    window.set_title (&amp;quot;Horde3D In Gtk+ Window&amp;quot;);&lt;br /&gt;
    //Create our cHordeWidget&lt;br /&gt;
    cHordeWidget drawing;&lt;br /&gt;
    //Set the cHordeWidgets size&lt;br /&gt;
    drawing.set_size_request(800, 600);&lt;br /&gt;
    //Add the cHordeWidget to our window&lt;br /&gt;
    window.add (drawing);&lt;br /&gt;
    //Show our cHordeWidget. All widgets are invisible by default.&lt;br /&gt;
    window.show_all ();&lt;br /&gt;
    //Run our window&lt;br /&gt;
    Gtk::Main::run (window);&lt;br /&gt;
    //Just a return statement&lt;br /&gt;
    return EXIT_SUCCESS;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 23:21, 8 August 2008 (CEST)&lt;br /&gt;
}}&lt;br /&gt;
|  valign=&amp;quot;top&amp;quot; | {{Extension_Summary|&lt;br /&gt;
name = Horde With Gtkmm|&lt;br /&gt;
screenshot = H3DPlaceHolder.png|&lt;br /&gt;
description = This tutorial introduces the use of Horde3D with Gtkmm|&lt;br /&gt;
version = 1.0|&lt;br /&gt;
horde3dversion = 1.0 beta|&lt;br /&gt;
released = 2008-07-8|&lt;br /&gt;
author = Raynaldo Rivera|&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
[[category: Tutorials]]&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Gtkmm&amp;diff=304</id>
		<title>Tutorial - Setup Horde with Gtkmm</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Gtkmm&amp;diff=304"/>
				<updated>2008-08-08T18:50:26Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|  border=&amp;quot;0&amp;quot; &lt;br /&gt;
| {{ContentBlock|width=800|color=white&lt;br /&gt;
|content='''Here is a small example on how to use Horde with Gtkmm.''' &lt;br /&gt;
This is a small tutorial on how to setup Horde with Gtk+ using Gtkmm and Gtkglextmm.&lt;br /&gt;
This one is setup with the knight example. I leave the adjusting of the camera to you :)&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cHordeWidget.hpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
#define CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3DUtils.h&amp;gt;&lt;br /&gt;
#include &amp;lt;cstdlib&amp;gt;&lt;br /&gt;
#include &amp;lt;gtkmm.h&amp;gt;&lt;br /&gt;
#include &amp;lt;gtkglmm.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sstream&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
#include &amp;lt;iomanip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class cHordeWidget : public Gtk::GL::DrawingArea{&lt;br /&gt;
    public:&lt;br /&gt;
        cHordeWidget();&lt;br /&gt;
        virtual ~cHordeWidget();&lt;br /&gt;
        bool on_timeout();&lt;br /&gt;
&lt;br /&gt;
    protected:&lt;br /&gt;
        virtual void on_realize();&lt;br /&gt;
        virtual bool on_configure_event(GdkEventConfigure* event);&lt;br /&gt;
        virtual bool on_expose_event(GdkEventExpose* event);&lt;br /&gt;
        //our horde init function&lt;br /&gt;
        void init_hordeScene();&lt;br /&gt;
        //our horde viewport functon&lt;br /&gt;
        void setup_hordeViewport();&lt;br /&gt;
        //our horde render function&lt;br /&gt;
        void render_hordeScene();&lt;br /&gt;
        //finnaly our horde update function&lt;br /&gt;
        void update_hordeScene();&lt;br /&gt;
&lt;br /&gt;
    private:&lt;br /&gt;
        ResHandle		_pipeRes, _fontMatRes, _logoMatRes, _hdrPipeRes, _forwardPipeRes;&lt;br /&gt;
        NodeHandle		_cam, _knight, _particleSys;&lt;br /&gt;
        float			_x, _y, _z, _rx, _ry;	// Viewer position and orientation&lt;br /&gt;
        float			_velocity;				// Velocity for movement&lt;br /&gt;
        float			_curFPS, _timer;&lt;br /&gt;
&lt;br /&gt;
        stringstream	_fpsText;&lt;br /&gt;
&lt;br /&gt;
        bool			_freeze, _showFPS, _debugViewMode, _wireframeMode;&lt;br /&gt;
        float			_animTime, _weight;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif // CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now for the cHordeWidget.cpp *Read the comments*&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cHordeWidget.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;../include/cHordeWidget.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
NodeHandle model = 0, cam = 0;&lt;br /&gt;
&lt;br /&gt;
cHordeWidget::cHordeWidget(){&lt;br /&gt;
&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Config&amp;gt; glconfig;&lt;br /&gt;
    //Pick our opengl options&lt;br /&gt;
    glconfig = Gdk::GL::Config::create(Gdk::GL::MODE_RGB | Gdk::GL::MODE_DEPTH | Gdk::GL::MODE_DOUBLE);&lt;br /&gt;
    //set the opengl options&lt;br /&gt;
    set_gl_capability(glconfig);&lt;br /&gt;
    //add our idle signal.&lt;br /&gt;
    Glib::signal_timeout().connect( sigc::mem_fun(*this, &amp;amp;cHordeWidget::on_timeout), 20 );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
cHordeWidget::~cHordeWidget(){&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::on_realize(){&lt;br /&gt;
    Gtk::GL::DrawingArea::on_realize();&lt;br /&gt;
&lt;br /&gt;
    //get gl::window&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
&lt;br /&gt;
    //begin gl commands&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
&lt;br /&gt;
    //init horde&lt;br /&gt;
    init_hordeScene();&lt;br /&gt;
    &lt;br /&gt;
    /end gl commands&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cHordeWidget::on_configure_event(GdkEventConfigure* event){&lt;br /&gt;
&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
&lt;br /&gt;
    //setup the viewport&lt;br /&gt;
    setup_hordeViewport();&lt;br /&gt;
&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cHordeWidget::on_expose_event(GdkEventExpose* event){&lt;br /&gt;
    &lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
&lt;br /&gt;
    //render the horde scene&lt;br /&gt;
    render_hordeScene();&lt;br /&gt;
    &lt;br /&gt;
    //swap our gl buffers use glflush if you use only one buffer&lt;br /&gt;
    glwindow-&amp;gt;swap_buffers();&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cHordeWidget::on_timeout(){&lt;br /&gt;
&lt;br /&gt;
    //update the horde scee&lt;br /&gt;
    update_hordeScene();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::init_hordeScene(){&lt;br /&gt;
&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::SceneGraph, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Geometry, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Animation, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Material, &amp;quot;materials&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Code, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Shader, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Texture2D, &amp;quot;textures&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::TextureCube, &amp;quot;textures&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Effect, &amp;quot;effects&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Pipeline, &amp;quot;pipelines&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	// Set options&lt;br /&gt;
	Horde3D::setOption( EngineOptions::LoadTextures, 1 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::TexCompression, 0 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::FastAnimation, 0 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::AnisotropyFactor, 8 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::ShadowMapSize, 2048 );&lt;br /&gt;
&lt;br /&gt;
	// Add resources&lt;br /&gt;
	// Pipelines&lt;br /&gt;
	_hdrPipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;hdr.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
	_forwardPipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;forward.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
	// Font&lt;br /&gt;
	_fontMatRes = Horde3D::addResource( ResourceTypes::Material, &amp;quot;font.material.xml&amp;quot;, 0 );&lt;br /&gt;
	// Logo&lt;br /&gt;
	_logoMatRes = Horde3D::addResource( ResourceTypes::Material, &amp;quot;logo.material.xml&amp;quot;, 0 );&lt;br /&gt;
	// Environment&lt;br /&gt;
	ResHandle envRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;sphere.scene.xml&amp;quot;, 0 );&lt;br /&gt;
	// Knight&lt;br /&gt;
	ResHandle knightRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;knight.scene.xml&amp;quot;, 0 );&lt;br /&gt;
	ResHandle knightAnim1Res = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;knight_order.anim&amp;quot;, 0 );&lt;br /&gt;
	ResHandle knightAnim2Res = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;knight_attack.anim&amp;quot;, 0 );&lt;br /&gt;
	// Particle system&lt;br /&gt;
	ResHandle particleSysRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;particleSys1.scene.xml&amp;quot;, 0 );&lt;br /&gt;
&lt;br /&gt;
	// Load resources&lt;br /&gt;
	Horde3DUtils::loadResourcesFromDisk( &amp;quot;media&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	// Add scene nodes&lt;br /&gt;
	// Add camera&lt;br /&gt;
	_cam = Horde3D::addCameraNode( RootNode, &amp;quot;Camera&amp;quot;, _hdrPipeRes );&lt;br /&gt;
	//Horde3D::setNodeParami( _cam, CameraNodeParams::OcclusionCulling, 1 );&lt;br /&gt;
	// Add environment&lt;br /&gt;
	NodeHandle env = Horde3D::addNodes( RootNode, envRes );&lt;br /&gt;
	Horde3D::setNodeTransform( env, 0, -20, 0, 0, 0, 0, 20, 20, 20 );&lt;br /&gt;
	// Add knight&lt;br /&gt;
	_knight = Horde3D::addNodes( RootNode, knightRes );&lt;br /&gt;
	Horde3D::setNodeTransform( _knight, 0, 0, 0, 0, 180, 0, 0.1f, 0.1f, 0.1f );&lt;br /&gt;
	Horde3D::setupModelAnimStage( _knight, 0, knightAnim1Res, &amp;quot;&amp;quot;, false );&lt;br /&gt;
	Horde3D::setupModelAnimStage( _knight, 1, knightAnim2Res, &amp;quot;&amp;quot;, false );&lt;br /&gt;
	// Attach particle system to hand joint&lt;br /&gt;
	Horde3D::findNodes( _knight, &amp;quot;Bip01_R_Hand&amp;quot;, SceneNodeTypes::Joint );&lt;br /&gt;
	NodeHandle hand = Horde3D::getNodeFindResult( 0 );&lt;br /&gt;
	_particleSys = Horde3D::addNodes( hand, particleSysRes );&lt;br /&gt;
	Horde3D::setNodeTransform( _particleSys, 0, 40, 0, 90, 0, 0, 1, 1, 1 );&lt;br /&gt;
&lt;br /&gt;
	// Add light source&lt;br /&gt;
	NodeHandle light = Horde3D::addLightNode( RootNode, &amp;quot;Light1&amp;quot;, 0, &amp;quot;LIGHTING&amp;quot;, &amp;quot;SHADOWMAP&amp;quot; );&lt;br /&gt;
	Horde3D::setNodeTransform( light, 0, 15, 10, -60, 0, 0, 1, 1, 1 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Radius, 30 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::FOV, 90 );&lt;br /&gt;
	Horde3D::setNodeParami( light, LightNodeParams::ShadowMapCount, 1 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::ShadowMapBias, 0.01f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_R, 1.0f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_G, 0.8f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_B, 0.7f );&lt;br /&gt;
&lt;br /&gt;
	// Customize post processing effects&lt;br /&gt;
	NodeHandle matRes = Horde3D::findResource( ResourceTypes::Material, &amp;quot;postHDR.material.xml&amp;quot; );&lt;br /&gt;
	// hdrParams: exposure, brightpass threshold, brightpass offset (see shader for description)&lt;br /&gt;
	Horde3D::setMaterialUniform( matRes, &amp;quot;hdrParams&amp;quot;, 2.5f, 0.5f, 0.08f, 0 );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::setup_hordeViewport(){&lt;br /&gt;
    //We have to init horde here becuase this is the first thing gtkmm calls when the widget is created. &lt;br /&gt;
    //This is also called everytime the window is expanded the boolean is there just so nothing bad happens when initing horde over and over.&lt;br /&gt;
    bool hinit = false;&lt;br /&gt;
    if(hinit == false){ Horde3D::init(); hinit = true;}&lt;br /&gt;
    Horde3D::resize(0,0,get_width(),get_height());&lt;br /&gt;
    Horde3D::setupCameraView(cam,45.0f,(float)get_width()/get_height(),0.1f,1000.0f);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::render_hordeScene(){&lt;br /&gt;
    //sets the fps we want &lt;br /&gt;
    float fps = 60;&lt;br /&gt;
    _curFPS = fps;&lt;br /&gt;
	_timer += 1 / fps;&lt;br /&gt;
&lt;br /&gt;
	Horde3D::setOption( EngineOptions::DebugViewMode, _debugViewMode ? 1.0f : 0.0f );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::WireframeMode, _wireframeMode ? 1.0f : 0.0f );&lt;br /&gt;
&lt;br /&gt;
    _animTime += 1.0f / _curFPS;&lt;br /&gt;
&lt;br /&gt;
		// Do animation blending&lt;br /&gt;
    Horde3D::setModelAnimParams( _knight, 0, _animTime * 24.0f, _weight );&lt;br /&gt;
    Horde3D::setModelAnimParams( _knight, 1, _animTime * 24.0f, 1.0f - _weight );&lt;br /&gt;
&lt;br /&gt;
    // Animate particle systems (several emitters in a group node)&lt;br /&gt;
    unsigned int cnt = cnt = Horde3D::findNodes( _particleSys, &amp;quot;&amp;quot;, SceneNodeTypes::Emitter );&lt;br /&gt;
    for( unsigned int i = 0; i &amp;lt; cnt; ++i )&lt;br /&gt;
        Horde3D::advanceEmitterTime( Horde3D::getNodeFindResult( i ), 1.0f / _curFPS );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	// Set camera parameters&lt;br /&gt;
	Horde3D::setNodeTransform( _cam, _x, _y, _z, _rx ,_ry, 0, 1, 1, 1 );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	// Show logo&lt;br /&gt;
	Horde3D::showOverlay( 0.75f, 0, 0, 0, 1, 0, 1, 0,&lt;br /&gt;
						  1, 0.2f, 1, 1, 0.75f, 0.2f, 0, 1,&lt;br /&gt;
						  7, _logoMatRes );&lt;br /&gt;
&lt;br /&gt;
	// Render scene&lt;br /&gt;
	Horde3D::render( _cam );&lt;br /&gt;
&lt;br /&gt;
	// Remove all overlays&lt;br /&gt;
	Horde3D::clearOverlays();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::update_hordeScene(){&lt;br /&gt;
    //This is to update the screen when it goes idle you can use this has a extra update function.&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::Window&amp;gt; win = get_window();&lt;br /&gt;
&lt;br /&gt;
    Gdk::Rectangle r(0, 0,get_width(),get_height());&lt;br /&gt;
    Gtk::Widget::queue_draw();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now for the window widget.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cWindow.hpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef CWINDOW_HPP_INCLUDED&lt;br /&gt;
#define CWINDOW_HPP_INCLUDED&lt;br /&gt;
#include &amp;lt;gtkmm.h&amp;gt;&lt;br /&gt;
#include &amp;quot;cHordeWidget.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class cWindow : public Gtk::Window{&lt;br /&gt;
    public:&lt;br /&gt;
        cWindow();&lt;br /&gt;
        virtual ~cWindow();&lt;br /&gt;
&lt;br /&gt;
    protected:&lt;br /&gt;
&lt;br /&gt;
        virtual bool on_key_press_event(GdkEventKey* event);&lt;br /&gt;
&lt;br /&gt;
    private:&lt;br /&gt;
        Gtk::VBox m_vBox;&lt;br /&gt;
&lt;br /&gt;
        cHordeWidget m_hordeWidget;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif // CWINDOW_HPP_INCLUDED&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now the window widgets cpp&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cWindow.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;../include/cWindow.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cWindow::cWindow(){&lt;br /&gt;
    //set the windows title&lt;br /&gt;
    set_title(&amp;quot;Horde with gtkmm&amp;quot;);&lt;br /&gt;
    //makes the window update if it is expanded etc.&lt;br /&gt;
    set_reallocate_redraws(true);&lt;br /&gt;
    //adds a box to place the hordewidget and other widgets into&lt;br /&gt;
    add(m_vBox);&lt;br /&gt;
    //sets the minimum and default size for our window&lt;br /&gt;
    m_hordeWidget.set_size_request(800,600);&lt;br /&gt;
    //makes the widget expand when the window is expanded&lt;br /&gt;
    m_vBox.pack_start(m_hordeWidget);&lt;br /&gt;
    //shows all widgets. by default all widgets are invisible.  &lt;br /&gt;
    show_all();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
cWindow::~cWindow(){&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cWindow::on_key_press_event(GdkEventKey* event){&lt;br /&gt;
&lt;br /&gt;
    switch (event-&amp;gt;keyval)&lt;br /&gt;
    {&lt;br /&gt;
    case GDK_a:&lt;br /&gt;
      std::cout&amp;lt;&amp;lt;&amp;quot;test&amp;quot;;&lt;br /&gt;
      break;&lt;br /&gt;
&lt;br /&gt;
    case GDK_Escape:&lt;br /&gt;
      //ends our app&lt;br /&gt;
      Gtk::Main::quit();&lt;br /&gt;
&lt;br /&gt;
      break;&lt;br /&gt;
      default:&lt;br /&gt;
      return true;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Finnaly the main.cpp *Read the Comments*&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= main.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;gtkmm.h&amp;gt;&lt;br /&gt;
//Include our custom widget&lt;br /&gt;
#include &amp;quot;include/cHordeWidget.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]){&lt;br /&gt;
    //Init Gtk+&lt;br /&gt;
    Gtk::Main init (argc, argv);&lt;br /&gt;
    //Init Gtk+ opengl&lt;br /&gt;
    Gtk::GL::init (argc, argv);&lt;br /&gt;
    //Create our Window object&lt;br /&gt;
    Gtk::Window window;&lt;br /&gt;
    //Set our window title&lt;br /&gt;
    window.set_title (&amp;quot;Horde3D In Gtk+ Window&amp;quot;);&lt;br /&gt;
    //Create our cHordeWidget&lt;br /&gt;
    cHordeWidget drawing;&lt;br /&gt;
    //Set the cHordeWidgets size&lt;br /&gt;
    drawing.set_size_request(800, 600);&lt;br /&gt;
    //Add the cHordeWidget to our window&lt;br /&gt;
    window.add (drawing);&lt;br /&gt;
    //Show our cHordeWidget. All widgets are invisible by default.&lt;br /&gt;
    window.show_all ();&lt;br /&gt;
    //Run our window&lt;br /&gt;
    Gtk::Main::run (window);&lt;br /&gt;
    //Just a return statement&lt;br /&gt;
    return EXIT_SUCCESS;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 23:21, 8 August 2008 (CEST)&lt;br /&gt;
}}&lt;br /&gt;
|  valign=&amp;quot;top&amp;quot; | {{Extension_Summary|&lt;br /&gt;
name = Horde With Gtkmm|&lt;br /&gt;
screenshot = H3DPlaceHolder.png|&lt;br /&gt;
description = This tutorial introduces the use of Horde3D with Gtkmm|&lt;br /&gt;
version = 1.0|&lt;br /&gt;
horde3dversion = 1.0 beta|&lt;br /&gt;
released = 2008-07-8|&lt;br /&gt;
author = Raynaldo Rivera|&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
[[category: Tutorials]]&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Gtkmm&amp;diff=303</id>
		<title>Tutorial - Setup Horde with Gtkmm</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Gtkmm&amp;diff=303"/>
				<updated>2008-08-08T18:44:48Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|  border=&amp;quot;0&amp;quot; &lt;br /&gt;
| {{ContentBlock|width=800|color=white&lt;br /&gt;
|content='''Here is a small example on how to use Horde with Gtkmm.''' &lt;br /&gt;
This is a small tutorial on how to setup Horde with Gtk+ using Gtkmm and Gtkglextmm.&lt;br /&gt;
This one is setup with the knight example. I leave the adjusting of the camera to you :)&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cHordeWidget.hpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
#define CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3DUtils.h&amp;gt;&lt;br /&gt;
#include &amp;lt;cstdlib&amp;gt;&lt;br /&gt;
#include &amp;lt;gtkmm.h&amp;gt;&lt;br /&gt;
#include &amp;lt;gtkglmm.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sstream&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
#include &amp;lt;iomanip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class cHordeWidget : public Gtk::GL::DrawingArea{&lt;br /&gt;
    public:&lt;br /&gt;
        cHordeWidget();&lt;br /&gt;
        virtual ~cHordeWidget();&lt;br /&gt;
        bool on_timeout();&lt;br /&gt;
&lt;br /&gt;
    protected:&lt;br /&gt;
        virtual void on_realize();&lt;br /&gt;
        virtual bool on_configure_event(GdkEventConfigure* event);&lt;br /&gt;
        virtual bool on_expose_event(GdkEventExpose* event);&lt;br /&gt;
        //our horde init function&lt;br /&gt;
        void init_hordeScene();&lt;br /&gt;
        //our horde viewport functon&lt;br /&gt;
        void setup_hordeViewport();&lt;br /&gt;
        //our horde render function&lt;br /&gt;
        void render_hordeScene();&lt;br /&gt;
        //finnaly our horde update function&lt;br /&gt;
        void update_hordeScene();&lt;br /&gt;
&lt;br /&gt;
    private:&lt;br /&gt;
        ResHandle		_pipeRes, _fontMatRes, _logoMatRes, _hdrPipeRes, _forwardPipeRes;&lt;br /&gt;
        NodeHandle		_cam, _knight, _particleSys;&lt;br /&gt;
        float			_x, _y, _z, _rx, _ry;	// Viewer position and orientation&lt;br /&gt;
        float			_velocity;				// Velocity for movement&lt;br /&gt;
        float			_curFPS, _timer;&lt;br /&gt;
&lt;br /&gt;
        stringstream	_fpsText;&lt;br /&gt;
&lt;br /&gt;
        bool			_freeze, _showFPS, _debugViewMode, _wireframeMode;&lt;br /&gt;
        float			_animTime, _weight;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif // CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now for the cHordeWidget.cpp *Read the comments*&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cHordeWidget.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;../include/cHordeWidget.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
NodeHandle model = 0, cam = 0;&lt;br /&gt;
&lt;br /&gt;
cHordeWidget::cHordeWidget(){&lt;br /&gt;
&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Config&amp;gt; glconfig;&lt;br /&gt;
    //Pick are opengl options&lt;br /&gt;
    glconfig = Gdk::GL::Config::create(Gdk::GL::MODE_RGB | Gdk::GL::MODE_DEPTH | Gdk::GL::MODE_DOUBLE);&lt;br /&gt;
    //set the opengl options&lt;br /&gt;
    set_gl_capability(glconfig);&lt;br /&gt;
    //add are idle signal.&lt;br /&gt;
    Glib::signal_timeout().connect( sigc::mem_fun(*this, &amp;amp;cHordeWidget::on_timeout), 20 );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
cHordeWidget::~cHordeWidget(){&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::on_realize(){&lt;br /&gt;
    Gtk::GL::DrawingArea::on_realize();&lt;br /&gt;
&lt;br /&gt;
    //get gl::window&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
&lt;br /&gt;
    //begin gl commands&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
&lt;br /&gt;
    //init horde&lt;br /&gt;
    init_hordeScene();&lt;br /&gt;
    &lt;br /&gt;
    /end gl commands&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cHordeWidget::on_configure_event(GdkEventConfigure* event){&lt;br /&gt;
&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
&lt;br /&gt;
    //setup the viewport&lt;br /&gt;
    setup_hordeViewport();&lt;br /&gt;
&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cHordeWidget::on_expose_event(GdkEventExpose* event){&lt;br /&gt;
    &lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
&lt;br /&gt;
    //render the horde scene&lt;br /&gt;
    render_hordeScene();&lt;br /&gt;
    &lt;br /&gt;
    //swap are gl buffers use glflush if you use only one buffer&lt;br /&gt;
    glwindow-&amp;gt;swap_buffers();&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cHordeWidget::on_timeout(){&lt;br /&gt;
&lt;br /&gt;
    //update the horde scee&lt;br /&gt;
    update_hordeScene();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::init_hordeScene(){&lt;br /&gt;
&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::SceneGraph, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Geometry, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Animation, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Material, &amp;quot;materials&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Code, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Shader, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Texture2D, &amp;quot;textures&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::TextureCube, &amp;quot;textures&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Effect, &amp;quot;effects&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Pipeline, &amp;quot;pipelines&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	// Set options&lt;br /&gt;
	Horde3D::setOption( EngineOptions::LoadTextures, 1 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::TexCompression, 0 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::FastAnimation, 0 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::AnisotropyFactor, 8 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::ShadowMapSize, 2048 );&lt;br /&gt;
&lt;br /&gt;
	// Add resources&lt;br /&gt;
	// Pipelines&lt;br /&gt;
	_hdrPipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;hdr.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
	_forwardPipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;forward.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
	// Font&lt;br /&gt;
	_fontMatRes = Horde3D::addResource( ResourceTypes::Material, &amp;quot;font.material.xml&amp;quot;, 0 );&lt;br /&gt;
	// Logo&lt;br /&gt;
	_logoMatRes = Horde3D::addResource( ResourceTypes::Material, &amp;quot;logo.material.xml&amp;quot;, 0 );&lt;br /&gt;
	// Environment&lt;br /&gt;
	ResHandle envRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;sphere.scene.xml&amp;quot;, 0 );&lt;br /&gt;
	// Knight&lt;br /&gt;
	ResHandle knightRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;knight.scene.xml&amp;quot;, 0 );&lt;br /&gt;
	ResHandle knightAnim1Res = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;knight_order.anim&amp;quot;, 0 );&lt;br /&gt;
	ResHandle knightAnim2Res = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;knight_attack.anim&amp;quot;, 0 );&lt;br /&gt;
	// Particle system&lt;br /&gt;
	ResHandle particleSysRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;particleSys1.scene.xml&amp;quot;, 0 );&lt;br /&gt;
&lt;br /&gt;
	// Load resources&lt;br /&gt;
	Horde3DUtils::loadResourcesFromDisk( &amp;quot;media&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	// Add scene nodes&lt;br /&gt;
	// Add camera&lt;br /&gt;
	_cam = Horde3D::addCameraNode( RootNode, &amp;quot;Camera&amp;quot;, _hdrPipeRes );&lt;br /&gt;
	//Horde3D::setNodeParami( _cam, CameraNodeParams::OcclusionCulling, 1 );&lt;br /&gt;
	// Add environment&lt;br /&gt;
	NodeHandle env = Horde3D::addNodes( RootNode, envRes );&lt;br /&gt;
	Horde3D::setNodeTransform( env, 0, -20, 0, 0, 0, 0, 20, 20, 20 );&lt;br /&gt;
	// Add knight&lt;br /&gt;
	_knight = Horde3D::addNodes( RootNode, knightRes );&lt;br /&gt;
	Horde3D::setNodeTransform( _knight, 0, 0, 0, 0, 180, 0, 0.1f, 0.1f, 0.1f );&lt;br /&gt;
	Horde3D::setupModelAnimStage( _knight, 0, knightAnim1Res, &amp;quot;&amp;quot;, false );&lt;br /&gt;
	Horde3D::setupModelAnimStage( _knight, 1, knightAnim2Res, &amp;quot;&amp;quot;, false );&lt;br /&gt;
	// Attach particle system to hand joint&lt;br /&gt;
	Horde3D::findNodes( _knight, &amp;quot;Bip01_R_Hand&amp;quot;, SceneNodeTypes::Joint );&lt;br /&gt;
	NodeHandle hand = Horde3D::getNodeFindResult( 0 );&lt;br /&gt;
	_particleSys = Horde3D::addNodes( hand, particleSysRes );&lt;br /&gt;
	Horde3D::setNodeTransform( _particleSys, 0, 40, 0, 90, 0, 0, 1, 1, 1 );&lt;br /&gt;
&lt;br /&gt;
	// Add light source&lt;br /&gt;
	NodeHandle light = Horde3D::addLightNode( RootNode, &amp;quot;Light1&amp;quot;, 0, &amp;quot;LIGHTING&amp;quot;, &amp;quot;SHADOWMAP&amp;quot; );&lt;br /&gt;
	Horde3D::setNodeTransform( light, 0, 15, 10, -60, 0, 0, 1, 1, 1 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Radius, 30 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::FOV, 90 );&lt;br /&gt;
	Horde3D::setNodeParami( light, LightNodeParams::ShadowMapCount, 1 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::ShadowMapBias, 0.01f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_R, 1.0f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_G, 0.8f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_B, 0.7f );&lt;br /&gt;
&lt;br /&gt;
	// Customize post processing effects&lt;br /&gt;
	NodeHandle matRes = Horde3D::findResource( ResourceTypes::Material, &amp;quot;postHDR.material.xml&amp;quot; );&lt;br /&gt;
	// hdrParams: exposure, brightpass threshold, brightpass offset (see shader for description)&lt;br /&gt;
	Horde3D::setMaterialUniform( matRes, &amp;quot;hdrParams&amp;quot;, 2.5f, 0.5f, 0.08f, 0 );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::setup_hordeViewport(){&lt;br /&gt;
    //We have to init horde here becuase this is the first thing gtkmm calls when the widget is created. &lt;br /&gt;
    //This is also called everytime the window is expanded the boolean is there just so nothing bad happens when initing horde over and over.&lt;br /&gt;
    bool hinit = false;&lt;br /&gt;
    if(hinit == false){ Horde3D::init(); hinit = true;}&lt;br /&gt;
    Horde3D::resize(0,0,get_width(),get_height());&lt;br /&gt;
    Horde3D::setupCameraView(cam,45.0f,(float)get_width()/get_height(),0.1f,1000.0f);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::render_hordeScene(){&lt;br /&gt;
    //sets the fps we want &lt;br /&gt;
    float fps = 60;&lt;br /&gt;
    _curFPS = fps;&lt;br /&gt;
	_timer += 1 / fps;&lt;br /&gt;
&lt;br /&gt;
	Horde3D::setOption( EngineOptions::DebugViewMode, _debugViewMode ? 1.0f : 0.0f );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::WireframeMode, _wireframeMode ? 1.0f : 0.0f );&lt;br /&gt;
&lt;br /&gt;
    _animTime += 1.0f / _curFPS;&lt;br /&gt;
&lt;br /&gt;
		// Do animation blending&lt;br /&gt;
    Horde3D::setModelAnimParams( _knight, 0, _animTime * 24.0f, _weight );&lt;br /&gt;
    Horde3D::setModelAnimParams( _knight, 1, _animTime * 24.0f, 1.0f - _weight );&lt;br /&gt;
&lt;br /&gt;
    // Animate particle systems (several emitters in a group node)&lt;br /&gt;
    unsigned int cnt = cnt = Horde3D::findNodes( _particleSys, &amp;quot;&amp;quot;, SceneNodeTypes::Emitter );&lt;br /&gt;
    for( unsigned int i = 0; i &amp;lt; cnt; ++i )&lt;br /&gt;
        Horde3D::advanceEmitterTime( Horde3D::getNodeFindResult( i ), 1.0f / _curFPS );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	// Set camera parameters&lt;br /&gt;
	Horde3D::setNodeTransform( _cam, _x, _y, _z, _rx ,_ry, 0, 1, 1, 1 );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	// Show logo&lt;br /&gt;
	Horde3D::showOverlay( 0.75f, 0, 0, 0, 1, 0, 1, 0,&lt;br /&gt;
						  1, 0.2f, 1, 1, 0.75f, 0.2f, 0, 1,&lt;br /&gt;
						  7, _logoMatRes );&lt;br /&gt;
&lt;br /&gt;
	// Render scene&lt;br /&gt;
	Horde3D::render( _cam );&lt;br /&gt;
&lt;br /&gt;
	// Remove all overlays&lt;br /&gt;
	Horde3D::clearOverlays();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::update_hordeScene(){&lt;br /&gt;
    //This is to update the screen when it goes idle you can use this has a extra update function.&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::Window&amp;gt; win = get_window();&lt;br /&gt;
&lt;br /&gt;
    Gdk::Rectangle r(0, 0,get_width(),get_height());&lt;br /&gt;
    Gtk::Widget::queue_draw();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now for the window widget.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cWindow.hpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef CWINDOW_HPP_INCLUDED&lt;br /&gt;
#define CWINDOW_HPP_INCLUDED&lt;br /&gt;
#include &amp;lt;gtkmm.h&amp;gt;&lt;br /&gt;
#include &amp;quot;cHordeWidget.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class cWindow : public Gtk::Window{&lt;br /&gt;
    public:&lt;br /&gt;
        cWindow();&lt;br /&gt;
        virtual ~cWindow();&lt;br /&gt;
&lt;br /&gt;
    protected:&lt;br /&gt;
&lt;br /&gt;
        virtual bool on_key_press_event(GdkEventKey* event);&lt;br /&gt;
&lt;br /&gt;
    private:&lt;br /&gt;
        Gtk::VBox m_vBox;&lt;br /&gt;
&lt;br /&gt;
        cHordeWidget m_hordeWidget;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif // CWINDOW_HPP_INCLUDED&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now the window widgets cpp&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cWindow.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;../include/cWindow.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cWindow::cWindow(){&lt;br /&gt;
    //set the windows title&lt;br /&gt;
    set_title(&amp;quot;Horde with gtkmm&amp;quot;);&lt;br /&gt;
    //makes the window update if it is expanded etc.&lt;br /&gt;
    set_reallocate_redraws(true);&lt;br /&gt;
    //adds a box to place the hordewidget and other widgets into&lt;br /&gt;
    add(m_vBox);&lt;br /&gt;
    //sets the minimum and default size for our window&lt;br /&gt;
    m_hordeWidget.set_size_request(800,600);&lt;br /&gt;
    //makes the widget expand when the window is expanded&lt;br /&gt;
    m_vBox.pack_start(m_hordeWidget);&lt;br /&gt;
    //shows all widgets. by default all widgets are invisible.  &lt;br /&gt;
    show_all();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
cWindow::~cWindow(){&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cWindow::on_key_press_event(GdkEventKey* event){&lt;br /&gt;
&lt;br /&gt;
    switch (event-&amp;gt;keyval)&lt;br /&gt;
    {&lt;br /&gt;
    case GDK_a:&lt;br /&gt;
      std::cout&amp;lt;&amp;lt;&amp;quot;test&amp;quot;;&lt;br /&gt;
      break;&lt;br /&gt;
&lt;br /&gt;
    case GDK_Escape:&lt;br /&gt;
      //ends our app&lt;br /&gt;
      Gtk::Main::quit();&lt;br /&gt;
&lt;br /&gt;
      break;&lt;br /&gt;
      default:&lt;br /&gt;
      return true;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Finnaly the main.cpp *Read the Comments*&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= main.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;gtkmm.h&amp;gt;&lt;br /&gt;
//Include are custom widget&lt;br /&gt;
#include &amp;quot;include/cHordeWidget.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]){&lt;br /&gt;
    //Init Gtk+&lt;br /&gt;
    Gtk::Main init (argc, argv);&lt;br /&gt;
    //Init Gtk+ opengl&lt;br /&gt;
    Gtk::GL::init (argc, argv);&lt;br /&gt;
    //Create our Window object&lt;br /&gt;
    Gtk::Window window;&lt;br /&gt;
    //Set our window title&lt;br /&gt;
    window.set_title (&amp;quot;Horde3D In Gtk+ Window&amp;quot;);&lt;br /&gt;
    //Create our cHordeWidget&lt;br /&gt;
    cHordeWidget drawing;&lt;br /&gt;
    //Set the cHordeWidgets size&lt;br /&gt;
    drawing.set_size_request(800, 600);&lt;br /&gt;
    //Add the cHordeWidget to our window&lt;br /&gt;
    window.add (drawing);&lt;br /&gt;
    //Show our cHordeWidget. All widgets are invisible by default.&lt;br /&gt;
    window.show_all ();&lt;br /&gt;
    //Run our window&lt;br /&gt;
    Gtk::Main::run (window);&lt;br /&gt;
    //Just a return statement&lt;br /&gt;
    return EXIT_SUCCESS;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 23:21, 8 August 2008 (CEST)&lt;br /&gt;
}}&lt;br /&gt;
|  valign=&amp;quot;top&amp;quot; | {{Extension_Summary|&lt;br /&gt;
name = Horde With Gtkmm|&lt;br /&gt;
screenshot = H3DPlaceHolder.png|&lt;br /&gt;
description = This tutorial introduces the use of Horde3D with Gtkmm|&lt;br /&gt;
version = 1.0|&lt;br /&gt;
horde3dversion = 1.0 beta|&lt;br /&gt;
released = 2008-07-8|&lt;br /&gt;
author = Raynaldo Rivera|&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
[[category: Tutorials]]&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Gtkmm&amp;diff=302</id>
		<title>Tutorial - Setup Horde with Gtkmm</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Gtkmm&amp;diff=302"/>
				<updated>2008-08-08T18:43:49Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|  border=&amp;quot;0&amp;quot; &lt;br /&gt;
| {{ContentBlock|width=800|color=white&lt;br /&gt;
|content='''Here is a small example on how to use Horde with Gtkmm.''' &lt;br /&gt;
This is a small tutorial on how to setup Horde with Gtk+ using Gtkmm and Gtkglextmm.&lt;br /&gt;
This one is setup with the knight example. I leave the adjusting of the camera to you :)&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cHordeWidget.hpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
#define CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3DUtils.h&amp;gt;&lt;br /&gt;
#include &amp;lt;cstdlib&amp;gt;&lt;br /&gt;
#include &amp;lt;gtkmm.h&amp;gt;&lt;br /&gt;
#include &amp;lt;gtkglmm.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sstream&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
#include &amp;lt;iomanip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class cHordeWidget : public Gtk::GL::DrawingArea{&lt;br /&gt;
    public:&lt;br /&gt;
        cHordeWidget();&lt;br /&gt;
        virtual ~cHordeWidget();&lt;br /&gt;
        bool on_timeout();&lt;br /&gt;
&lt;br /&gt;
    protected:&lt;br /&gt;
        virtual void on_realize();&lt;br /&gt;
        virtual bool on_configure_event(GdkEventConfigure* event);&lt;br /&gt;
        virtual bool on_expose_event(GdkEventExpose* event);&lt;br /&gt;
        //our horde init function&lt;br /&gt;
        void init_hordeScene();&lt;br /&gt;
        //our horde viewport functon&lt;br /&gt;
        void setup_hordeViewport();&lt;br /&gt;
        //our horde render function&lt;br /&gt;
        void render_hordeScene();&lt;br /&gt;
        //finnaly our horde update function&lt;br /&gt;
        void update_hordeScene();&lt;br /&gt;
&lt;br /&gt;
    private:&lt;br /&gt;
        ResHandle		_pipeRes, _fontMatRes, _logoMatRes, _hdrPipeRes, _forwardPipeRes;&lt;br /&gt;
        NodeHandle		_cam, _knight, _particleSys;&lt;br /&gt;
        float			_x, _y, _z, _rx, _ry;	// Viewer position and orientation&lt;br /&gt;
        float			_velocity;				// Velocity for movement&lt;br /&gt;
        float			_curFPS, _timer;&lt;br /&gt;
&lt;br /&gt;
        stringstream	_fpsText;&lt;br /&gt;
&lt;br /&gt;
        bool			_freeze, _showFPS, _debugViewMode, _wireframeMode;&lt;br /&gt;
        float			_animTime, _weight;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif // CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now for the cHordeWidget.cpp *Read the comments*&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cHordeWidget.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;../include/cHordeWidget.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
NodeHandle model = 0, cam = 0;&lt;br /&gt;
&lt;br /&gt;
cHordeWidget::cHordeWidget(){&lt;br /&gt;
&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Config&amp;gt; glconfig;&lt;br /&gt;
    //Pick are opengl options&lt;br /&gt;
    glconfig = Gdk::GL::Config::create(Gdk::GL::MODE_RGB | Gdk::GL::MODE_DEPTH | Gdk::GL::MODE_DOUBLE);&lt;br /&gt;
    //set the opengl options&lt;br /&gt;
    set_gl_capability(glconfig);&lt;br /&gt;
    //add are idle signal.&lt;br /&gt;
    Glib::signal_timeout().connect( sigc::mem_fun(*this, &amp;amp;cHordeWidget::on_timeout), 20 );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
cHordeWidget::~cHordeWidget(){&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::on_realize(){&lt;br /&gt;
    Gtk::GL::DrawingArea::on_realize();&lt;br /&gt;
&lt;br /&gt;
    //get gl::window&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
&lt;br /&gt;
    //begin gl commands&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
&lt;br /&gt;
    //init horde&lt;br /&gt;
    init_hordeScene();&lt;br /&gt;
    &lt;br /&gt;
    /end gl commands&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cHordeWidget::on_configure_event(GdkEventConfigure* event){&lt;br /&gt;
&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
&lt;br /&gt;
    //setup the viewport&lt;br /&gt;
    setup_hordeViewport();&lt;br /&gt;
&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cHordeWidget::on_expose_event(GdkEventExpose* event){&lt;br /&gt;
    &lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
&lt;br /&gt;
    //render the horde scene&lt;br /&gt;
    render_hordeScene();&lt;br /&gt;
    &lt;br /&gt;
    //swap are gl buffers use glflush if you use only one buffer&lt;br /&gt;
    glwindow-&amp;gt;swap_buffers();&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cHordeWidget::on_timeout(){&lt;br /&gt;
&lt;br /&gt;
    //update the horde scee&lt;br /&gt;
    update_hordeScene();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::init_hordeScene(){&lt;br /&gt;
&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::SceneGraph, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Geometry, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Animation, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Material, &amp;quot;materials&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Code, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Shader, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Texture2D, &amp;quot;textures&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::TextureCube, &amp;quot;textures&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Effect, &amp;quot;effects&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Pipeline, &amp;quot;pipelines&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	// Set options&lt;br /&gt;
	Horde3D::setOption( EngineOptions::LoadTextures, 1 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::TexCompression, 0 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::FastAnimation, 0 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::AnisotropyFactor, 8 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::ShadowMapSize, 2048 );&lt;br /&gt;
&lt;br /&gt;
	// Add resources&lt;br /&gt;
	// Pipelines&lt;br /&gt;
	_hdrPipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;hdr.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
	_forwardPipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;forward.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
	// Font&lt;br /&gt;
	_fontMatRes = Horde3D::addResource( ResourceTypes::Material, &amp;quot;font.material.xml&amp;quot;, 0 );&lt;br /&gt;
	// Logo&lt;br /&gt;
	_logoMatRes = Horde3D::addResource( ResourceTypes::Material, &amp;quot;logo.material.xml&amp;quot;, 0 );&lt;br /&gt;
	// Environment&lt;br /&gt;
	ResHandle envRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;sphere.scene.xml&amp;quot;, 0 );&lt;br /&gt;
	// Knight&lt;br /&gt;
	ResHandle knightRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;knight.scene.xml&amp;quot;, 0 );&lt;br /&gt;
	ResHandle knightAnim1Res = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;knight_order.anim&amp;quot;, 0 );&lt;br /&gt;
	ResHandle knightAnim2Res = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;knight_attack.anim&amp;quot;, 0 );&lt;br /&gt;
	// Particle system&lt;br /&gt;
	ResHandle particleSysRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;particleSys1.scene.xml&amp;quot;, 0 );&lt;br /&gt;
&lt;br /&gt;
	// Load resources&lt;br /&gt;
	Horde3DUtils::loadResourcesFromDisk( &amp;quot;media&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	// Add scene nodes&lt;br /&gt;
	// Add camera&lt;br /&gt;
	_cam = Horde3D::addCameraNode( RootNode, &amp;quot;Camera&amp;quot;, _hdrPipeRes );&lt;br /&gt;
	//Horde3D::setNodeParami( _cam, CameraNodeParams::OcclusionCulling, 1 );&lt;br /&gt;
	// Add environment&lt;br /&gt;
	NodeHandle env = Horde3D::addNodes( RootNode, envRes );&lt;br /&gt;
	Horde3D::setNodeTransform( env, 0, -20, 0, 0, 0, 0, 20, 20, 20 );&lt;br /&gt;
	// Add knight&lt;br /&gt;
	_knight = Horde3D::addNodes( RootNode, knightRes );&lt;br /&gt;
	Horde3D::setNodeTransform( _knight, 0, 0, 0, 0, 180, 0, 0.1f, 0.1f, 0.1f );&lt;br /&gt;
	Horde3D::setupModelAnimStage( _knight, 0, knightAnim1Res, &amp;quot;&amp;quot;, false );&lt;br /&gt;
	Horde3D::setupModelAnimStage( _knight, 1, knightAnim2Res, &amp;quot;&amp;quot;, false );&lt;br /&gt;
	// Attach particle system to hand joint&lt;br /&gt;
	Horde3D::findNodes( _knight, &amp;quot;Bip01_R_Hand&amp;quot;, SceneNodeTypes::Joint );&lt;br /&gt;
	NodeHandle hand = Horde3D::getNodeFindResult( 0 );&lt;br /&gt;
	_particleSys = Horde3D::addNodes( hand, particleSysRes );&lt;br /&gt;
	Horde3D::setNodeTransform( _particleSys, 0, 40, 0, 90, 0, 0, 1, 1, 1 );&lt;br /&gt;
&lt;br /&gt;
	// Add light source&lt;br /&gt;
	NodeHandle light = Horde3D::addLightNode( RootNode, &amp;quot;Light1&amp;quot;, 0, &amp;quot;LIGHTING&amp;quot;, &amp;quot;SHADOWMAP&amp;quot; );&lt;br /&gt;
	Horde3D::setNodeTransform( light, 0, 15, 10, -60, 0, 0, 1, 1, 1 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Radius, 30 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::FOV, 90 );&lt;br /&gt;
	Horde3D::setNodeParami( light, LightNodeParams::ShadowMapCount, 1 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::ShadowMapBias, 0.01f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_R, 1.0f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_G, 0.8f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_B, 0.7f );&lt;br /&gt;
&lt;br /&gt;
	// Customize post processing effects&lt;br /&gt;
	NodeHandle matRes = Horde3D::findResource( ResourceTypes::Material, &amp;quot;postHDR.material.xml&amp;quot; );&lt;br /&gt;
	// hdrParams: exposure, brightpass threshold, brightpass offset (see shader for description)&lt;br /&gt;
	Horde3D::setMaterialUniform( matRes, &amp;quot;hdrParams&amp;quot;, 2.5f, 0.5f, 0.08f, 0 );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::setup_hordeViewport(){&lt;br /&gt;
    //We have to init horde here becuase this is the first thing gtkmm calls when the widget is created. &lt;br /&gt;
    //This is also called everytime the window is expanded the boolean is there just so nothing bad happens when initing horde over and over.&lt;br /&gt;
    bool hinit = false;&lt;br /&gt;
    if(hinit == false){ Horde3D::init(); hinit = true;}&lt;br /&gt;
    Horde3D::resize(0,0,get_width(),get_height());&lt;br /&gt;
    Horde3D::setupCameraView(cam,45.0f,(float)get_width()/get_height(),0.1f,1000.0f);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::render_hordeScene(){&lt;br /&gt;
    float fps = 60;&lt;br /&gt;
    _curFPS = fps;&lt;br /&gt;
	_timer += 1 / fps;&lt;br /&gt;
&lt;br /&gt;
	Horde3D::setOption( EngineOptions::DebugViewMode, _debugViewMode ? 1.0f : 0.0f );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::WireframeMode, _wireframeMode ? 1.0f : 0.0f );&lt;br /&gt;
&lt;br /&gt;
    _animTime += 1.0f / _curFPS;&lt;br /&gt;
&lt;br /&gt;
		// Do animation blending&lt;br /&gt;
    Horde3D::setModelAnimParams( _knight, 0, _animTime * 24.0f, _weight );&lt;br /&gt;
    Horde3D::setModelAnimParams( _knight, 1, _animTime * 24.0f, 1.0f - _weight );&lt;br /&gt;
&lt;br /&gt;
    // Animate particle systems (several emitters in a group node)&lt;br /&gt;
    unsigned int cnt = cnt = Horde3D::findNodes( _particleSys, &amp;quot;&amp;quot;, SceneNodeTypes::Emitter );&lt;br /&gt;
    for( unsigned int i = 0; i &amp;lt; cnt; ++i )&lt;br /&gt;
        Horde3D::advanceEmitterTime( Horde3D::getNodeFindResult( i ), 1.0f / _curFPS );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	// Set camera parameters&lt;br /&gt;
	Horde3D::setNodeTransform( _cam, _x, _y, _z, _rx ,_ry, 0, 1, 1, 1 );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	// Show logo&lt;br /&gt;
	Horde3D::showOverlay( 0.75f, 0, 0, 0, 1, 0, 1, 0,&lt;br /&gt;
						  1, 0.2f, 1, 1, 0.75f, 0.2f, 0, 1,&lt;br /&gt;
						  7, _logoMatRes );&lt;br /&gt;
&lt;br /&gt;
	// Render scene&lt;br /&gt;
	Horde3D::render( _cam );&lt;br /&gt;
&lt;br /&gt;
	// Remove all overlays&lt;br /&gt;
	Horde3D::clearOverlays();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::update_hordeScene(){&lt;br /&gt;
    //This is to update the screen when it goes idle you can use this has a extra update function.&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::Window&amp;gt; win = get_window();&lt;br /&gt;
&lt;br /&gt;
    Gdk::Rectangle r(0, 0,get_width(),get_height());&lt;br /&gt;
    Gtk::Widget::queue_draw();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now for the window widget.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cWindow.hpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef CWINDOW_HPP_INCLUDED&lt;br /&gt;
#define CWINDOW_HPP_INCLUDED&lt;br /&gt;
#include &amp;lt;gtkmm.h&amp;gt;&lt;br /&gt;
#include &amp;quot;cHordeWidget.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class cWindow : public Gtk::Window{&lt;br /&gt;
    public:&lt;br /&gt;
        cWindow();&lt;br /&gt;
        virtual ~cWindow();&lt;br /&gt;
&lt;br /&gt;
    protected:&lt;br /&gt;
&lt;br /&gt;
        virtual bool on_key_press_event(GdkEventKey* event);&lt;br /&gt;
&lt;br /&gt;
    private:&lt;br /&gt;
        Gtk::VBox m_vBox;&lt;br /&gt;
&lt;br /&gt;
        cHordeWidget m_hordeWidget;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif // CWINDOW_HPP_INCLUDED&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now the window widgets cpp&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cWindow.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;../include/cWindow.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cWindow::cWindow(){&lt;br /&gt;
    //set the windows title&lt;br /&gt;
    set_title(&amp;quot;Horde with gtkmm&amp;quot;);&lt;br /&gt;
    //makes the window update if it is expanded etc.&lt;br /&gt;
    set_reallocate_redraws(true);&lt;br /&gt;
    //adds a box to place the hordewidget and other widgets into&lt;br /&gt;
    add(m_vBox);&lt;br /&gt;
    //sets the minimum and default size for our window&lt;br /&gt;
    m_hordeWidget.set_size_request(800,600);&lt;br /&gt;
    //makes the widget expand when the window is expanded&lt;br /&gt;
    m_vBox.pack_start(m_hordeWidget);&lt;br /&gt;
    //shows all widgets. by default all widgets are invisible.  &lt;br /&gt;
    show_all();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
cWindow::~cWindow(){&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cWindow::on_key_press_event(GdkEventKey* event){&lt;br /&gt;
&lt;br /&gt;
    switch (event-&amp;gt;keyval)&lt;br /&gt;
    {&lt;br /&gt;
    case GDK_a:&lt;br /&gt;
      std::cout&amp;lt;&amp;lt;&amp;quot;test&amp;quot;;&lt;br /&gt;
      break;&lt;br /&gt;
&lt;br /&gt;
    case GDK_Escape:&lt;br /&gt;
      //ends our app&lt;br /&gt;
      Gtk::Main::quit();&lt;br /&gt;
&lt;br /&gt;
      break;&lt;br /&gt;
      default:&lt;br /&gt;
      return true;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Finnaly the main.cpp *Read the Comments*&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= main.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;gtkmm.h&amp;gt;&lt;br /&gt;
//Include are custom widget&lt;br /&gt;
#include &amp;quot;include/cHordeWidget.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]){&lt;br /&gt;
    //Init Gtk+&lt;br /&gt;
    Gtk::Main init (argc, argv);&lt;br /&gt;
    //Init Gtk+ opengl&lt;br /&gt;
    Gtk::GL::init (argc, argv);&lt;br /&gt;
    //Create our Window object&lt;br /&gt;
    Gtk::Window window;&lt;br /&gt;
    //Set our window title&lt;br /&gt;
    window.set_title (&amp;quot;Horde3D In Gtk+ Window&amp;quot;);&lt;br /&gt;
    //Create our cHordeWidget&lt;br /&gt;
    cHordeWidget drawing;&lt;br /&gt;
    //Set the cHordeWidgets size&lt;br /&gt;
    drawing.set_size_request(800, 600);&lt;br /&gt;
    //Add the cHordeWidget to our window&lt;br /&gt;
    window.add (drawing);&lt;br /&gt;
    //Show our cHordeWidget. All widgets are invisible by default.&lt;br /&gt;
    window.show_all ();&lt;br /&gt;
    //Run our window&lt;br /&gt;
    Gtk::Main::run (window);&lt;br /&gt;
    //Just a return statement&lt;br /&gt;
    return EXIT_SUCCESS;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 23:21, 8 August 2008 (CEST)&lt;br /&gt;
}}&lt;br /&gt;
|  valign=&amp;quot;top&amp;quot; | {{Extension_Summary|&lt;br /&gt;
name = Horde With Gtkmm|&lt;br /&gt;
screenshot = H3DPlaceHolder.png|&lt;br /&gt;
description = This tutorial introduces the use of Horde3D with Gtkmm|&lt;br /&gt;
version = 1.0|&lt;br /&gt;
horde3dversion = 1.0 beta|&lt;br /&gt;
released = 2008-07-8|&lt;br /&gt;
author = Raynaldo Rivera|&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
[[category: Tutorials]]&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Gtkmm&amp;diff=301</id>
		<title>Tutorial - Setup Horde with Gtkmm</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Gtkmm&amp;diff=301"/>
				<updated>2008-08-08T18:41:26Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|  border=&amp;quot;0&amp;quot; &lt;br /&gt;
| {{ContentBlock|width=800|color=white&lt;br /&gt;
|content='''Here is a small example on how to use Horde with Gtkmm.''' &lt;br /&gt;
This is a small tutorial on how to setup Horde with Gtk+ using Gtkmm and Gtkglextmm.&lt;br /&gt;
This one is setup with the knight example. I leave the adjusting of the camera to you :)&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cHordeWidget.hpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
#define CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3DUtils.h&amp;gt;&lt;br /&gt;
#include &amp;lt;cstdlib&amp;gt;&lt;br /&gt;
#include &amp;lt;gtkmm.h&amp;gt;&lt;br /&gt;
#include &amp;lt;gtkglmm.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sstream&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
#include &amp;lt;iomanip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class cHordeWidget : public Gtk::GL::DrawingArea{&lt;br /&gt;
    public:&lt;br /&gt;
        cHordeWidget();&lt;br /&gt;
        virtual ~cHordeWidget();&lt;br /&gt;
        bool on_timeout();&lt;br /&gt;
&lt;br /&gt;
    protected:&lt;br /&gt;
        virtual void on_realize();&lt;br /&gt;
        virtual bool on_configure_event(GdkEventConfigure* event);&lt;br /&gt;
        virtual bool on_expose_event(GdkEventExpose* event);&lt;br /&gt;
        void init_hordeScene();&lt;br /&gt;
        void setup_hordeViewport();&lt;br /&gt;
        void render_hordeScene();&lt;br /&gt;
        void update_hordeScene();&lt;br /&gt;
&lt;br /&gt;
    private:&lt;br /&gt;
        ResHandle		_pipeRes, _fontMatRes, _logoMatRes, _hdrPipeRes, _forwardPipeRes;&lt;br /&gt;
        NodeHandle		_cam, _knight, _particleSys;&lt;br /&gt;
        float			_x, _y, _z, _rx, _ry;	// Viewer position and orientation&lt;br /&gt;
        float			_velocity;				// Velocity for movement&lt;br /&gt;
        float			_curFPS, _timer;&lt;br /&gt;
&lt;br /&gt;
        stringstream	_fpsText;&lt;br /&gt;
&lt;br /&gt;
        bool			_freeze, _showFPS, _debugViewMode, _wireframeMode;&lt;br /&gt;
        float			_animTime, _weight;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif // CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now for the cHordeWidget.cpp *Read the comments*&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cHordeWidget.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;../include/cHordeWidget.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
NodeHandle model = 0, cam = 0;&lt;br /&gt;
&lt;br /&gt;
cHordeWidget::cHordeWidget(){&lt;br /&gt;
&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Config&amp;gt; glconfig;&lt;br /&gt;
    //Pick are opengl options&lt;br /&gt;
    glconfig = Gdk::GL::Config::create(Gdk::GL::MODE_RGB | Gdk::GL::MODE_DEPTH | Gdk::GL::MODE_DOUBLE);&lt;br /&gt;
    //set the opengl options&lt;br /&gt;
    set_gl_capability(glconfig);&lt;br /&gt;
    //add are idle signal.&lt;br /&gt;
    Glib::signal_timeout().connect( sigc::mem_fun(*this, &amp;amp;cHordeWidget::on_timeout), 20 );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
cHordeWidget::~cHordeWidget(){&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::on_realize(){&lt;br /&gt;
    Gtk::GL::DrawingArea::on_realize();&lt;br /&gt;
&lt;br /&gt;
    //get gl::window&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
&lt;br /&gt;
    //begin gl commands&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
&lt;br /&gt;
    //init horde&lt;br /&gt;
    init_hordeScene();&lt;br /&gt;
    &lt;br /&gt;
    /end gl commands&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cHordeWidget::on_configure_event(GdkEventConfigure* event){&lt;br /&gt;
&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
&lt;br /&gt;
    //setup the viewport&lt;br /&gt;
    setup_hordeViewport();&lt;br /&gt;
&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cHordeWidget::on_expose_event(GdkEventExpose* event){&lt;br /&gt;
    &lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
&lt;br /&gt;
    //render the horde scene&lt;br /&gt;
    render_hordeScene();&lt;br /&gt;
    &lt;br /&gt;
    //swap are gl buffers use glflush if you use only one buffer&lt;br /&gt;
    glwindow-&amp;gt;swap_buffers();&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cHordeWidget::on_timeout(){&lt;br /&gt;
&lt;br /&gt;
    //update the horde scee&lt;br /&gt;
    update_hordeScene();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::init_hordeScene(){&lt;br /&gt;
&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::SceneGraph, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Geometry, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Animation, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Material, &amp;quot;materials&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Code, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Shader, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Texture2D, &amp;quot;textures&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::TextureCube, &amp;quot;textures&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Effect, &amp;quot;effects&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Pipeline, &amp;quot;pipelines&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	// Set options&lt;br /&gt;
	Horde3D::setOption( EngineOptions::LoadTextures, 1 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::TexCompression, 0 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::FastAnimation, 0 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::AnisotropyFactor, 8 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::ShadowMapSize, 2048 );&lt;br /&gt;
&lt;br /&gt;
	// Add resources&lt;br /&gt;
	// Pipelines&lt;br /&gt;
	_hdrPipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;hdr.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
	_forwardPipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;forward.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
	// Font&lt;br /&gt;
	_fontMatRes = Horde3D::addResource( ResourceTypes::Material, &amp;quot;font.material.xml&amp;quot;, 0 );&lt;br /&gt;
	// Logo&lt;br /&gt;
	_logoMatRes = Horde3D::addResource( ResourceTypes::Material, &amp;quot;logo.material.xml&amp;quot;, 0 );&lt;br /&gt;
	// Environment&lt;br /&gt;
	ResHandle envRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;sphere.scene.xml&amp;quot;, 0 );&lt;br /&gt;
	// Knight&lt;br /&gt;
	ResHandle knightRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;knight.scene.xml&amp;quot;, 0 );&lt;br /&gt;
	ResHandle knightAnim1Res = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;knight_order.anim&amp;quot;, 0 );&lt;br /&gt;
	ResHandle knightAnim2Res = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;knight_attack.anim&amp;quot;, 0 );&lt;br /&gt;
	// Particle system&lt;br /&gt;
	ResHandle particleSysRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;particleSys1.scene.xml&amp;quot;, 0 );&lt;br /&gt;
&lt;br /&gt;
	// Load resources&lt;br /&gt;
	Horde3DUtils::loadResourcesFromDisk( &amp;quot;media&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	// Add scene nodes&lt;br /&gt;
	// Add camera&lt;br /&gt;
	_cam = Horde3D::addCameraNode( RootNode, &amp;quot;Camera&amp;quot;, _hdrPipeRes );&lt;br /&gt;
	//Horde3D::setNodeParami( _cam, CameraNodeParams::OcclusionCulling, 1 );&lt;br /&gt;
	// Add environment&lt;br /&gt;
	NodeHandle env = Horde3D::addNodes( RootNode, envRes );&lt;br /&gt;
	Horde3D::setNodeTransform( env, 0, -20, 0, 0, 0, 0, 20, 20, 20 );&lt;br /&gt;
	// Add knight&lt;br /&gt;
	_knight = Horde3D::addNodes( RootNode, knightRes );&lt;br /&gt;
	Horde3D::setNodeTransform( _knight, 0, 0, 0, 0, 180, 0, 0.1f, 0.1f, 0.1f );&lt;br /&gt;
	Horde3D::setupModelAnimStage( _knight, 0, knightAnim1Res, &amp;quot;&amp;quot;, false );&lt;br /&gt;
	Horde3D::setupModelAnimStage( _knight, 1, knightAnim2Res, &amp;quot;&amp;quot;, false );&lt;br /&gt;
	// Attach particle system to hand joint&lt;br /&gt;
	Horde3D::findNodes( _knight, &amp;quot;Bip01_R_Hand&amp;quot;, SceneNodeTypes::Joint );&lt;br /&gt;
	NodeHandle hand = Horde3D::getNodeFindResult( 0 );&lt;br /&gt;
	_particleSys = Horde3D::addNodes( hand, particleSysRes );&lt;br /&gt;
	Horde3D::setNodeTransform( _particleSys, 0, 40, 0, 90, 0, 0, 1, 1, 1 );&lt;br /&gt;
&lt;br /&gt;
	// Add light source&lt;br /&gt;
	NodeHandle light = Horde3D::addLightNode( RootNode, &amp;quot;Light1&amp;quot;, 0, &amp;quot;LIGHTING&amp;quot;, &amp;quot;SHADOWMAP&amp;quot; );&lt;br /&gt;
	Horde3D::setNodeTransform( light, 0, 15, 10, -60, 0, 0, 1, 1, 1 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Radius, 30 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::FOV, 90 );&lt;br /&gt;
	Horde3D::setNodeParami( light, LightNodeParams::ShadowMapCount, 1 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::ShadowMapBias, 0.01f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_R, 1.0f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_G, 0.8f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_B, 0.7f );&lt;br /&gt;
&lt;br /&gt;
	// Customize post processing effects&lt;br /&gt;
	NodeHandle matRes = Horde3D::findResource( ResourceTypes::Material, &amp;quot;postHDR.material.xml&amp;quot; );&lt;br /&gt;
	// hdrParams: exposure, brightpass threshold, brightpass offset (see shader for description)&lt;br /&gt;
	Horde3D::setMaterialUniform( matRes, &amp;quot;hdrParams&amp;quot;, 2.5f, 0.5f, 0.08f, 0 );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::setup_hordeViewport(){&lt;br /&gt;
    //We have to init horde here becuase this is the first thing gtkmm calls when the widget is created. &lt;br /&gt;
    //This is also called everytime the window is expanded the boolean is there just so nothing bad happens when initing horde over and over.&lt;br /&gt;
    bool hinit = false;&lt;br /&gt;
    if(hinit == false){ Horde3D::init(); hinit = true;}&lt;br /&gt;
    Horde3D::resize(0,0,get_width(),get_height());&lt;br /&gt;
    Horde3D::setupCameraView(cam,45.0f,(float)get_width()/get_height(),0.1f,1000.0f);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::render_hordeScene(){&lt;br /&gt;
    float fps = 60;&lt;br /&gt;
    _curFPS = fps;&lt;br /&gt;
	_timer += 1 / fps;&lt;br /&gt;
&lt;br /&gt;
	Horde3D::setOption( EngineOptions::DebugViewMode, _debugViewMode ? 1.0f : 0.0f );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::WireframeMode, _wireframeMode ? 1.0f : 0.0f );&lt;br /&gt;
&lt;br /&gt;
    _animTime += 1.0f / _curFPS;&lt;br /&gt;
&lt;br /&gt;
		// Do animation blending&lt;br /&gt;
    Horde3D::setModelAnimParams( _knight, 0, _animTime * 24.0f, _weight );&lt;br /&gt;
    Horde3D::setModelAnimParams( _knight, 1, _animTime * 24.0f, 1.0f - _weight );&lt;br /&gt;
&lt;br /&gt;
    // Animate particle systems (several emitters in a group node)&lt;br /&gt;
    unsigned int cnt = cnt = Horde3D::findNodes( _particleSys, &amp;quot;&amp;quot;, SceneNodeTypes::Emitter );&lt;br /&gt;
    for( unsigned int i = 0; i &amp;lt; cnt; ++i )&lt;br /&gt;
        Horde3D::advanceEmitterTime( Horde3D::getNodeFindResult( i ), 1.0f / _curFPS );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	// Set camera parameters&lt;br /&gt;
	Horde3D::setNodeTransform( _cam, _x, _y, _z, _rx ,_ry, 0, 1, 1, 1 );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	// Show logo&lt;br /&gt;
	Horde3D::showOverlay( 0.75f, 0, 0, 0, 1, 0, 1, 0,&lt;br /&gt;
						  1, 0.2f, 1, 1, 0.75f, 0.2f, 0, 1,&lt;br /&gt;
						  7, _logoMatRes );&lt;br /&gt;
&lt;br /&gt;
	// Render scene&lt;br /&gt;
	Horde3D::render( _cam );&lt;br /&gt;
&lt;br /&gt;
	// Remove all overlays&lt;br /&gt;
	Horde3D::clearOverlays();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::update_hordeScene(){&lt;br /&gt;
    //This is to update the screen when it goes idle you can use this has a extra update function.&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::Window&amp;gt; win = get_window();&lt;br /&gt;
&lt;br /&gt;
    Gdk::Rectangle r(0, 0,get_width(),get_height());&lt;br /&gt;
    Gtk::Widget::queue_draw();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now for the window widget.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cWindow.hpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef CWINDOW_HPP_INCLUDED&lt;br /&gt;
#define CWINDOW_HPP_INCLUDED&lt;br /&gt;
#include &amp;lt;gtkmm.h&amp;gt;&lt;br /&gt;
#include &amp;quot;cHordeWidget.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class cWindow : public Gtk::Window{&lt;br /&gt;
    public:&lt;br /&gt;
        cWindow();&lt;br /&gt;
        virtual ~cWindow();&lt;br /&gt;
&lt;br /&gt;
    protected:&lt;br /&gt;
&lt;br /&gt;
        virtual bool on_key_press_event(GdkEventKey* event);&lt;br /&gt;
&lt;br /&gt;
    private:&lt;br /&gt;
        Gtk::VBox m_vBox;&lt;br /&gt;
&lt;br /&gt;
        cHordeWidget m_hordeWidget;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif // CWINDOW_HPP_INCLUDED&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now the window widgets cpp&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cWindow.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;../include/cWindow.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cWindow::cWindow(){&lt;br /&gt;
    //set the windows title&lt;br /&gt;
    set_title(&amp;quot;Horde with gtkmm&amp;quot;);&lt;br /&gt;
    //makes the window update if it is expanded etc.&lt;br /&gt;
    set_reallocate_redraws(true);&lt;br /&gt;
    //adds a box to place the hordewidget and other widgets into&lt;br /&gt;
    add(m_vBox);&lt;br /&gt;
    //sets the minimum and default size for our window&lt;br /&gt;
    m_hordeWidget.set_size_request(800,600);&lt;br /&gt;
    //makes the widget expand when the window is expanded&lt;br /&gt;
    m_vBox.pack_start(m_hordeWidget);&lt;br /&gt;
    //shows all widgets. by default all widgets are invisible.  &lt;br /&gt;
    show_all();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
cWindow::~cWindow(){&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cWindow::on_key_press_event(GdkEventKey* event){&lt;br /&gt;
&lt;br /&gt;
    switch (event-&amp;gt;keyval)&lt;br /&gt;
    {&lt;br /&gt;
    case GDK_a:&lt;br /&gt;
      std::cout&amp;lt;&amp;lt;&amp;quot;test&amp;quot;;&lt;br /&gt;
      break;&lt;br /&gt;
&lt;br /&gt;
    case GDK_Escape:&lt;br /&gt;
      //ends our app&lt;br /&gt;
      Gtk::Main::quit();&lt;br /&gt;
&lt;br /&gt;
      break;&lt;br /&gt;
      default:&lt;br /&gt;
      return true;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Finnaly the main.cpp *Read the Comments*&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= main.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;gtkmm.h&amp;gt;&lt;br /&gt;
//Include are custom widget&lt;br /&gt;
#include &amp;quot;include/cHordeWidget.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]){&lt;br /&gt;
    //Init Gtk+&lt;br /&gt;
    Gtk::Main init (argc, argv);&lt;br /&gt;
    //Init Gtk+ opengl&lt;br /&gt;
    Gtk::GL::init (argc, argv);&lt;br /&gt;
    //Create our Window object&lt;br /&gt;
    Gtk::Window window;&lt;br /&gt;
    //Set our window title&lt;br /&gt;
    window.set_title (&amp;quot;Horde3D In Gtk+ Window&amp;quot;);&lt;br /&gt;
    //Create our cHordeWidget&lt;br /&gt;
    cHordeWidget drawing;&lt;br /&gt;
    //Set the cHordeWidgets size&lt;br /&gt;
    drawing.set_size_request(800, 600);&lt;br /&gt;
    //Add the cHordeWidget to our window&lt;br /&gt;
    window.add (drawing);&lt;br /&gt;
    //Show our cHordeWidget. All widgets are invisible by default.&lt;br /&gt;
    window.show_all ();&lt;br /&gt;
    //Run our window&lt;br /&gt;
    Gtk::Main::run (window);&lt;br /&gt;
    //Just a return statement&lt;br /&gt;
    return EXIT_SUCCESS;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 23:21, 8 August 2008 (CEST)&lt;br /&gt;
}}&lt;br /&gt;
|  valign=&amp;quot;top&amp;quot; | {{Extension_Summary|&lt;br /&gt;
name = Horde With Gtkmm|&lt;br /&gt;
screenshot = H3DPlaceHolder.png|&lt;br /&gt;
description = This tutorial introduces the use of Horde3D with Gtkmm|&lt;br /&gt;
version = 1.0|&lt;br /&gt;
horde3dversion = 1.0 beta|&lt;br /&gt;
released = 2008-07-8|&lt;br /&gt;
author = Raynaldo Rivera|&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
[[category: Tutorials]]&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Qt4&amp;diff=299</id>
		<title>Tutorial - Setup Horde with Qt4</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Qt4&amp;diff=299"/>
				<updated>2008-08-07T21:24:16Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|  border=&amp;quot;0&amp;quot; &lt;br /&gt;
| {{ContentBlock|width=800|color=white&lt;br /&gt;
|content='''Here is a small example on how to use Horde with Qt4.''' &lt;br /&gt;
Keep in mind that the qt license is gpl and horde is lgpl and in order to use your app commercially you need to purchase a Qt license.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= glwidget.h|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef GLWIDGET_H_INCLUDED&lt;br /&gt;
&lt;br /&gt;
#define GLWIDGET_H_INCLUDED&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;QtOpenGL/qgl.h&amp;gt;&lt;br /&gt;
#include &amp;lt;QKeyEvent&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3DUtils.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class GLWidget : public QGLWidget{&lt;br /&gt;
    Q_OBJECT&lt;br /&gt;
&lt;br /&gt;
    public:&lt;br /&gt;
        GLWidget(QWidget *parent = 0);&lt;br /&gt;
        ~GLWidget();&lt;br /&gt;
        QSize minimumSizeHint() const;&lt;br /&gt;
        QSize sizeHint() const;&lt;br /&gt;
&lt;br /&gt;
    protected:&lt;br /&gt;
        void initializeGL();&lt;br /&gt;
        void paintGL();&lt;br /&gt;
        void resizeGL(int width,int height);&lt;br /&gt;
        void mousePressEvent(QMouseEvent *event);&lt;br /&gt;
        void mouseMoveEvent(QMouseEvent *event);&lt;br /&gt;
        void keyPressEvent(QKeyEvent *event);&lt;br /&gt;
&lt;br /&gt;
    private:&lt;br /&gt;
        ResHandle logoRes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#endif // GLWIDGET_H_INCLUDED&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now the cpp file. the paintGL() function is the game loop.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= glwidget.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;../include/glwidget.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
NodeHandle model = 0, cam = 0;&lt;br /&gt;
&lt;br /&gt;
GLWidget::GLWidget(QWidget *parent) : QGLWidget(parent){&lt;br /&gt;
    resize(sizeHint());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
GLWidget::~GLWidget(){&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
QSize GLWidget::minimumSizeHint() const{&lt;br /&gt;
    return QSize(50,50);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
QSize GLWidget::sizeHint() const{&lt;br /&gt;
    return QSize(800,600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::initializeGL(){&lt;br /&gt;
    if(!Horde3D::init()){&lt;br /&gt;
        Horde3DUtils::dumpMessages();&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::SceneGraph, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Geometry, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Animation, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Material, &amp;quot;materials&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Code, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Shader, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Texture2D, &amp;quot;textures&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::TextureCube, &amp;quot;textures&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Effect, &amp;quot;effects&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Pipeline, &amp;quot;pipelines&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
    ResHandle pipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;deferred.pipeline.xml&amp;quot;,0);&lt;br /&gt;
    ResHandle modelRes = Horde3D::addResource(ResourceTypes::SceneGraph,&amp;quot;charecter.scene.xml&amp;quot;,0);&lt;br /&gt;
    ResHandle animRes = Horde3D::addResource(ResourceTypes::Animation,&amp;quot;walk.anim.xml&amp;quot;,0);&lt;br /&gt;
    ResHandle fontRes = Horde3D::addResource(ResourceTypes::Material,&amp;quot;font.material.xml&amp;quot;,0);&lt;br /&gt;
&lt;br /&gt;
    logoRes = Horde3D::addResource(ResourceTypes::Material,&amp;quot;logo.material.xml&amp;quot;,0);&lt;br /&gt;
&lt;br /&gt;
    Horde3DUtils::loadResourcesFromDisk(&amp;quot;media&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    Horde3D::setOption( EngineOptions::LoadTextures, 1 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::TexCompression, 0 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::FastAnimation, 0 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::AnisotropyFactor, 8 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::ShadowMapSize, 2048 );&lt;br /&gt;
    Horde3D::setOption( EngineOptions::DebugViewMode,0.0f);&lt;br /&gt;
    model = Horde3D::addNodes(RootNode,modelRes);&lt;br /&gt;
&lt;br /&gt;
    //Horde3D::setupModelAnimStage(model,0,animRes,&amp;quot;&amp;quot;,true);&lt;br /&gt;
&lt;br /&gt;
    NodeHandle light = Horde3D::addLightNode(RootNode,&amp;quot;Light1&amp;quot;, 0,&amp;quot;LIGHTING&amp;quot;,&amp;quot;SHADOWMAP&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    Horde3D::setNodeTransform(light,0,2,0,0,00,0,1,1,1);&lt;br /&gt;
&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Radius, 50 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::FOV, 90 );&lt;br /&gt;
	Horde3D::setNodeParami( light, LightNodeParams::ShadowMapCount, 3 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::ShadowSplitLambda, 0.9f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::ShadowMapBias, 0.001f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_R, 0.9f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_G, 0.7f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_B, 0.75f );&lt;br /&gt;
&lt;br /&gt;
    cam = Horde3D::addCameraNode(RootNode,&amp;quot;Camera&amp;quot;,pipeRes);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::paintGL(){&lt;br /&gt;
    float curFps = 60;&lt;br /&gt;
    curFps = curFps + 10.0f * ( 1/curFps);&lt;br /&gt;
    Horde3D::setNodeTransform(model,curFps*10,0,0,0,0,0,1,1,1);&lt;br /&gt;
    Horde3D::showOverlay(0.75f,0,0,0,1,0,1,0,1,0.2f,1,1,0.75f,0.2f,0,1,7,logoRes);&lt;br /&gt;
    Horde3D::render(cam);&lt;br /&gt;
    Horde3D::clearOverlays();&lt;br /&gt;
    Horde3DUtils::dumpMessages();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::resizeGL(int width,int height){&lt;br /&gt;
    Horde3D::resize(0,0,800,600);&lt;br /&gt;
    Horde3D::setupCameraView(cam,45.0f,(float)width /height,0.1f,1000.0f);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::mousePressEvent(QMouseEvent *event){&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::mouseMoveEvent(QMouseEvent *event){&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::keyPressEvent(QKeyEvent *event){&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
The very simple main.cpp&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= main.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;qapplication.h&amp;gt;&lt;br /&gt;
#include &amp;lt;include/glwidget.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[])&lt;br /&gt;
{&lt;br /&gt;
    QApplication app(argc, argv);&lt;br /&gt;
    GLWidget widget;&lt;br /&gt;
&lt;br /&gt;
    widget.show();&lt;br /&gt;
&lt;br /&gt;
    return app.exec();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Here is the custom pro file customized for ubuntu and my box you will need to modify this to your paths.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= main.pro|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
######################################################################&lt;br /&gt;
# Automatically generated by qmake (2.01a) Mon Aug 4 18:39:01 2008&lt;br /&gt;
######################################################################&lt;br /&gt;
&lt;br /&gt;
TEMPLATE = app&lt;br /&gt;
TARGET = &lt;br /&gt;
DEPENDPATH += . include src&lt;br /&gt;
INCLUDEPATH += . include /usr/include/Horde3D1.0.0/Bindings/C++&lt;br /&gt;
LIBS += -L/usr/include/Horde3D1.0.0/Binaries/Linux_x86 -lHorde3D -lHorde3DUtils&lt;br /&gt;
&lt;br /&gt;
QT += opengl&lt;br /&gt;
&lt;br /&gt;
# Input&lt;br /&gt;
HEADERS += include/glwidget.h&lt;br /&gt;
SOURCES += main.cpp src/glwidget.cpp&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 05:28, 5 August 2008 (CEST)&lt;br /&gt;
}}&lt;br /&gt;
|  valign=&amp;quot;top&amp;quot; | {{Extension_Summary|&lt;br /&gt;
name = Horde With Qt4|&lt;br /&gt;
screenshot = H3DPlaceHolder.png|&lt;br /&gt;
description = This tutorial introduces the use of Horde3D with Qt4|&lt;br /&gt;
version = 1.0|&lt;br /&gt;
horde3dversion = 1.0 beta|&lt;br /&gt;
released = 2008-08-5|&lt;br /&gt;
author = Raynaldo Rivera|&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
[[category: Tutorials]]&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Horde3D_Wiki:Community_portal&amp;diff=298</id>
		<title>Horde3D Wiki:Community portal</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Horde3D_Wiki:Community_portal&amp;diff=298"/>
				<updated>2008-08-07T21:23:18Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOEDITSECTION__{{ContentBlock|width=800|color=orange&lt;br /&gt;
|content= '''The community portal section of the Horde3D wiki contains community contributed articles that are not part of the official documentation. Feel free to add articles to our wiki or links to external tutorials.'''}}&lt;br /&gt;
{{SpacerBlock}}&lt;br /&gt;
{{ContentBlock|width=800&lt;br /&gt;
|header=Horde3D is a cross-platform graphics engine. The currently supported platform are Windows, Linux and Mac OS X.&lt;br /&gt;
|content={{!!}}&lt;br /&gt;
==How-To setup a Horde3D Development Environment==&lt;br /&gt;
*[[Horde3D Development Environment for Windows]]&lt;br /&gt;
*[[Horde3D Development Environment for Linux]]&lt;br /&gt;
*[[Horde3D Development Environment for Mac OS X]]&lt;br /&gt;
&lt;br /&gt;
*[[Horde3D Development Environment from SVN]]&lt;br /&gt;
&lt;br /&gt;
==Tutorials==&lt;br /&gt;
[[Category: Tutorials]]&lt;br /&gt;
&lt;br /&gt;
Fell free to write your tutorials here, for the benefit of the whole community. &lt;br /&gt;
===Beginner===&lt;br /&gt;
#[[Tutorial - Hello World]] - In this section we will create a simple application that loads a character and animates it using a walk cycle.&lt;br /&gt;
#[[Tutorial - Picking]] - In this section we will demonstrate picking the node under the mouse cursor&lt;br /&gt;
#[[Tutorial - Simple HUD]] - How to use showOverlay to create a simple HUD.&lt;br /&gt;
#[[Tutorial - Setup Horde with SDL]]   - How to Setup Horde with SDL.&lt;br /&gt;
#[[Tutorial - Setup Horde with Qt4]]   - How to Setup Horde with Qt4.&lt;br /&gt;
#[[Tutorial - Setup Horde with Gtkmm]] - How to Setup Horde with Gtkmm&lt;br /&gt;
===Intermediate===&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
&lt;br /&gt;
==Techniques==&lt;br /&gt;
[[Category: Techniques]]&lt;br /&gt;
&lt;br /&gt;
===Shading===&lt;br /&gt;
#[[Shading Technique - Dot Product Detail Texturing]] - Using the dot product of vectors and signed textures for high frequency detail&lt;br /&gt;
#[[Shading Technique - Palette Coloring]] - Quick and dirty palette recoloration of objects&lt;br /&gt;
#[[Shading Technique - Gloss Mapping]] - Mask which areas of an object have specular highlights&lt;br /&gt;
#[[Shading Technique - Glow Mapping]] - Allow areas on an object to emit a strong glowing highlight&lt;br /&gt;
&lt;br /&gt;
==Content Import==&lt;br /&gt;
[[Category: Content Import]]&lt;br /&gt;
#[[Collada - 3DS Max and Maya]] - Exporting from 3D Studio Max and Maya. &lt;br /&gt;
#[[Collada - Modo]] - Exporting from Modo. &lt;br /&gt;
#[[Collada - Blender]] - Exporting from Blender.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Gtkmm&amp;diff=297</id>
		<title>Tutorial - Setup Horde with Gtkmm</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Gtkmm&amp;diff=297"/>
				<updated>2008-08-07T21:21:27Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: New page: {|  border=&amp;quot;0&amp;quot;  | {{ContentBlock|width=800|color=white |content='''Here is a small example on how to use Horde with Gtkmm.'''  This is a small tutorial on how to setup Horde with Gtk+ usin...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|  border=&amp;quot;0&amp;quot; &lt;br /&gt;
| {{ContentBlock|width=800|color=white&lt;br /&gt;
|content='''Here is a small example on how to use Horde with Gtkmm.''' &lt;br /&gt;
This is a small tutorial on how to setup Horde with Gtk+ using Gtkmm and Gtkglextmm.&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cHordeWidget.hpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
#define CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt; &lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3DUtils.h&amp;gt;&lt;br /&gt;
#include &amp;lt;cstdlib&amp;gt;&lt;br /&gt;
//We include the gtkmm header&lt;br /&gt;
#include &amp;lt;gtkmm.h&amp;gt;&lt;br /&gt;
//Now we include the gtkglmm header&lt;br /&gt;
#include &amp;lt;gtkglmm.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//We declare the cHordeWidget class and it inherits the Gtk::GL::DrawingArea class&lt;br /&gt;
class cHordeWidget : public Gtk::GL::DrawingArea{&lt;br /&gt;
    public:&lt;br /&gt;
        cHordeWidget();&lt;br /&gt;
        virtual ~cHordeWidget();&lt;br /&gt;
&lt;br /&gt;
    protected:&lt;br /&gt;
        virtual void on_realize();&lt;br /&gt;
        virtual bool on_configure_event(GdkEventConfigure* event);&lt;br /&gt;
        virtual bool on_expose_event(GdkEventExpose* event);&lt;br /&gt;
    private:&lt;br /&gt;
        ResHandle logoRes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif // CHORDEWIDGET_HPP_INCLUDED&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now for the cHordeWidget.cpp *Read the comments*&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= cHordeWidget.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;../include/cHordeWidget.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
NodeHandle model = 0, cam = 0;&lt;br /&gt;
&lt;br /&gt;
cHordeWidget::cHordeWidget(){&lt;br /&gt;
&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Config&amp;gt; glconfig;&lt;br /&gt;
    //We pick are opengl config options.&lt;br /&gt;
    glconfig = Gdk::GL::Config::create(Gdk::GL::MODE_RGB | Gdk::GL::MODE_DEPTH | Gdk::GL::MODE_DOUBLE);&lt;br /&gt;
    //We set are options here.&lt;br /&gt;
    set_gl_capability(glconfig);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
cHordeWidget::~cHordeWidget(){&lt;br /&gt;
    //we release the Horde3D engine here&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cHordeWidget::on_realize(){&lt;br /&gt;
    //We must call this base class before anything else&lt;br /&gt;
    Gtk::GL::DrawingArea::on_realize();&lt;br /&gt;
&lt;br /&gt;
    //Get Our opengl window must do&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
&lt;br /&gt;
    //Begin working with the gl context everything we do will go under here.&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
    //Resize our Horde3D screen&lt;br /&gt;
    Horde3D::resize(0,0,800,600);&lt;br /&gt;
    //set camera view&lt;br /&gt;
    Horde3D::setupCameraView(cam,45.0f,(float)800/600,0.1f,1000.0f);&lt;br /&gt;
    //end opengl&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool cHordeWidget::on_configure_event(GdkEventConfigure* event){&lt;br /&gt;
&lt;br /&gt;
    //get gl window&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
    //Begin working with the gl context everything we do will go under here.&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
&lt;br /&gt;
    Horde3D::init();&lt;br /&gt;
&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::SceneGraph, &amp;quot;models&amp;quot; );&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::Geometry, &amp;quot;models&amp;quot; );&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::Animation, &amp;quot;models&amp;quot; );&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::Material, &amp;quot;materials&amp;quot; );&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::Code, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::Shader, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::Texture2D, &amp;quot;textures&amp;quot; );&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::TextureCube, &amp;quot;textures&amp;quot; );&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::Effect, &amp;quot;effects&amp;quot; );&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::Pipeline, &amp;quot;pipelines&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
    ResHandle pipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;deferred.pipeline.xml&amp;quot;,0);&lt;br /&gt;
    ResHandle modelRes = Horde3D::addResource(ResourceTypes::SceneGraph,&amp;quot;charecter.scene.xml&amp;quot;,0);&lt;br /&gt;
    ResHandle animRes = Horde3D::addResource(ResourceTypes::Animation,&amp;quot;walk.anim.xml&amp;quot;,0);&lt;br /&gt;
    ResHandle fontRes = Horde3D::addResource(ResourceTypes::Material,&amp;quot;font.material.xml&amp;quot;,0);&lt;br /&gt;
&lt;br /&gt;
    logoRes = Horde3D::addResource(ResourceTypes::Material,&amp;quot;logo.material.xml&amp;quot;,0);&lt;br /&gt;
&lt;br /&gt;
    Horde3DUtils::loadResourcesFromDisk(&amp;quot;media&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    Horde3D::setOption( EngineOptions::LoadTextures, 1 );&lt;br /&gt;
    Horde3D::setOption( EngineOptions::TexCompression, 0 );&lt;br /&gt;
    Horde3D::setOption( EngineOptions::FastAnimation, 0 );&lt;br /&gt;
    Horde3D::setOption( EngineOptions::AnisotropyFactor, 8 );&lt;br /&gt;
    Horde3D::setOption( EngineOptions::ShadowMapSize, 2048 );&lt;br /&gt;
    Horde3D::setOption( EngineOptions::DebugViewMode,0.0f);&lt;br /&gt;
    model = Horde3D::addNodes(RootNode,modelRes);&lt;br /&gt;
&lt;br /&gt;
    //Horde3D::setupModelAnimStage(model,0,animRes,&amp;quot;&amp;quot;,true);&lt;br /&gt;
&lt;br /&gt;
    NodeHandle light = Horde3D::addLightNode(RootNode,&amp;quot;Light1&amp;quot;, 0,&amp;quot;LIGHTING&amp;quot;,&amp;quot;SHADOWMAP&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    Horde3D::setNodeTransform(light,0,2,0,0,00,0,1,1,1);&lt;br /&gt;
&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Radius, 50 );&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::FOV, 90 );&lt;br /&gt;
    Horde3D::setNodeParami( light, LightNodeParams::ShadowMapCount, 3 );&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowSplitLambda, 0.9f );&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowMapBias, 0.001f );&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_R, 0.9f );&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_G, 0.7f );&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_B, 0.75f );&lt;br /&gt;
&lt;br /&gt;
    cam = Horde3D::addCameraNode(RootNode,&amp;quot;Camera&amp;quot;,pipeRes);&lt;br /&gt;
&lt;br /&gt;
    Horde3DUtils::dumpMessages();&lt;br /&gt;
    //end opengl&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
//This on_expose_event is are game loop everything game related goes here&lt;br /&gt;
bool cHordeWidget::on_expose_event(GdkEventExpose* event){&lt;br /&gt;
    float curFps = 60;&lt;br /&gt;
    curFps = curFps + 10.0f * ( 1/curFps);&lt;br /&gt;
    &lt;br /&gt;
    //get gl::window&lt;br /&gt;
    Glib::RefPtr&amp;lt;Gdk::GL::Window&amp;gt; glwindow = get_gl_window();&lt;br /&gt;
    &lt;br /&gt;
    //Begin working with the gl context everything we do will go under here.&lt;br /&gt;
    glwindow-&amp;gt;gl_begin(get_gl_context());&lt;br /&gt;
&lt;br /&gt;
    Horde3D::setNodeTransform(model,curFps*10,0,0,0,0,0,1,1,1);&lt;br /&gt;
    Horde3D::showOverlay(0.75f,0,0,0,1,0,1,0,1,0.2f,1,1,0.75f,0.2f,0,1,7,logoRes);&lt;br /&gt;
    Horde3D::render(cam);&lt;br /&gt;
    Horde3D::clearOverlays();&lt;br /&gt;
&lt;br /&gt;
    //end opengl&lt;br /&gt;
    glwindow-&amp;gt;gl_end();&lt;br /&gt;
    //Since we have a double buffer opengl context we must swap them here&lt;br /&gt;
    glwindow-&amp;gt;swap_buffers();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Finnaly the main.cpp *Read the Comments*&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= main.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;gtkmm.h&amp;gt;&lt;br /&gt;
//Include are custom widget&lt;br /&gt;
#include &amp;quot;include/cHordeWidget.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]){&lt;br /&gt;
    //Init Gtk+&lt;br /&gt;
    Gtk::Main init (argc, argv);&lt;br /&gt;
    //Init Gtk+ opengl&lt;br /&gt;
    Gtk::GL::init (argc, argv);&lt;br /&gt;
    //Create our Window object&lt;br /&gt;
    Gtk::Window window;&lt;br /&gt;
    //Set our window title&lt;br /&gt;
    window.set_title (&amp;quot;Horde3D In Gtk+ Window&amp;quot;);&lt;br /&gt;
    //Create our cHordeWidget&lt;br /&gt;
    cHordeWidget drawing;&lt;br /&gt;
    //Set the cHordeWidgets size&lt;br /&gt;
    drawing.set_size_request(800, 600);&lt;br /&gt;
    //Add the cHordeWidget to our window&lt;br /&gt;
    window.add (drawing);&lt;br /&gt;
    //Show our cHordeWidget. All widgets are invisible by default.&lt;br /&gt;
    window.show_all ();&lt;br /&gt;
    //Run our window&lt;br /&gt;
    Gtk::Main::run (window);&lt;br /&gt;
    //Just a return statement&lt;br /&gt;
    return EXIT_SUCCESS;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 23:21, 7 August 2008 (CEST)&lt;br /&gt;
}}&lt;br /&gt;
|  valign=&amp;quot;top&amp;quot; | {{Extension_Summary|&lt;br /&gt;
name = Horde With Gtkmm|&lt;br /&gt;
screenshot = H3DPlaceHolder.png|&lt;br /&gt;
description = This tutorial introduces the use of Horde3D with Gtkmm|&lt;br /&gt;
version = 1.0|&lt;br /&gt;
horde3dversion = 1.0 beta|&lt;br /&gt;
released = 2008-07-8|&lt;br /&gt;
author = Raynaldo Rivera|&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
[[category: Tutorials]]&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Qt4&amp;diff=285</id>
		<title>Tutorial - Setup Horde with Qt4</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Qt4&amp;diff=285"/>
				<updated>2008-08-05T20:46:16Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: Setup Horde with Qt4 moved to Tutorial - Setup Horde with Qt4&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|  border=&amp;quot;0&amp;quot; &lt;br /&gt;
| {{ContentBlock|width=800|color=white&lt;br /&gt;
|content='''Here is a small example on how to use Horde with Qt4.''' &lt;br /&gt;
Keep in mind that the qt license is gpl and horde is lgpl and in order to use your app commercially you need to purchase a Qt license.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= glwidget.h|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef GLWIDGET_H_INCLUDED&lt;br /&gt;
&lt;br /&gt;
#define GLWIDGET_H_INCLUDED&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;QtOpenGL/qgl.h&amp;gt;&lt;br /&gt;
#include &amp;lt;QKeyEvent&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3DUtils.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class GLWidget : public QGLWidget{&lt;br /&gt;
    Q_OBJECT&lt;br /&gt;
&lt;br /&gt;
    public:&lt;br /&gt;
        GLWidget(QWidget *parent = 0);&lt;br /&gt;
        ~GLWidget();&lt;br /&gt;
        QSize minimumSizeHint() const;&lt;br /&gt;
        QSize sizeHint() const;&lt;br /&gt;
&lt;br /&gt;
    protected:&lt;br /&gt;
        void initializeGL();&lt;br /&gt;
        void paintGL();&lt;br /&gt;
        void resizeGL(int width,int height);&lt;br /&gt;
        void mousePressEvent(QMouseEvent *event);&lt;br /&gt;
        void mouseMoveEvent(QMouseEvent *event);&lt;br /&gt;
        void keyPressEvent(QKeyEvent *event);&lt;br /&gt;
&lt;br /&gt;
    private:&lt;br /&gt;
        ResHandle logoRes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#endif // GLWIDGET_H_INCLUDED&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now the cpp file. the paintGL() function is the game loop.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= glwidget.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;../include/glwidget.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
NodeHandle model = 0, cam = 0;&lt;br /&gt;
&lt;br /&gt;
GLWidget::GLWidget(QWidget *parent) : QGLWidget(parent){&lt;br /&gt;
    resize(sizeHint());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
GLWidget::~GLWidget(){&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
QSize GLWidget::minimumSizeHint() const{&lt;br /&gt;
    return QSize(50,50);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
QSize GLWidget::sizeHint() const{&lt;br /&gt;
    return QSize(800,600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::initializeGL(){&lt;br /&gt;
    if(!Horde3D::init()){&lt;br /&gt;
        Horde3DUtils::dumpMessages();&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::SceneGraph, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Geometry, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Animation, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Material, &amp;quot;materials&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Code, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Shader, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Texture2D, &amp;quot;textures&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::TextureCube, &amp;quot;textures&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Effect, &amp;quot;effects&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Pipeline, &amp;quot;pipelines&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
    ResHandle pipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;deferred.pipeline.xml&amp;quot;,0);&lt;br /&gt;
    ResHandle modelRes = Horde3D::addResource(ResourceTypes::SceneGraph,&amp;quot;charecter.scene.xml&amp;quot;,0);&lt;br /&gt;
    ResHandle animRes = Horde3D::addResource(ResourceTypes::Animation,&amp;quot;walk.anim.xml&amp;quot;,0);&lt;br /&gt;
    ResHandle fontRes = Horde3D::addResource(ResourceTypes::Material,&amp;quot;font.material.xml&amp;quot;,0);&lt;br /&gt;
&lt;br /&gt;
    logoRes = Horde3D::addResource(ResourceTypes::Material,&amp;quot;logo.material.xml&amp;quot;,0);&lt;br /&gt;
&lt;br /&gt;
    Horde3DUtils::loadResourcesFromDisk(&amp;quot;media&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    Horde3D::setOption( EngineOptions::LoadTextures, 1 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::TexCompression, 0 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::FastAnimation, 0 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::AnisotropyFactor, 8 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::ShadowMapSize, 2048 );&lt;br /&gt;
    Horde3D::setOption( EngineOptions::DebugViewMode,0.0f);&lt;br /&gt;
    model = Horde3D::addNodes(RootNode,modelRes);&lt;br /&gt;
&lt;br /&gt;
    //Horde3D::setupModelAnimStage(model,0,animRes,&amp;quot;&amp;quot;,true);&lt;br /&gt;
&lt;br /&gt;
    NodeHandle light = Horde3D::addLightNode(RootNode,&amp;quot;Light1&amp;quot;, 0,&amp;quot;LIGHTING&amp;quot;,&amp;quot;SHADOWMAP&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    Horde3D::setNodeTransform(light,0,2,0,0,00,0,1,1,1);&lt;br /&gt;
&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Radius, 50 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::FOV, 90 );&lt;br /&gt;
	Horde3D::setNodeParami( light, LightNodeParams::ShadowMapCount, 3 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::ShadowSplitLambda, 0.9f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::ShadowMapBias, 0.001f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_R, 0.9f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_G, 0.7f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_B, 0.75f );&lt;br /&gt;
&lt;br /&gt;
    cam = Horde3D::addCameraNode(RootNode,&amp;quot;Camera&amp;quot;,pipeRes);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::paintGL(){&lt;br /&gt;
    float curFps = 60;&lt;br /&gt;
    curFps = curFps + 10.0f * ( 1/curFps);&lt;br /&gt;
    Horde3D::setNodeTransform(model,curFps*10,0,0,0,0,0,1,1,1);&lt;br /&gt;
    Horde3D::showOverlay(0.75f,0,0,0,1,0,1,0,1,0.2f,1,1,0.75f,0.2f,0,1,7,logoRes);&lt;br /&gt;
    Horde3D::render(cam);&lt;br /&gt;
    Horde3D::clearOverlays();&lt;br /&gt;
    Horde3DUtils::dumpMessages();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::resizeGL(int width,int height){&lt;br /&gt;
    Horde3D::resize(0,0,800,600);&lt;br /&gt;
    Horde3D::setupCameraView(cam,45.0f,(float)width /height,0.1f,1000.0f);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::mousePressEvent(QMouseEvent *event){&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::mouseMoveEvent(QMouseEvent *event){&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::keyPressEvent(QKeyEvent *event){&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
The very simple main.cpp&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= main.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;qapplication.h&amp;gt;&lt;br /&gt;
#include &amp;lt;include/glwidget.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[])&lt;br /&gt;
{&lt;br /&gt;
    QApplication app(argc, argv);&lt;br /&gt;
    GLWidget widget;&lt;br /&gt;
&lt;br /&gt;
    widget.show();&lt;br /&gt;
&lt;br /&gt;
    return app.exec();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Here is the custom pro file customized for ubuntu and my box you will need to modify this to your paths.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= main.pro|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
######################################################################&lt;br /&gt;
# Automatically generated by qmake (2.01a) Mon Aug 4 18:39:01 2008&lt;br /&gt;
######################################################################&lt;br /&gt;
&lt;br /&gt;
TEMPLATE = app&lt;br /&gt;
TARGET = &lt;br /&gt;
DEPENDPATH += . include src&lt;br /&gt;
INCLUDEPATH += . include /usr/include/Horde3D1.0.0/Bindings/C++&lt;br /&gt;
LIBS += -L/usr/include/Horde3D1.0.0/Binaries/Linux_x86 -lHorde3D -lHorde3DUtils&lt;br /&gt;
&lt;br /&gt;
QT += opengl&lt;br /&gt;
&lt;br /&gt;
# Input&lt;br /&gt;
HEADERS += include/glwidget.h&lt;br /&gt;
SOURCES += main.cpp src/glwidget.cpp&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 05:28, 1 August 2008 (CEST)&lt;br /&gt;
}}&lt;br /&gt;
|  valign=&amp;quot;top&amp;quot; | {{Extension_Summary|&lt;br /&gt;
name = Horde With Qt4|&lt;br /&gt;
screenshot = H3DPlaceHolder.png|&lt;br /&gt;
description = This tutorial introduces the use of Horde3D with Qt4|&lt;br /&gt;
version = 1.0|&lt;br /&gt;
horde3dversion = 1.0 beta|&lt;br /&gt;
released = 2008-08-5|&lt;br /&gt;
author = Raynaldo Rivera|&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
[[category: Tutorials]]&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Setup_Horde_with_Qt4&amp;diff=286</id>
		<title>Setup Horde with Qt4</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Setup_Horde_with_Qt4&amp;diff=286"/>
				<updated>2008-08-05T20:46:16Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: Setup Horde with Qt4 moved to Tutorial - Setup Horde with Qt4&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Tutorial - Setup Horde with Qt4]]&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Horde3D_Wiki:Community_portal&amp;diff=284</id>
		<title>Horde3D Wiki:Community portal</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Horde3D_Wiki:Community_portal&amp;diff=284"/>
				<updated>2008-08-05T20:42:42Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOEDITSECTION__{{ContentBlock|width=800|color=orange&lt;br /&gt;
|content= '''The community portal section of the Horde3D wiki contains community contributed articles that are not part of the official documentation. Feel free to add articles to our wiki or links to external tutorials.'''}}&lt;br /&gt;
{{SpacerBlock}}&lt;br /&gt;
{{ContentBlock|width=800&lt;br /&gt;
|header=Horde3D is a cross-platform graphics engine. The currently supported platform are Windows, Linux and Mac OS X.&lt;br /&gt;
|content={{!!}}&lt;br /&gt;
==How-To setup a Horde3D Development Environment==&lt;br /&gt;
*[[Horde3D Development Environment for Windows]]&lt;br /&gt;
*[[Horde3D Development Environment for Linux]]&lt;br /&gt;
*[[Horde3D Development Environment for Mac OS X]]&lt;br /&gt;
&lt;br /&gt;
*[[Horde3D Development Environment from SVN]]&lt;br /&gt;
&lt;br /&gt;
==Tutorials==&lt;br /&gt;
[[Category: Tutorials]]&lt;br /&gt;
&lt;br /&gt;
Fell free to write your tutorials here, for the benefit of the whole community. &lt;br /&gt;
===Beginner===&lt;br /&gt;
#[[Tutorial - Hello World]] - In this section we will create a simple application that loads a character and animates it using a walk cycle.&lt;br /&gt;
#[[Tutorial - Picking]] - In this section we will demonstrate picking the node under the mouse cursor&lt;br /&gt;
#[[Tutorial - Simple HUD]] - How to use showOverlay to create a simple HUD.&lt;br /&gt;
#[[Tutorial - Setup Horde with SDL]] - How to Setup Horde with SDL.&lt;br /&gt;
#[[Tutorial - Setup Horde with Qt4]] - How to Setup Horde with Qt4.&lt;br /&gt;
===Intermediate===&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
&lt;br /&gt;
==Techniques==&lt;br /&gt;
[[Category: Techniques]]&lt;br /&gt;
&lt;br /&gt;
===Shading===&lt;br /&gt;
#[[Shading Technique - Dot Product Detail Texturing]] - Using the dot product of vectors and signed textures for high frequency detail&lt;br /&gt;
#[[Shading Technique - Palette Coloring]] - Quick and dirty palette recoloration of objects&lt;br /&gt;
&lt;br /&gt;
==Content Import==&lt;br /&gt;
[[Category: Content Import]]&lt;br /&gt;
#[[Collada - 3DS Max and Maya]] - Exporting from 3D Studio Max and Maya. &lt;br /&gt;
#[[Collada - Modo]] - Exporting from Modo. &lt;br /&gt;
#[[Collada - Blender]] - Exporting from Blender.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Qt4&amp;diff=283</id>
		<title>Tutorial - Setup Horde with Qt4</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_Qt4&amp;diff=283"/>
				<updated>2008-08-05T20:41:43Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: New page: {|  border=&amp;quot;0&amp;quot;  | {{ContentBlock|width=800|color=white |content='''Here is a small example on how to use Horde with Qt4.'''  Keep in mind that the qt license is gpl and horde is lgpl and i...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|  border=&amp;quot;0&amp;quot; &lt;br /&gt;
| {{ContentBlock|width=800|color=white&lt;br /&gt;
|content='''Here is a small example on how to use Horde with Qt4.''' &lt;br /&gt;
Keep in mind that the qt license is gpl and horde is lgpl and in order to use your app commercially you need to purchase a Qt license.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= glwidget.h|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef GLWIDGET_H_INCLUDED&lt;br /&gt;
&lt;br /&gt;
#define GLWIDGET_H_INCLUDED&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;QtOpenGL/qgl.h&amp;gt;&lt;br /&gt;
#include &amp;lt;QKeyEvent&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3DUtils.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class GLWidget : public QGLWidget{&lt;br /&gt;
    Q_OBJECT&lt;br /&gt;
&lt;br /&gt;
    public:&lt;br /&gt;
        GLWidget(QWidget *parent = 0);&lt;br /&gt;
        ~GLWidget();&lt;br /&gt;
        QSize minimumSizeHint() const;&lt;br /&gt;
        QSize sizeHint() const;&lt;br /&gt;
&lt;br /&gt;
    protected:&lt;br /&gt;
        void initializeGL();&lt;br /&gt;
        void paintGL();&lt;br /&gt;
        void resizeGL(int width,int height);&lt;br /&gt;
        void mousePressEvent(QMouseEvent *event);&lt;br /&gt;
        void mouseMoveEvent(QMouseEvent *event);&lt;br /&gt;
        void keyPressEvent(QKeyEvent *event);&lt;br /&gt;
&lt;br /&gt;
    private:&lt;br /&gt;
        ResHandle logoRes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#endif // GLWIDGET_H_INCLUDED&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Now the cpp file. the paintGL() function is the game loop.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= glwidget.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;../include/glwidget.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
NodeHandle model = 0, cam = 0;&lt;br /&gt;
&lt;br /&gt;
GLWidget::GLWidget(QWidget *parent) : QGLWidget(parent){&lt;br /&gt;
    resize(sizeHint());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
GLWidget::~GLWidget(){&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
QSize GLWidget::minimumSizeHint() const{&lt;br /&gt;
    return QSize(50,50);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
QSize GLWidget::sizeHint() const{&lt;br /&gt;
    return QSize(800,600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::initializeGL(){&lt;br /&gt;
    if(!Horde3D::init()){&lt;br /&gt;
        Horde3DUtils::dumpMessages();&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    Horde3DUtils::setResourcePath( ResourceTypes::SceneGraph, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Geometry, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Animation, &amp;quot;models&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Material, &amp;quot;materials&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Code, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Shader, &amp;quot;shaders&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Texture2D, &amp;quot;textures&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::TextureCube, &amp;quot;textures&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Effect, &amp;quot;effects&amp;quot; );&lt;br /&gt;
	Horde3DUtils::setResourcePath( ResourceTypes::Pipeline, &amp;quot;pipelines&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
    ResHandle pipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;deferred.pipeline.xml&amp;quot;,0);&lt;br /&gt;
    ResHandle modelRes = Horde3D::addResource(ResourceTypes::SceneGraph,&amp;quot;charecter.scene.xml&amp;quot;,0);&lt;br /&gt;
    ResHandle animRes = Horde3D::addResource(ResourceTypes::Animation,&amp;quot;walk.anim.xml&amp;quot;,0);&lt;br /&gt;
    ResHandle fontRes = Horde3D::addResource(ResourceTypes::Material,&amp;quot;font.material.xml&amp;quot;,0);&lt;br /&gt;
&lt;br /&gt;
    logoRes = Horde3D::addResource(ResourceTypes::Material,&amp;quot;logo.material.xml&amp;quot;,0);&lt;br /&gt;
&lt;br /&gt;
    Horde3DUtils::loadResourcesFromDisk(&amp;quot;media&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    Horde3D::setOption( EngineOptions::LoadTextures, 1 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::TexCompression, 0 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::FastAnimation, 0 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::AnisotropyFactor, 8 );&lt;br /&gt;
	Horde3D::setOption( EngineOptions::ShadowMapSize, 2048 );&lt;br /&gt;
    Horde3D::setOption( EngineOptions::DebugViewMode,0.0f);&lt;br /&gt;
    model = Horde3D::addNodes(RootNode,modelRes);&lt;br /&gt;
&lt;br /&gt;
    //Horde3D::setupModelAnimStage(model,0,animRes,&amp;quot;&amp;quot;,true);&lt;br /&gt;
&lt;br /&gt;
    NodeHandle light = Horde3D::addLightNode(RootNode,&amp;quot;Light1&amp;quot;, 0,&amp;quot;LIGHTING&amp;quot;,&amp;quot;SHADOWMAP&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    Horde3D::setNodeTransform(light,0,2,0,0,00,0,1,1,1);&lt;br /&gt;
&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Radius, 50 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::FOV, 90 );&lt;br /&gt;
	Horde3D::setNodeParami( light, LightNodeParams::ShadowMapCount, 3 );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::ShadowSplitLambda, 0.9f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::ShadowMapBias, 0.001f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_R, 0.9f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_G, 0.7f );&lt;br /&gt;
	Horde3D::setNodeParamf( light, LightNodeParams::Col_B, 0.75f );&lt;br /&gt;
&lt;br /&gt;
    cam = Horde3D::addCameraNode(RootNode,&amp;quot;Camera&amp;quot;,pipeRes);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::paintGL(){&lt;br /&gt;
    float curFps = 60;&lt;br /&gt;
    curFps = curFps + 10.0f * ( 1/curFps);&lt;br /&gt;
    Horde3D::setNodeTransform(model,curFps*10,0,0,0,0,0,1,1,1);&lt;br /&gt;
    Horde3D::showOverlay(0.75f,0,0,0,1,0,1,0,1,0.2f,1,1,0.75f,0.2f,0,1,7,logoRes);&lt;br /&gt;
    Horde3D::render(cam);&lt;br /&gt;
    Horde3D::clearOverlays();&lt;br /&gt;
    Horde3DUtils::dumpMessages();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::resizeGL(int width,int height){&lt;br /&gt;
    Horde3D::resize(0,0,800,600);&lt;br /&gt;
    Horde3D::setupCameraView(cam,45.0f,(float)width /height,0.1f,1000.0f);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::mousePressEvent(QMouseEvent *event){&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::mouseMoveEvent(QMouseEvent *event){&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GLWidget::keyPressEvent(QKeyEvent *event){&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
The very simple main.cpp&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= main.cpp|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;qapplication.h&amp;gt;&lt;br /&gt;
#include &amp;lt;include/glwidget.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[])&lt;br /&gt;
{&lt;br /&gt;
    QApplication app(argc, argv);&lt;br /&gt;
    GLWidget widget;&lt;br /&gt;
&lt;br /&gt;
    widget.show();&lt;br /&gt;
&lt;br /&gt;
    return app.exec();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Here is the custom pro file customized for ubuntu and my box you will need to modify this to your paths.&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= main.pro|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
######################################################################&lt;br /&gt;
# Automatically generated by qmake (2.01a) Mon Aug 4 18:39:01 2008&lt;br /&gt;
######################################################################&lt;br /&gt;
&lt;br /&gt;
TEMPLATE = app&lt;br /&gt;
TARGET = &lt;br /&gt;
DEPENDPATH += . include src&lt;br /&gt;
INCLUDEPATH += . include /usr/include/Horde3D1.0.0/Bindings/C++&lt;br /&gt;
LIBS += -L/usr/include/Horde3D1.0.0/Binaries/Linux_x86 -lHorde3D -lHorde3DUtils&lt;br /&gt;
&lt;br /&gt;
QT += opengl&lt;br /&gt;
&lt;br /&gt;
# Input&lt;br /&gt;
HEADERS += include/glwidget.h&lt;br /&gt;
SOURCES += main.cpp src/glwidget.cpp&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 05:28, 1 August 2008 (CEST)&lt;br /&gt;
}}&lt;br /&gt;
|  valign=&amp;quot;top&amp;quot; | {{Extension_Summary|&lt;br /&gt;
name = Horde With Qt4|&lt;br /&gt;
screenshot = H3DPlaceHolder.png|&lt;br /&gt;
description = This tutorial introduces the use of Horde3D with Qt4|&lt;br /&gt;
version = 1.0|&lt;br /&gt;
horde3dversion = 1.0 beta|&lt;br /&gt;
released = 2008-08-5|&lt;br /&gt;
author = Raynaldo Rivera|&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
[[category: Tutorials]]&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=282</id>
		<title>Tutorial - Setup Horde with SDL</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=282"/>
				<updated>2008-08-01T04:35:32Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|  border=&amp;quot;0&amp;quot; &lt;br /&gt;
| {{ContentBlock|width=800|color=white&lt;br /&gt;
|content='''Here is a small example on how to use Horde with sdl.''' &lt;br /&gt;
Its a simple window that closes when the x is clicked&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= Simple SDL Frame|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SDL.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* args[]){&lt;br /&gt;
    //Creates are bool value for the while loop.&lt;br /&gt;
    bool running = true;&lt;br /&gt;
  &lt;br /&gt;
    //Inits sdl with only the video extention.&lt;br /&gt;
    SDL_Init(SDL_INIT_VIDEO);&lt;br /&gt;
    //Sets are window Caption&lt;br /&gt;
    SDL_WM_SetCaption(&amp;quot;Simple SDL Frame&amp;quot;,NULL);&lt;br /&gt;
    //Sets the sdl video mode width and height as well has creates are opengl context.&lt;br /&gt;
    SDL_SetVideoMode(800,600,32,SDL_OPENGL);&lt;br /&gt;
    //Creates Our Event Reciver&lt;br /&gt;
    SDL_Event event;&lt;br /&gt;
    &lt;br /&gt;
    //Inits Horde3D&lt;br /&gt;
    Horde3D::init();&lt;br /&gt;
    &lt;br /&gt;
    //Sizes the Horde3D View&lt;br /&gt;
    Horde3D::resize( 0, 0, 800, 600 );&lt;br /&gt;
&lt;br /&gt;
    // Add pipeline resource&lt;br /&gt;
    ResHandle pipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;standard.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add model resource&lt;br /&gt;
    ResHandle modelRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;character.scene.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add animation resource&lt;br /&gt;
    ResHandle animRes = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;walk.anim.xml&amp;quot;, 0 );&lt;br /&gt;
    // Load added resources&lt;br /&gt;
    Horde3DUtils::loadResourcesFromDisk( &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add model to scene&lt;br /&gt;
    model = Horde3D::addNodes( RootNode, modelRes );&lt;br /&gt;
    // Apply animation&lt;br /&gt;
    Horde3D::setupModelAnimStage( model, 0, animRes, &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add light source&lt;br /&gt;
    NodeHandle light = Horde3D::addLightNode( RootNode, &amp;quot;Light1&amp;quot;, 0, &amp;quot;LIGHTING&amp;quot;, &amp;quot;SHADOWMAP&amp;quot; );&lt;br /&gt;
    // Set light position and radius&lt;br /&gt;
    Horde3D::setNodeTransform( light, 0, 20, 0, 0, 0, 0, 1, 1, 1 );&lt;br /&gt;
&lt;br /&gt;
    //Sets the lightnodes radius&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Radius, 50 );&lt;br /&gt;
    //Sets the lightnodes Field of view&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::FOV, 90 );&lt;br /&gt;
    //Sets the lightnodes ShadowMapCOunt&lt;br /&gt;
    Horde3D::setNodeParami( light, LightNodeParams::ShadowMapCount, 3 );&lt;br /&gt;
    //Sets the lightnodes ShadowSplitLambda&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowSplitLambda, 0.9f );&lt;br /&gt;
    //Sets the lightnodes ShadowMapBias&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowMapBias, 0.001f );&lt;br /&gt;
    //Sets the lightnodes red value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_R, 0.9f );&lt;br /&gt;
    //Sets the lightnodes green value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_G, 0.7f );&lt;br /&gt;
    //Sets the lightnodes blue value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_B, 0.75f );    &lt;br /&gt;
	&lt;br /&gt;
    // Add camera&lt;br /&gt;
    cam = Horde3D::addCameraNode( RootNode, &amp;quot;Camera&amp;quot;, pipeRes );&lt;br /&gt;
&lt;br /&gt;
    // Our While loop&lt;br /&gt;
    while(running == true){&lt;br /&gt;
      static float t = 0;&lt;br /&gt;
    &lt;br /&gt;
      // Increase animation time&lt;br /&gt;
      t = t + 10.0f * (1 / 60);&lt;br /&gt;
      //Checks if there is a event that needs processing&lt;br /&gt;
      if(SDL_PollEvent(&amp;amp;event)){&lt;br /&gt;
         //Checks to see if the event is a SDL_QUIT*x on the window is clicked*&lt;br /&gt;
         if(event.type == SDL_QUIT){&lt;br /&gt;
            //Sets the while loop to false and ends program&lt;br /&gt;
            running = false;&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // Play animation&lt;br /&gt;
      Horde3D::setModelAnimParams( model, 0, t, 1.0f );&lt;br /&gt;
    &lt;br /&gt;
      // Set new model position&lt;br /&gt;
      Horde3D::setNodeTransform( model, t * 10, 0, 0,     // Translation&lt;br /&gt;
                                           0, 0, 0,     // Rotation&lt;br /&gt;
                                           1, 1, 1 );   // Scale									   &lt;br /&gt;
      // Render scene &lt;br /&gt;
      Horde3D::render( cam );&lt;br /&gt;
      &lt;br /&gt;
      //Swaps the sdl opengl buffers&lt;br /&gt;
      SDL_GL_SwapBuffers();&lt;br /&gt;
    }&lt;br /&gt;
    //Releases the Horde3D Engine&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
    //Releases SDL and quits the program&lt;br /&gt;
    SDL_Quit();  &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 05:28, 1 August 2008 (CEST)&lt;br /&gt;
}}&lt;br /&gt;
|  valign=&amp;quot;top&amp;quot; | {{Extension_Summary|&lt;br /&gt;
name = Horde With SDL|&lt;br /&gt;
screenshot = H3DPlaceHolder.png|&lt;br /&gt;
description = This tutorial introduces the use of Horde3D with SDL|&lt;br /&gt;
version = 1.0|&lt;br /&gt;
horde3dversion = 1.0 beta|&lt;br /&gt;
released = 2008-07-31|&lt;br /&gt;
author = Raynaldo Rivera|&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
[[category: Tutorials]]&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=281</id>
		<title>Tutorial - Setup Horde with SDL</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=281"/>
				<updated>2008-08-01T04:34:29Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|  border=&amp;quot;0&amp;quot; &lt;br /&gt;
| {{ContentBlock|width=800|color=white&lt;br /&gt;
|content='''Here is a small example on how to use Horde with sdl.''' &lt;br /&gt;
Its a simple window that closes when the x is clicked&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= Simple SDL Frame|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SDL.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* args[]){&lt;br /&gt;
    //Creates are bool value for the while loop.&lt;br /&gt;
    bool running = true;&lt;br /&gt;
  &lt;br /&gt;
    //Inits sdl with only the video extention.&lt;br /&gt;
    SDL_Init(SDL_INIT_VIDEO);&lt;br /&gt;
    //Sets are window Caption&lt;br /&gt;
    SDL_WM_SetCaption(&amp;quot;Simple SDL Frame&amp;quot;,NULL);&lt;br /&gt;
    //Sets the sdl video mode width and height as well has creates are opengl context.&lt;br /&gt;
    SDL_SetVideoMode(800,600,32,SDL_OPENGL);&lt;br /&gt;
    //Creates Our Event Reciver&lt;br /&gt;
    SDL_Event event;&lt;br /&gt;
    &lt;br /&gt;
    //Inits Horde3D&lt;br /&gt;
    Horde3D::init();&lt;br /&gt;
    &lt;br /&gt;
    //Sizes the Horde3D View&lt;br /&gt;
    Horde3D::resize( 0, 0, 800, 600 );&lt;br /&gt;
&lt;br /&gt;
    // Add pipeline resource&lt;br /&gt;
    ResHandle pipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;standard.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add model resource&lt;br /&gt;
    ResHandle modelRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;character.scene.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add animation resource&lt;br /&gt;
    ResHandle animRes = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;walk.anim.xml&amp;quot;, 0 );&lt;br /&gt;
    // Load added resources&lt;br /&gt;
    Horde3DUtils::loadResourcesFromDisk( &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add model to scene&lt;br /&gt;
    model = Horde3D::addNodes( RootNode, modelRes );&lt;br /&gt;
    // Apply animation&lt;br /&gt;
    Horde3D::setupModelAnimStage( model, 0, animRes, &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add light source&lt;br /&gt;
    NodeHandle light = Horde3D::addLightNode( RootNode, &amp;quot;Light1&amp;quot;, 0, &amp;quot;LIGHTING&amp;quot;, &amp;quot;SHADOWMAP&amp;quot; );&lt;br /&gt;
    // Set light position and radius&lt;br /&gt;
    Horde3D::setNodeTransform( light, 0, 20, 0, 0, 0, 0, 1, 1, 1 );&lt;br /&gt;
&lt;br /&gt;
    //Sets the lightnodes radius&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Radius, 50 );&lt;br /&gt;
    //Sets the lightnodes Field of view&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::FOV, 90 );&lt;br /&gt;
    //Sets the lightnodes ShadowMapCOunt&lt;br /&gt;
    Horde3D::setNodeParami( light, LightNodeParams::ShadowMapCount, 3 );&lt;br /&gt;
    //Sets the lightnodes ShadowSplitLambda&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowSplitLambda, 0.9f );&lt;br /&gt;
    //Sets the lightnodes ShadowMapBias&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowMapBias, 0.001f );&lt;br /&gt;
    //Sets the lightnodes red value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_R, 0.9f );&lt;br /&gt;
    //Sets the lightnodes green value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_G, 0.7f );&lt;br /&gt;
    //Sets the lightnodes blue value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_B, 0.75f );    &lt;br /&gt;
	&lt;br /&gt;
    // Add camera&lt;br /&gt;
    cam = Horde3D::addCameraNode( RootNode, &amp;quot;Camera&amp;quot;, pipeRes );&lt;br /&gt;
&lt;br /&gt;
    // Our While loop&lt;br /&gt;
    while(running == true){&lt;br /&gt;
      static float t = 0;&lt;br /&gt;
    &lt;br /&gt;
      // Increase animation time&lt;br /&gt;
      t = t + 10.0f * (1 / 60);&lt;br /&gt;
      //Checks if there is a event that needs processing&lt;br /&gt;
      if(SDL_PollEvent(&amp;amp;event)){&lt;br /&gt;
         //Checks to see if the event is a SDL_QUIT*x on the window is clicked*&lt;br /&gt;
         if(event.type == SDL_QUIT){&lt;br /&gt;
            //Sets the while loop to false and ends program&lt;br /&gt;
            running = false;&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // Play animation&lt;br /&gt;
      Horde3D::setModelAnimParams( model, 0, t, 1.0f );&lt;br /&gt;
    &lt;br /&gt;
      // Set new model position&lt;br /&gt;
      Horde3D::setNodeTransform( model, t * 10, 0, 0,     // Translation&lt;br /&gt;
                                           0, 0, 0,     // Rotation&lt;br /&gt;
                                           1, 1, 1 );   // Scale									   &lt;br /&gt;
      // Render scene &lt;br /&gt;
      Horde3D::render( cam );&lt;br /&gt;
      &lt;br /&gt;
      //Swaps are buffers&lt;br /&gt;
      SDL_GL_SwapBuffers();&lt;br /&gt;
    }&lt;br /&gt;
    //Releases the Horde3D Engine&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
    //Releases SDL and quits the program&lt;br /&gt;
    SDL_Quit();  &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 05:28, 1 August 2008 (CEST)&lt;br /&gt;
}}&lt;br /&gt;
|  valign=&amp;quot;top&amp;quot; | {{Extension_Summary|&lt;br /&gt;
name = Horde With SDL|&lt;br /&gt;
screenshot = H3DPlaceHolder.png|&lt;br /&gt;
description = This tutorial introduces the use of Horde3D with SDL|&lt;br /&gt;
version = 1.0|&lt;br /&gt;
horde3dversion = 1.0 beta|&lt;br /&gt;
released = 2008-07-31|&lt;br /&gt;
author = Raynaldo Rivera|&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
[[category: Tutorials]]&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=280</id>
		<title>Tutorial - Setup Horde with SDL</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=280"/>
				<updated>2008-08-01T04:22:41Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|  border=&amp;quot;0&amp;quot; &lt;br /&gt;
| {{ContentBlock|width=800|color=white&lt;br /&gt;
|content='''Here is a small example on how to use Horde with sdl.''' &lt;br /&gt;
Its a simple window that closes when the x is clicked&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= Simple SDL Frame|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SDL.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* args[]){&lt;br /&gt;
    //Creates are bool value for the while loop.&lt;br /&gt;
    bool running = true;&lt;br /&gt;
  &lt;br /&gt;
    //Inits sdl with only the video extention.&lt;br /&gt;
    SDL_Init(SDL_INIT_VIDEO);&lt;br /&gt;
    //Sets are window Caption&lt;br /&gt;
    SDL_WM_SetCaption(&amp;quot;Simple SDL Frame&amp;quot;,NULL);&lt;br /&gt;
    //Sets the sdl video mode width and height as well has creates are opengl context.&lt;br /&gt;
    SDL_SetVideoMode(800,600,32,SDL_OPENGL);&lt;br /&gt;
    //Creates Our Event Reciver&lt;br /&gt;
    SDL_Event event;&lt;br /&gt;
    &lt;br /&gt;
    //Inits Horde3D&lt;br /&gt;
    Horde3D::init();&lt;br /&gt;
    &lt;br /&gt;
    //Sizes the Horde3D View&lt;br /&gt;
    Horde3D::resize( 0, 0, 800, 600 );&lt;br /&gt;
&lt;br /&gt;
    // Add pipeline resource&lt;br /&gt;
    ResHandle pipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;standard.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add model resource&lt;br /&gt;
    ResHandle modelRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;character.scene.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add animation resource&lt;br /&gt;
    ResHandle animRes = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;walk.anim.xml&amp;quot;, 0 );&lt;br /&gt;
    // Load added resources&lt;br /&gt;
    Horde3DUtils::loadResourcesFromDisk( &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add model to scene&lt;br /&gt;
    model = Horde3D::addNodes( RootNode, modelRes );&lt;br /&gt;
    // Apply animation&lt;br /&gt;
    Horde3D::setupModelAnimStage( model, 0, animRes, &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add light source&lt;br /&gt;
    NodeHandle light = Horde3D::addLightNode( RootNode, &amp;quot;Light1&amp;quot;, 0, &amp;quot;LIGHTING&amp;quot;, &amp;quot;SHADOWMAP&amp;quot; );&lt;br /&gt;
    // Set light position and radius&lt;br /&gt;
    Horde3D::setNodeTransform( light, 0, 20, 0, 0, 0, 0, 1, 1, 1 );&lt;br /&gt;
&lt;br /&gt;
    //Sets the lightnodes radius&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Radius, 50 );&lt;br /&gt;
    //Sets the lightnodes Field of view&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::FOV, 90 );&lt;br /&gt;
    //Sets the lightnodes ShadowMapCOunt&lt;br /&gt;
    Horde3D::setNodeParami( light, LightNodeParams::ShadowMapCount, 3 );&lt;br /&gt;
    //Sets the lightnodes ShadowSplitLambda&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowSplitLambda, 0.9f );&lt;br /&gt;
    //Sets the lightnodes ShadowMapBias&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowMapBias, 0.001f );&lt;br /&gt;
    //Sets the lightnodes red value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_R, 0.9f );&lt;br /&gt;
    //Sets the lightnodes green value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_G, 0.7f );&lt;br /&gt;
    //Sets the lightnodes blue value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_B, 0.75f );    &lt;br /&gt;
	&lt;br /&gt;
    // Add camera&lt;br /&gt;
    cam = Horde3D::addCameraNode( RootNode, &amp;quot;Camera&amp;quot;, pipeRes );&lt;br /&gt;
&lt;br /&gt;
    // Our While loop&lt;br /&gt;
    while(running == true){&lt;br /&gt;
      static float t = 0;&lt;br /&gt;
    &lt;br /&gt;
      // Increase animation time&lt;br /&gt;
      t = t + 10.0f * (1 / 60);&lt;br /&gt;
      //Checks if there is a event that needs processing&lt;br /&gt;
      if(SDL_PollEvent(&amp;amp;event)){&lt;br /&gt;
         //Checks to see if the event is a SDL_QUIT*x on the window is clicked*&lt;br /&gt;
         if(event.type == SDL_QUIT){&lt;br /&gt;
            //Sets the while loop to false and ends program&lt;br /&gt;
            running = false;&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // Play animation&lt;br /&gt;
      Horde3D::setModelAnimParams( model, 0, t, 1.0f );&lt;br /&gt;
    &lt;br /&gt;
      // Set new model position&lt;br /&gt;
      Horde3D::setNodeTransform( model, t * 10, 0, 0,     // Translation&lt;br /&gt;
                                           0, 0, 0,     // Rotation&lt;br /&gt;
                                           1, 1, 1 );   // Scale									   &lt;br /&gt;
      // Render scene &lt;br /&gt;
      Horde3D::render( cam );&lt;br /&gt;
    }&lt;br /&gt;
    //Releases the Horde3D Engine&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
    //Releases SDL and quits the program&lt;br /&gt;
    SDL_Quit();  &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 05:28, 1 August 2008 (CEST)&lt;br /&gt;
}}&lt;br /&gt;
|  valign=&amp;quot;top&amp;quot; | {{Extension_Summary|&lt;br /&gt;
name = Horde With SDL|&lt;br /&gt;
screenshot = H3DPlaceHolder.png|&lt;br /&gt;
description = This tutorial introduces the use of Horde3D with SDL|&lt;br /&gt;
version = 1.0|&lt;br /&gt;
horde3dversion = 1.0 beta|&lt;br /&gt;
released = 2008-07-31|&lt;br /&gt;
author = Raynaldo Rivera|&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
[[category: Tutorials]]&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=279</id>
		<title>Tutorial - Setup Horde with SDL</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=279"/>
				<updated>2008-08-01T04:19:25Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|  border=&amp;quot;0&amp;quot; &lt;br /&gt;
| {{ContentBlock|width=800|color=white&lt;br /&gt;
|content='''Here is a small example on how to use Horde with sdl.''' &lt;br /&gt;
Its a simple window that closes when the x is clicked&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= Simple SDL Frame|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SDL.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* args[]){&lt;br /&gt;
    //Creates are bool value for the while loop.&lt;br /&gt;
    bool running = true;&lt;br /&gt;
  &lt;br /&gt;
    //Inits sdl with only the video extention.&lt;br /&gt;
    SDL_Init(SDL_INIT_VIDEO);&lt;br /&gt;
    //Sets are window Caption&lt;br /&gt;
    SDL_WM_SetCaption(&amp;quot;Simple SDL Frame&amp;quot;,NULL);&lt;br /&gt;
    //Sets the sdl video mode width and height as well has creates are opengl context.&lt;br /&gt;
    SDL_SetVideoMode(800,600,32,SDL_OPENGL);&lt;br /&gt;
    //Creates Our Event Reciver&lt;br /&gt;
    SDL_Event event;&lt;br /&gt;
    &lt;br /&gt;
    //Inits Horde3D&lt;br /&gt;
    Horde3D::init();&lt;br /&gt;
    &lt;br /&gt;
    //Sizes the Horde3D View&lt;br /&gt;
    Horde3D::resize( 0, 0, 800, 600 );&lt;br /&gt;
&lt;br /&gt;
    // Add pipeline resource&lt;br /&gt;
    ResHandle pipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;standard.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add model resource&lt;br /&gt;
    ResHandle modelRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;character.scene.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add animation resource&lt;br /&gt;
    ResHandle animRes = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;walk.anim.xml&amp;quot;, 0 );&lt;br /&gt;
    // Load added resources&lt;br /&gt;
    Horde3DUtils::loadResourcesFromDisk( &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add model to scene&lt;br /&gt;
    model = Horde3D::addNodes( RootNode, modelRes );&lt;br /&gt;
    // Apply animation&lt;br /&gt;
    Horde3D::setupModelAnimStage( model, 0, animRes, &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add light source&lt;br /&gt;
    NodeHandle light = Horde3D::addLightNode( RootNode, &amp;quot;Light1&amp;quot;, 0, &amp;quot;LIGHTING&amp;quot;, &amp;quot;SHADOWMAP&amp;quot; );&lt;br /&gt;
    // Set light position and radius&lt;br /&gt;
    Horde3D::setNodeTransform( light, 0, 20, 0, 0, 0, 0, 1, 1, 1 );&lt;br /&gt;
&lt;br /&gt;
    //Sets the lightnodes radius&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Radius, 50 );&lt;br /&gt;
    //Sets the lightnodes Field of view&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::FOV, 90 );&lt;br /&gt;
    //Sets the lightnodes ShadowMapCOunt&lt;br /&gt;
    Horde3D::setNodeParami( light, LightNodeParams::ShadowMapCount, 3 );&lt;br /&gt;
    //Sets the lightnodes ShadowSplitLambda&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowSplitLambda, 0.9f );&lt;br /&gt;
    //Sets the lightnodes ShadowMapBias&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowMapBias, 0.001f );&lt;br /&gt;
    //Sets the lightnodes red value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_R, 0.9f );&lt;br /&gt;
    //Sets the lightnodes green value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_G, 0.7f );&lt;br /&gt;
    //Sets the lightnodes blue value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_B, 0.75f );    &lt;br /&gt;
	&lt;br /&gt;
    // Add camera&lt;br /&gt;
    cam = Horde3D::addCameraNode( RootNode, &amp;quot;Camera&amp;quot;, pipeRes );&lt;br /&gt;
&lt;br /&gt;
    // Our While loop&lt;br /&gt;
    while(running == true){&lt;br /&gt;
      static float t = 0;&lt;br /&gt;
    &lt;br /&gt;
      // Increase animation time&lt;br /&gt;
      t = t + 10.0f * (1 / 60);&lt;br /&gt;
      //Checks if there is a event that needs processing&lt;br /&gt;
      if(SDL_PollEvent(&amp;amp;event)){&lt;br /&gt;
         //Checks to see if the event is a SDL_QUIT*x on the window is clicked*&lt;br /&gt;
         if(event.type == SDL_QUIT){&lt;br /&gt;
            //Sets the while loop to false and ends program&lt;br /&gt;
            running = false;&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // Play animation&lt;br /&gt;
      Horde3D::setModelAnimParams( model, 0, t, 1.0f );&lt;br /&gt;
    &lt;br /&gt;
      // Set new model position&lt;br /&gt;
      Horde3D::setNodeTransform( model, t * 10, 0, 0,     // Translation&lt;br /&gt;
                                           0, 0, 0,     // Rotation&lt;br /&gt;
                                           1, 1, 1 );   // Scale									   &lt;br /&gt;
      // Render scene &lt;br /&gt;
      Horde3D::render( cam );&lt;br /&gt;
    }&lt;br /&gt;
    //Releases the Horde3D Engine&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
    //Releases SDL and quits the program&lt;br /&gt;
    SDL_Quit();  &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 05:28, 1 August 2008 (CEST)&lt;br /&gt;
}}&lt;br /&gt;
|  valign=&amp;quot;top&amp;quot; | {{Extension_Summary|&lt;br /&gt;
name = Horde With SDL|&lt;br /&gt;
screenshot = H3DPlaceHolder.png|&lt;br /&gt;
description = This tutorial introduces the use of Horde3D with SDL|&lt;br /&gt;
version = 1.0|&lt;br /&gt;
horde3dversion = 1.0 beta|&lt;br /&gt;
released = 2008-03-30|&lt;br /&gt;
author = Raynaldo Rivera|&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
[[category: Tutorials]]&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=278</id>
		<title>Tutorial - Setup Horde with SDL</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=278"/>
				<updated>2008-08-01T04:17:40Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|  border=&amp;quot;0&amp;quot; &lt;br /&gt;
| {{ContentBlock|width=800|color=white&lt;br /&gt;
|content='''Here is a small example on how to use Horde with sdl. Its a simple frame that closes when the x on the window is clicked.''' &lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= Simple SDL Frame|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SDL.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* args[]){&lt;br /&gt;
    //Creates are bool value for the while loop.&lt;br /&gt;
    bool running = true;&lt;br /&gt;
  &lt;br /&gt;
    //Inits sdl with only the video extention.&lt;br /&gt;
    SDL_Init(SDL_INIT_VIDEO);&lt;br /&gt;
    //Sets are window Caption&lt;br /&gt;
    SDL_WM_SetCaption(&amp;quot;Simple SDL Frame&amp;quot;,NULL);&lt;br /&gt;
    //Sets the sdl video mode width and height as well has creates are opengl context.&lt;br /&gt;
    SDL_SetVideoMode(800,600,32,SDL_OPENGL);&lt;br /&gt;
    //Creates Our Event Reciver&lt;br /&gt;
    SDL_Event event;&lt;br /&gt;
    &lt;br /&gt;
    //Inits Horde3D&lt;br /&gt;
    Horde3D::init();&lt;br /&gt;
    &lt;br /&gt;
    //Sizes the Horde3D View&lt;br /&gt;
    Horde3D::resize( 0, 0, 800, 600 );&lt;br /&gt;
&lt;br /&gt;
    // Add pipeline resource&lt;br /&gt;
    ResHandle pipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;standard.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add model resource&lt;br /&gt;
    ResHandle modelRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;character.scene.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add animation resource&lt;br /&gt;
    ResHandle animRes = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;walk.anim.xml&amp;quot;, 0 );&lt;br /&gt;
    // Load added resources&lt;br /&gt;
    Horde3DUtils::loadResourcesFromDisk( &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add model to scene&lt;br /&gt;
    model = Horde3D::addNodes( RootNode, modelRes );&lt;br /&gt;
    // Apply animation&lt;br /&gt;
    Horde3D::setupModelAnimStage( model, 0, animRes, &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add light source&lt;br /&gt;
    NodeHandle light = Horde3D::addLightNode( RootNode, &amp;quot;Light1&amp;quot;, 0, &amp;quot;LIGHTING&amp;quot;, &amp;quot;SHADOWMAP&amp;quot; );&lt;br /&gt;
    // Set light position and radius&lt;br /&gt;
    Horde3D::setNodeTransform( light, 0, 20, 0, 0, 0, 0, 1, 1, 1 );&lt;br /&gt;
&lt;br /&gt;
    //Sets the lightnodes radius&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Radius, 50 );&lt;br /&gt;
    //Sets the lightnodes Field of view&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::FOV, 90 );&lt;br /&gt;
    //Sets the lightnodes ShadowMapCOunt&lt;br /&gt;
    Horde3D::setNodeParami( light, LightNodeParams::ShadowMapCount, 3 );&lt;br /&gt;
    //Sets the lightnodes ShadowSplitLambda&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowSplitLambda, 0.9f );&lt;br /&gt;
    //Sets the lightnodes ShadowMapBias&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowMapBias, 0.001f );&lt;br /&gt;
    //Sets the lightnodes red value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_R, 0.9f );&lt;br /&gt;
    //Sets the lightnodes green value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_G, 0.7f );&lt;br /&gt;
    //Sets the lightnodes blue value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_B, 0.75f );    &lt;br /&gt;
	&lt;br /&gt;
    // Add camera&lt;br /&gt;
    cam = Horde3D::addCameraNode( RootNode, &amp;quot;Camera&amp;quot;, pipeRes );&lt;br /&gt;
&lt;br /&gt;
    // Our While loop&lt;br /&gt;
    while(running == true){&lt;br /&gt;
      static float t = 0;&lt;br /&gt;
    &lt;br /&gt;
      // Increase animation time&lt;br /&gt;
      t = t + 10.0f * (1 / 60);&lt;br /&gt;
      //Checks if there is a event that needs processing&lt;br /&gt;
      if(SDL_PollEvent(&amp;amp;event)){&lt;br /&gt;
         //Checks to see if the event is a SDL_QUIT*x on the window is clicked*&lt;br /&gt;
         if(event.type == SDL_QUIT){&lt;br /&gt;
            //Sets the while loop to false and ends program&lt;br /&gt;
            running = false;&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // Play animation&lt;br /&gt;
      Horde3D::setModelAnimParams( model, 0, t, 1.0f );&lt;br /&gt;
    &lt;br /&gt;
      // Set new model position&lt;br /&gt;
      Horde3D::setNodeTransform( model, t * 10, 0, 0,     // Translation&lt;br /&gt;
                                           0, 0, 0,     // Rotation&lt;br /&gt;
                                           1, 1, 1 );   // Scale									   &lt;br /&gt;
      // Render scene &lt;br /&gt;
      Horde3D::render( cam );&lt;br /&gt;
    }&lt;br /&gt;
    //Releases the Horde3D Engine&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
    //Releases SDL and quits the program&lt;br /&gt;
    SDL_Quit();  &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 05:28, 1 August 2008 (CEST)&lt;br /&gt;
}}&lt;br /&gt;
|  valign=&amp;quot;top&amp;quot; | {{Extension_Summary|&lt;br /&gt;
name = Horde With SDL|&lt;br /&gt;
screenshot = H3DPlaceHolder.png|&lt;br /&gt;
description = This tutorial introduces the use of Horde3D with SDL|&lt;br /&gt;
version = 1.0|&lt;br /&gt;
horde3dversion = 1.0 beta|&lt;br /&gt;
released = 2008-03-30|&lt;br /&gt;
author = Raynaldo Rivera|&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
[[category: Tutorials]]&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=277</id>
		<title>Tutorial - Setup Horde with SDL</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=277"/>
				<updated>2008-08-01T04:11:11Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a small example on how to use Horde with sdl. Its a simple frame that closes when the x on the window is clicked.&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= Simple SDL Frame|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SDL.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* args[]){&lt;br /&gt;
    //Creates are bool value for the while loop.&lt;br /&gt;
    bool running = true;&lt;br /&gt;
  &lt;br /&gt;
    //Inits sdl with only the video extention.&lt;br /&gt;
    SDL_Init(SDL_INIT_VIDEO);&lt;br /&gt;
    //Sets are window Caption&lt;br /&gt;
    SDL_WM_SetCaption(&amp;quot;Simple SDL Frame&amp;quot;,NULL);&lt;br /&gt;
    //Sets the sdl video mode width and height as well has creates are opengl context.&lt;br /&gt;
    SDL_SetVideoMode(800,600,32,SDL_OPENGL);&lt;br /&gt;
    //Creates Our Event Reciver&lt;br /&gt;
    SDL_Event event;&lt;br /&gt;
    &lt;br /&gt;
    //Inits Horde3D&lt;br /&gt;
    Horde3D::init();&lt;br /&gt;
    &lt;br /&gt;
    //Sizes the Horde3D View&lt;br /&gt;
    Horde3D::resize( 0, 0, 800, 600 );&lt;br /&gt;
&lt;br /&gt;
    // Add pipeline resource&lt;br /&gt;
    ResHandle pipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;standard.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add model resource&lt;br /&gt;
    ResHandle modelRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;character.scene.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add animation resource&lt;br /&gt;
    ResHandle animRes = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;walk.anim.xml&amp;quot;, 0 );&lt;br /&gt;
    // Load added resources&lt;br /&gt;
    Horde3DUtils::loadResourcesFromDisk( &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add model to scene&lt;br /&gt;
    model = Horde3D::addNodes( RootNode, modelRes );&lt;br /&gt;
    // Apply animation&lt;br /&gt;
    Horde3D::setupModelAnimStage( model, 0, animRes, &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add light source&lt;br /&gt;
    NodeHandle light = Horde3D::addLightNode( RootNode, &amp;quot;Light1&amp;quot;, 0, &amp;quot;LIGHTING&amp;quot;, &amp;quot;SHADOWMAP&amp;quot; );&lt;br /&gt;
    // Set light position and radius&lt;br /&gt;
    Horde3D::setNodeTransform( light, 0, 20, 0, 0, 0, 0, 1, 1, 1 );&lt;br /&gt;
&lt;br /&gt;
    //Sets the lightnodes radius&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Radius, 50 );&lt;br /&gt;
    //Sets the lightnodes Field of view&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::FOV, 90 );&lt;br /&gt;
    //Sets the lightnodes ShadowMapCOunt&lt;br /&gt;
    Horde3D::setNodeParami( light, LightNodeParams::ShadowMapCount, 3 );&lt;br /&gt;
    //Sets the lightnodes ShadowSplitLambda&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowSplitLambda, 0.9f );&lt;br /&gt;
    //Sets the lightnodes ShadowMapBias&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowMapBias, 0.001f );&lt;br /&gt;
    //Sets the lightnodes red value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_R, 0.9f );&lt;br /&gt;
    //Sets the lightnodes green value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_G, 0.7f );&lt;br /&gt;
    //Sets the lightnodes blue value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_B, 0.75f );    &lt;br /&gt;
	&lt;br /&gt;
    // Add camera&lt;br /&gt;
    cam = Horde3D::addCameraNode( RootNode, &amp;quot;Camera&amp;quot;, pipeRes );&lt;br /&gt;
&lt;br /&gt;
    // Our While loop&lt;br /&gt;
    while(running == true){&lt;br /&gt;
      static float t = 0;&lt;br /&gt;
    &lt;br /&gt;
      // Increase animation time&lt;br /&gt;
      t = t + 10.0f * (1 / 60);&lt;br /&gt;
      //Checks if there is a event that needs processing&lt;br /&gt;
      if(SDL_PollEvent(&amp;amp;event)){&lt;br /&gt;
         //Checks to see if the event is a SDL_QUIT*x on the window is clicked*&lt;br /&gt;
         if(event.type == SDL_QUIT){&lt;br /&gt;
            //Sets the while loop to false and ends program&lt;br /&gt;
            running = false;&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // Play animation&lt;br /&gt;
      Horde3D::setModelAnimParams( model, 0, t, 1.0f );&lt;br /&gt;
    &lt;br /&gt;
      // Set new model position&lt;br /&gt;
      Horde3D::setNodeTransform( model, t * 10, 0, 0,     // Translation&lt;br /&gt;
                                           0, 0, 0,     // Rotation&lt;br /&gt;
                                           1, 1, 1 );   // Scale									   &lt;br /&gt;
      // Render scene &lt;br /&gt;
      Horde3D::render( cam );&lt;br /&gt;
    }&lt;br /&gt;
    //Releases the Horde3D Engine&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
    //Releases SDL and quits the program&lt;br /&gt;
    SDL_Quit();  &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 05:28, 1 August 2008 (CEST)&lt;br /&gt;
}}&lt;br /&gt;
|  valign=&amp;quot;top&amp;quot; | {{Extension_Summary|&lt;br /&gt;
name = Horde With SDL Tutorial|&lt;br /&gt;
screenshot = H3DPlaceHolder.png|&lt;br /&gt;
description = This tutorial Shows the basic use of horde with SDL|&lt;br /&gt;
version = 1.0|&lt;br /&gt;
horde3dversion = 1.0 beta|&lt;br /&gt;
released = 2008-03-30|&lt;br /&gt;
author = Raynaldo Rivera|&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=276</id>
		<title>Tutorial - Setup Horde with SDL</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=276"/>
				<updated>2008-08-01T04:01:44Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a small example on how to use Horde with sdl. Its a simple frame that closes when the x on the window is clicked.&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= Simple SDL Frame|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SDL.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* args[]){&lt;br /&gt;
    //Creates are bool value for the while loop.&lt;br /&gt;
    bool running = true;&lt;br /&gt;
  &lt;br /&gt;
    //Inits sdl with only the video extention.&lt;br /&gt;
    SDL_Init(SDL_INIT_VIDEO);&lt;br /&gt;
    //Sets are window Caption&lt;br /&gt;
    SDL_WM_SetCaption(&amp;quot;Simple SDL Frame&amp;quot;,NULL);&lt;br /&gt;
    //Sets the sdl video mode width and height as well has creates are opengl context.&lt;br /&gt;
    SDL_SetVideoMode(800,600,32,SDL_OPENGL);&lt;br /&gt;
    //Creates Our Event Reciver&lt;br /&gt;
    SDL_Event event;&lt;br /&gt;
    &lt;br /&gt;
    //Inits Horde3D&lt;br /&gt;
    Horde3D::init();&lt;br /&gt;
    &lt;br /&gt;
    //Sizes the Horde3D View&lt;br /&gt;
    Horde3D::resize( 0, 0, 800, 600 );&lt;br /&gt;
&lt;br /&gt;
    // Add pipeline resource&lt;br /&gt;
    ResHandle pipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;standard.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add model resource&lt;br /&gt;
    ResHandle modelRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;character.scene.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add animation resource&lt;br /&gt;
    ResHandle animRes = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;walk.anim.xml&amp;quot;, 0 );&lt;br /&gt;
    // Load added resources&lt;br /&gt;
    Horde3DUtils::loadResourcesFromDisk( &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add model to scene&lt;br /&gt;
    model = Horde3D::addNodes( RootNode, modelRes );&lt;br /&gt;
    // Apply animation&lt;br /&gt;
    Horde3D::setupModelAnimStage( model, 0, animRes, &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add light source&lt;br /&gt;
    NodeHandle light = Horde3D::addLightNode( RootNode, &amp;quot;Light1&amp;quot;, 0, &amp;quot;LIGHTING&amp;quot;, &amp;quot;SHADOWMAP&amp;quot; );&lt;br /&gt;
    // Set light position and radius&lt;br /&gt;
    Horde3D::setNodeTransform( light, 0, 20, 0, 0, 0, 0, 1, 1, 1 );&lt;br /&gt;
&lt;br /&gt;
    //Sets the lightnodes radius&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Radius, 50 );&lt;br /&gt;
    //Sets the lightnodes Field of view&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::FOV, 90 );&lt;br /&gt;
    //Sets the lightnodes ShadowMapCOunt&lt;br /&gt;
    Horde3D::setNodeParami( light, LightNodeParams::ShadowMapCount, 3 );&lt;br /&gt;
    //Sets the lightnodes ShadowSplitLambda&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowSplitLambda, 0.9f );&lt;br /&gt;
    //Sets the lightnodes ShadowMapBias&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowMapBias, 0.001f );&lt;br /&gt;
    //Sets the lightnodes red value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_R, 0.9f );&lt;br /&gt;
    //Sets the lightnodes green value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_G, 0.7f );&lt;br /&gt;
    //Sets the lightnodes blue value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_B, 0.75f );    &lt;br /&gt;
	&lt;br /&gt;
    // Add camera&lt;br /&gt;
    cam = Horde3D::addCameraNode( RootNode, &amp;quot;Camera&amp;quot;, pipeRes );&lt;br /&gt;
&lt;br /&gt;
    // Our While loop&lt;br /&gt;
    while(running == true){&lt;br /&gt;
      static float t = 0;&lt;br /&gt;
    &lt;br /&gt;
      // Increase animation time&lt;br /&gt;
      t = t + 10.0f * (1 / 60);&lt;br /&gt;
      //Checks if there is a event that needs processing&lt;br /&gt;
      if(SDL_PollEvent(&amp;amp;event)){&lt;br /&gt;
         //Checks to see if the event is a SDL_QUIT*x on the window is clicked*&lt;br /&gt;
         if(event.type == SDL_QUIT){&lt;br /&gt;
            //Sets the while loop to false and ends program&lt;br /&gt;
            running = false;&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // Play animation&lt;br /&gt;
      Horde3D::setModelAnimParams( model, 0, t, 1.0f );&lt;br /&gt;
    &lt;br /&gt;
      // Set new model position&lt;br /&gt;
      Horde3D::setNodeTransform( model, t * 10, 0, 0,     // Translation&lt;br /&gt;
                                           0, 0, 0,     // Rotation&lt;br /&gt;
                                           1, 1, 1 );   // Scale									   &lt;br /&gt;
      // Render scene &lt;br /&gt;
      Horde3D::render( cam );&lt;br /&gt;
    }&lt;br /&gt;
    //Releases the Horde3D Engine&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
    //Releases SDL and quits the program&lt;br /&gt;
    SDL_Quit();  &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 05:28, 1 August 2008 (CEST)&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=275</id>
		<title>Tutorial - Setup Horde with SDL</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=275"/>
				<updated>2008-08-01T03:59:20Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a small example on how to use Horde with sdl. Its a simple frame that closes when the x on the window is clicked.&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= Simple SDL Frame|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SDL.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* args[]){&lt;br /&gt;
    //Creates are bool value for the while loop.&lt;br /&gt;
    bool running = true;&lt;br /&gt;
  &lt;br /&gt;
    //Inits sdl with only the video extention.&lt;br /&gt;
    SDL_Init(SDL_INIT_VIDEO);&lt;br /&gt;
    //Sets are window Caption&lt;br /&gt;
    SDL_WM_SetCaption(&amp;quot;Simple SDL Frame&amp;quot;,NULL);&lt;br /&gt;
    //Sets the sdl video mode width and height as well has creates are opengl context.&lt;br /&gt;
    SDL_SetVideoMode(800,600,32,SDL_OPENGL);&lt;br /&gt;
    //Creates Our Event Reciver&lt;br /&gt;
    SDL_Event event;&lt;br /&gt;
    &lt;br /&gt;
    //Inits Horde3D&lt;br /&gt;
    Horde3D::init();&lt;br /&gt;
    &lt;br /&gt;
    //Sizes the Horde3D View&lt;br /&gt;
    Horde3D::resize( 0, 0, 800, 600 );&lt;br /&gt;
&lt;br /&gt;
    // Add pipeline resource&lt;br /&gt;
    ResHandle pipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;standard.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add model resource&lt;br /&gt;
    ResHandle modelRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;character.scene.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add animation resource&lt;br /&gt;
    ResHandle animRes = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;walk.anim.xml&amp;quot;, 0 );&lt;br /&gt;
    // Load added resources&lt;br /&gt;
    Horde3DUtils::loadResourcesFromDisk( &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add model to scene&lt;br /&gt;
    model = Horde3D::addNodes( RootNode, modelRes );&lt;br /&gt;
    // Apply animation&lt;br /&gt;
    Horde3D::setupModelAnimStage( model, 0, animRes, &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add light source&lt;br /&gt;
    NodeHandle light = Horde3D::addLightNode( RootNode, &amp;quot;Light1&amp;quot;, 0, &amp;quot;LIGHTING&amp;quot;, &amp;quot;SHADOWMAP&amp;quot; );&lt;br /&gt;
    // Set light position and radius&lt;br /&gt;
    Horde3D::setNodeTransform( light, 0, 20, 0, 0, 0, 0, 1, 1, 1 );&lt;br /&gt;
&lt;br /&gt;
    //Sets the lightnodes radius&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Radius, 50 );&lt;br /&gt;
    //Sets the lightnodes Field of view&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::FOV, 90 );&lt;br /&gt;
    //Sets the lightnodes ShadowMapCOunt&lt;br /&gt;
    Horde3D::setNodeParami( light, LightNodeParams::ShadowMapCount, 3 );&lt;br /&gt;
    //Sets the lightnodes ShadowSplitLambda&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowSplitLambda, 0.9f );&lt;br /&gt;
    //Sets the lightnodes ShadowMapBias&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowMapBias, 0.001f );&lt;br /&gt;
    //Sets the lightnodes red value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_R, 0.9f );&lt;br /&gt;
    //Sets the lightnodes green value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_G, 0.7f );&lt;br /&gt;
    //Sets the lightnodes blue value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_B, 0.75f );    &lt;br /&gt;
	&lt;br /&gt;
    // Add camera&lt;br /&gt;
    cam = Horde3D::addCameraNode( RootNode, &amp;quot;Camera&amp;quot;, pipeRes );&lt;br /&gt;
&lt;br /&gt;
    // Our While loop&lt;br /&gt;
    while(running == true){&lt;br /&gt;
      static float t = 0;&lt;br /&gt;
    &lt;br /&gt;
      // Increase animation time&lt;br /&gt;
      t = t + 10.0f * (1 / 60);&lt;br /&gt;
      //Checks if there is a event that needs processing&lt;br /&gt;
      if(SDL_PollEvent(&amp;amp;event)){&lt;br /&gt;
         //Checks to see if the event is a SDL_QUIT*x on the window is clicked*&lt;br /&gt;
         if(event.type == SDL_QUIT){&lt;br /&gt;
            //Sets the while loop to false and ends program&lt;br /&gt;
            running = false;&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // Play animation&lt;br /&gt;
      Horde3D::setModelAnimParams( model, 0, t, 1.0f );&lt;br /&gt;
    &lt;br /&gt;
      // Set new model position&lt;br /&gt;
      Horde3D::setNodeTransform( model, t * 10, 0, 0,     // Translation&lt;br /&gt;
                                           0, 0, 0,     // Rotation&lt;br /&gt;
                                           1, 1, 1 );   // Scale									   &lt;br /&gt;
      // Render scene &lt;br /&gt;
      Horde3D::render( cam );&lt;br /&gt;
    }&lt;br /&gt;
    //Releases the Horde3D Engine&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
    //Releases SDL and quits are program&lt;br /&gt;
    SDL_Quit();  &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 05:28, 1 August 2008 (CEST)&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Horde3D_Wiki:Community_portal&amp;diff=274</id>
		<title>Horde3D Wiki:Community portal</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Horde3D_Wiki:Community_portal&amp;diff=274"/>
				<updated>2008-08-01T03:55:03Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOEDITSECTION__{{ContentBlock|width=800|color=orange&lt;br /&gt;
|content= '''The community portal section of the Horde3D wiki contains community contributed articles that are not part of the official documentation. Feel free to add articles to our wiki or links to external tutorials.'''}}&lt;br /&gt;
{{SpacerBlock}}&lt;br /&gt;
{{ContentBlock|width=800&lt;br /&gt;
|header=Horde3D is a cross-platform graphics engine. The currently supported platform are Windows, Linux and Mac OS X.&lt;br /&gt;
|content={{!!}}&lt;br /&gt;
==How-To setup a Horde3D Development Environment==&lt;br /&gt;
*[[Horde3D Development Environment for Windows]]&lt;br /&gt;
*[[Horde3D Development Environment for Linux]]&lt;br /&gt;
*[[Horde3D Development Environment for Mac OS X]]&lt;br /&gt;
&lt;br /&gt;
*[[Horde3D Development Environment from SVN]]&lt;br /&gt;
&lt;br /&gt;
==Tutorials==&lt;br /&gt;
[[Category: Tutorials]]&lt;br /&gt;
&lt;br /&gt;
Fell free to write your tutorials here, for the benefit of the whole community. &lt;br /&gt;
===Beginner===&lt;br /&gt;
#[[Tutorial - Hello World]] - In this section we will create a simple application that loads a character and animates it using a walk cycle.&lt;br /&gt;
#[[Tutorial - Picking]] - In this section we will demonstrate picking the node under the mouse cursor&lt;br /&gt;
#[[Tutorial - Simple HUD]] - How to use showOverlay to create a simple HUD.&lt;br /&gt;
#[[Tutorial - Setup Horde with SDL]] - How to Setup Horde with SDL.&lt;br /&gt;
===Intermediate===&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
&lt;br /&gt;
==Techniques==&lt;br /&gt;
[[Category: Techniques]]&lt;br /&gt;
&lt;br /&gt;
===Shading===&lt;br /&gt;
#[[Shading Technique - Dot Product Detail Texturing]] - Using the dot product of vectors and signed textures for high frequency detail&lt;br /&gt;
#[[Shading Technique - Palette Coloring]] - Quick and dirty palette recoloration of objects&lt;br /&gt;
&lt;br /&gt;
==Content Import==&lt;br /&gt;
[[Category: Content Import]]&lt;br /&gt;
#[[Collada - 3DS Max and Maya]] - Exporting from 3D Studio Max and Maya. &lt;br /&gt;
#[[Collada - Modo]] - Exporting from Modo. &lt;br /&gt;
#[[Collada - Blender]] - Exporting from Blender.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=273</id>
		<title>Tutorial - Setup Horde with SDL</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=273"/>
				<updated>2008-08-01T03:45:51Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a small example on how to use Horde with sdl. Its a simple frame that closes when the x on the window is clicked.&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= Simple SDL Frame|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SDL.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* args[]){&lt;br /&gt;
    //Creates are bool value for the while loop.&lt;br /&gt;
    bool running = true;&lt;br /&gt;
  &lt;br /&gt;
    //Inits sdl with only the video extention.&lt;br /&gt;
    SDL_Init(SDL_INIT_VIDEO);&lt;br /&gt;
    //Sets are window Caption&lt;br /&gt;
    SDL_WM_SetCaption(&amp;quot;Simple SDL Frame&amp;quot;,NULL);&lt;br /&gt;
    //Sets the sdl video mode width and height as well has creates are opengl context.&lt;br /&gt;
    SDL_SetVideoMode(800,600,32,SDL_OPENGL);&lt;br /&gt;
    //Creates Are Event Reciver&lt;br /&gt;
    SDL_Event event;&lt;br /&gt;
    &lt;br /&gt;
    //Inits Horde3D&lt;br /&gt;
    Horde3D::init();&lt;br /&gt;
    &lt;br /&gt;
    //Sizes the Horde3D View&lt;br /&gt;
    Horde3D::resize( 0, 0, 800, 600 );&lt;br /&gt;
&lt;br /&gt;
    // Add pipeline resource&lt;br /&gt;
    ResHandle pipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;standard.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add model resource&lt;br /&gt;
    ResHandle modelRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;character.scene.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add animation resource&lt;br /&gt;
    ResHandle animRes = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;walk.anim.xml&amp;quot;, 0 );&lt;br /&gt;
    // Load added resources&lt;br /&gt;
    Horde3DUtils::loadResourcesFromDisk( &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add model to scene&lt;br /&gt;
    model = Horde3D::addNodes( RootNode, modelRes );&lt;br /&gt;
    // Apply animation&lt;br /&gt;
    Horde3D::setupModelAnimStage( model, 0, animRes, &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add light source&lt;br /&gt;
    NodeHandle light = Horde3D::addLightNode( RootNode, &amp;quot;Light1&amp;quot;, 0, &amp;quot;LIGHTING&amp;quot;, &amp;quot;SHADOWMAP&amp;quot; );&lt;br /&gt;
    // Set light position and radius&lt;br /&gt;
    Horde3D::setNodeTransform( light, 0, 20, 0, 0, 0, 0, 1, 1, 1 );&lt;br /&gt;
&lt;br /&gt;
    //Sets the lightnodes radius&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Radius, 50 );&lt;br /&gt;
    //Sets the lightnodes Field of view&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::FOV, 90 );&lt;br /&gt;
    //Sets the lightnodes ShadowMapCOunt&lt;br /&gt;
    Horde3D::setNodeParami( light, LightNodeParams::ShadowMapCount, 3 );&lt;br /&gt;
    //Sets the lightnodes ShadowSplitLambda&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowSplitLambda, 0.9f );&lt;br /&gt;
    //Sets the lightnodes ShadowMapBias&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowMapBias, 0.001f );&lt;br /&gt;
    //Sets the lightnodes red value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_R, 0.9f );&lt;br /&gt;
    //Sets the lightnodes green value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_G, 0.7f );&lt;br /&gt;
    //Sets the lightnodes blue value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_B, 0.75f );    &lt;br /&gt;
	&lt;br /&gt;
    // Add camera&lt;br /&gt;
    cam = Horde3D::addCameraNode( RootNode, &amp;quot;Camera&amp;quot;, pipeRes );&lt;br /&gt;
&lt;br /&gt;
    // Our While loop&lt;br /&gt;
    while(running == true){&lt;br /&gt;
      static float t = 0;&lt;br /&gt;
    &lt;br /&gt;
      // Increase animation time&lt;br /&gt;
      t = t + 10.0f * (1 / 60);&lt;br /&gt;
      //Checks if there is a event that needs processing&lt;br /&gt;
      if(SDL_PollEvent(&amp;amp;event)){&lt;br /&gt;
         //Checks to see if the event is a SDL_QUIT*x on the window is clicked*&lt;br /&gt;
         if(event.type == SDL_QUIT){&lt;br /&gt;
            //Sets the while loop to false and ends program&lt;br /&gt;
            running = false;&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // Play animation&lt;br /&gt;
      Horde3D::setModelAnimParams( model, 0, t, 1.0f );&lt;br /&gt;
    &lt;br /&gt;
      // Set new model position&lt;br /&gt;
      Horde3D::setNodeTransform( model, t * 10, 0, 0,     // Translation&lt;br /&gt;
                                           0, 0, 0,     // Rotation&lt;br /&gt;
                                           1, 1, 1 );   // Scale									   &lt;br /&gt;
      // Render scene &lt;br /&gt;
      Horde3D::render( cam );&lt;br /&gt;
    }&lt;br /&gt;
    //Releases the Horde3D Engine&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
    //Releases SDL and quits are program&lt;br /&gt;
    SDL_Quit();  &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 05:28, 1 August 2008 (CEST)&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=272</id>
		<title>Tutorial - Setup Horde with SDL</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=272"/>
				<updated>2008-08-01T03:45:08Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a small example on how to use Horde with sdl. Its a simple frame that closes when the x on the window is clicked.&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= Simple SDL Frame|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SDL.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* args[]){&lt;br /&gt;
    //Creates are bool value for the while loop.&lt;br /&gt;
    bool running = true;&lt;br /&gt;
  &lt;br /&gt;
    //Inits sdl with only the video extention.&lt;br /&gt;
    SDL_Init(SDL_INIT_VIDEO);&lt;br /&gt;
    //Sets are window Caption&lt;br /&gt;
    SDL_WM_SetCaption(&amp;quot;Simple SDL Frame&amp;quot;,NULL);&lt;br /&gt;
    //Sets the sdl video mode width and height as well has creates are opengl context.&lt;br /&gt;
    SDL_SetVideoMode(800,600,32,SDL_OPENGL);&lt;br /&gt;
    //Creates Are Event Reciver&lt;br /&gt;
    SDL_Event event;&lt;br /&gt;
    &lt;br /&gt;
    //Inits Horde3D&lt;br /&gt;
    Horde3D::init();&lt;br /&gt;
    &lt;br /&gt;
    //Sizes the Horde3D View&lt;br /&gt;
    Horde3D::resize( 0, 0, 800, 600 );&lt;br /&gt;
&lt;br /&gt;
    // Add pipeline resource&lt;br /&gt;
    ResHandle pipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;standard.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add model resource&lt;br /&gt;
    ResHandle modelRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;character.scene.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add animation resource&lt;br /&gt;
    ResHandle animRes = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;walk.anim.xml&amp;quot;, 0 );&lt;br /&gt;
    // Load added resources&lt;br /&gt;
    Horde3DUtils::loadResourcesFromDisk( &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add model to scene&lt;br /&gt;
    model = Horde3D::addNodes( RootNode, modelRes );&lt;br /&gt;
    // Apply animation&lt;br /&gt;
    Horde3D::setupModelAnimStage( model, 0, animRes, &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add light source&lt;br /&gt;
    NodeHandle light = Horde3D::addLightNode( RootNode, &amp;quot;Light1&amp;quot;, 0, &amp;quot;LIGHTING&amp;quot;, &amp;quot;SHADOWMAP&amp;quot; );&lt;br /&gt;
    // Set light position and radius&lt;br /&gt;
    Horde3D::setNodeTransform( light, 0, 20, 0, 0, 0, 0, 1, 1, 1 );&lt;br /&gt;
&lt;br /&gt;
    //Sets the lightnodes radius&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Radius, 50 );&lt;br /&gt;
    //Sets the lightnodes Field of view&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::FOV, 90 );&lt;br /&gt;
    //Sets the lightnodes ShadowMapCOunt&lt;br /&gt;
    Horde3D::setNodeParami( light, LightNodeParams::ShadowMapCount, 3 );&lt;br /&gt;
    //Sets the lightnodes ShadowSplitLambda&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowSplitLambda, 0.9f );&lt;br /&gt;
    //Sets the lightnodes ShadowMapBias&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowMapBias, 0.001f );&lt;br /&gt;
    //Sets the lightnodes red value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_R, 0.9f );&lt;br /&gt;
    //Sets the lightnodes green value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_G, 0.7f );&lt;br /&gt;
    //Sets the lightnodes blue value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_B, 0.75f );    &lt;br /&gt;
	&lt;br /&gt;
    // Add camera&lt;br /&gt;
    cam = Horde3D::addCameraNode( RootNode, &amp;quot;Camera&amp;quot;, pipeRes );&lt;br /&gt;
&lt;br /&gt;
    // Our While loop&lt;br /&gt;
    while(running == true){&lt;br /&gt;
      static float t = 0;&lt;br /&gt;
    &lt;br /&gt;
      // Increase animation time&lt;br /&gt;
      t = t + 10.0f * (1 / 60);&lt;br /&gt;
      //Checks if there is a event that needs processing&lt;br /&gt;
      if(SDL_PollEvent(&amp;amp;event)){&lt;br /&gt;
         //Checks to see if the event is a SDL_QUIT*x on the window is clicked.&lt;br /&gt;
         if(event.type == SDL_QUIT){&lt;br /&gt;
            //Sets the while loop to false and ends program&lt;br /&gt;
            running = false;&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // Play animation&lt;br /&gt;
      Horde3D::setModelAnimParams( model, 0, t, 1.0f );&lt;br /&gt;
    &lt;br /&gt;
      // Set new model position&lt;br /&gt;
      Horde3D::setNodeTransform( model, t * 10, 0, 0,     // Translation&lt;br /&gt;
                                           0, 0, 0,     // Rotation&lt;br /&gt;
                                           1, 1, 1 );   // Scale									   &lt;br /&gt;
      // Render scene &lt;br /&gt;
      Horde3D::render( cam );&lt;br /&gt;
    }&lt;br /&gt;
    //Releases the Horde3D Engine&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
    //Releases SDL and quits are program&lt;br /&gt;
    SDL_Quit();  &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 05:28, 1 August 2008 (CEST)&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Horde3D_Wiki:Community_portal&amp;diff=271</id>
		<title>Horde3D Wiki:Community portal</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Horde3D_Wiki:Community_portal&amp;diff=271"/>
				<updated>2008-08-01T03:41:30Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOEDITSECTION__{{ContentBlock|width=800|color=orange&lt;br /&gt;
|content= '''The community portal section of the Horde3D wiki contains community contributed articles that are not part of the official documentation. Feel free to add articles to our wiki or links to external tutorials.'''}}&lt;br /&gt;
{{SpacerBlock}}&lt;br /&gt;
{{ContentBlock|width=800&lt;br /&gt;
|header=Horde3D is a cross-platform graphics engine. The currently supported platform are Windows, Linux and Mac OS X.&lt;br /&gt;
|content={{!!}}&lt;br /&gt;
==How-To setup a Horde3D Development Environment==&lt;br /&gt;
*[[Horde3D Development Environment for Windows]]&lt;br /&gt;
*[[Horde3D Development Environment for Linux]]&lt;br /&gt;
*[[Horde3D Development Environment for Mac OS X]]&lt;br /&gt;
&lt;br /&gt;
*[[Horde3D Development Environment from SVN]]&lt;br /&gt;
&lt;br /&gt;
==Tutorials==&lt;br /&gt;
[[Category: Tutorials]]&lt;br /&gt;
&lt;br /&gt;
Fell free to write your tutorials here, for the benefit of the whole community. &lt;br /&gt;
===Beginner===&lt;br /&gt;
#[[Tutorial - Hello World]] - In this section we will create a simple application that loads a character and animates it using a walk cycle.&lt;br /&gt;
#[[Tutorial - Picking]] - In this section we will demonstrate picking the node under the mouse cursor&lt;br /&gt;
#[[Tutorial - Simple HUD]] - How to use showOverlay to create a simple HUD.&lt;br /&gt;
#[[Tutorial - Setup Horde With SDL]] - How to Setup Horde with SDL.&lt;br /&gt;
===Intermediate===&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
&lt;br /&gt;
==Techniques==&lt;br /&gt;
[[Category: Techniques]]&lt;br /&gt;
&lt;br /&gt;
===Shading===&lt;br /&gt;
#[[Shading Technique - Dot Product Detail Texturing]] - Using the dot product of vectors and signed textures for high frequency detail&lt;br /&gt;
#[[Shading Technique - Palette Coloring]] - Quick and dirty palette recoloration of objects&lt;br /&gt;
&lt;br /&gt;
==Content Import==&lt;br /&gt;
[[Category: Content Import]]&lt;br /&gt;
#[[Collada - 3DS Max and Maya]] - Exporting from 3D Studio Max and Maya. &lt;br /&gt;
#[[Collada - Modo]] - Exporting from Modo. &lt;br /&gt;
#[[Collada - Blender]] - Exporting from Blender.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=270</id>
		<title>Tutorial - Setup Horde with SDL</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=270"/>
				<updated>2008-08-01T03:39:12Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a small example on how to use Horde with sdl. Its a simple frame that closes when the x on the window is clicked.&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= Simple SDL Frame|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SDL.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* args[]){&lt;br /&gt;
    //Creates are bool value for the while loop.&lt;br /&gt;
    bool running = true;&lt;br /&gt;
  &lt;br /&gt;
    //Inits sdl with only the video extention.&lt;br /&gt;
    SDL_Init(SDL_INIT_VIDEO);&lt;br /&gt;
    //Sets are window Caption&lt;br /&gt;
    SDL_WM_SetCaption(&amp;quot;Simple SDL Frame&amp;quot;,NULL);&lt;br /&gt;
    //Sets the sdl video mode width and height as well has creates are opengl context.&lt;br /&gt;
    SDL_SetVideoMode(800,600,32,SDL_OPENGL);&lt;br /&gt;
    //Creates Are Event Reciver&lt;br /&gt;
    SDL_Event event;&lt;br /&gt;
    &lt;br /&gt;
    //Inits Horde3D&lt;br /&gt;
    Horde3D::init();&lt;br /&gt;
    &lt;br /&gt;
    //Sizes the Horde3D View&lt;br /&gt;
    Horde3D::resize( 0, 0, 800, 600 );&lt;br /&gt;
&lt;br /&gt;
    // Add pipeline resource&lt;br /&gt;
    ResHandle pipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;standard.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add model resource&lt;br /&gt;
    ResHandle modelRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;character.scene.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add animation resource&lt;br /&gt;
    ResHandle animRes = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;walk.anim.xml&amp;quot;, 0 );&lt;br /&gt;
    // Load added resources&lt;br /&gt;
    Horde3DUtils::loadResourcesFromDisk( &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add model to scene&lt;br /&gt;
    model = Horde3D::addNodes( RootNode, modelRes );&lt;br /&gt;
    // Apply animation&lt;br /&gt;
    Horde3D::setupModelAnimStage( model, 0, animRes, &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add light source&lt;br /&gt;
    NodeHandle light = Horde3D::addLightNode( RootNode, &amp;quot;Light1&amp;quot;, 0, &amp;quot;LIGHTING&amp;quot;, &amp;quot;SHADOWMAP&amp;quot; );&lt;br /&gt;
    // Set light position and radius&lt;br /&gt;
    Horde3D::setNodeTransform( light, 0, 20, 0, 0, 0, 0, 1, 1, 1 );&lt;br /&gt;
&lt;br /&gt;
    //Sets the lightnodes radius&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Radius, 50 );&lt;br /&gt;
    //Sets the lightnodes Field of view&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::FOV, 90 );&lt;br /&gt;
    //Sets the lightnodes ShadowMapCOunt&lt;br /&gt;
    Horde3D::setNodeParami( light, LightNodeParams::ShadowMapCount, 3 );&lt;br /&gt;
    //Sets the lightnodes ShadowSplitLambda&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowSplitLambda, 0.9f );&lt;br /&gt;
    //Sets the lightnodes ShadowMapBias&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowMapBias, 0.001f );&lt;br /&gt;
    //Sets the lightnodes red value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_R, 0.9f );&lt;br /&gt;
    //Sets the lightnodes green value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_G, 0.7f );&lt;br /&gt;
    //Sets the lightnodes blue value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_B, 0.75f );    &lt;br /&gt;
	&lt;br /&gt;
    // Add camera&lt;br /&gt;
    cam = Horde3D::addCameraNode( RootNode, &amp;quot;Camera&amp;quot;, pipeRes );&lt;br /&gt;
&lt;br /&gt;
    // Our While loop&lt;br /&gt;
    while(running == true){&lt;br /&gt;
      static float t = 0;&lt;br /&gt;
    &lt;br /&gt;
      // Increase animation time&lt;br /&gt;
      t = t + 10.0f * (1 / 60);&lt;br /&gt;
      //Checks if there is a event that needs processing&lt;br /&gt;
      if(SDL_PollEvent(&amp;amp;event)){&lt;br /&gt;
         //Checks to see if the event is a SDL_QUIT*x on the window is clicked.&lt;br /&gt;
         if(event.type == SDL_QUIT){&lt;br /&gt;
            //Sets the while loop to false and ends program&lt;br /&gt;
            running = false;&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // Play animation&lt;br /&gt;
      Horde3D::setModelAnimParams( model, 0, t, 1.0f );&lt;br /&gt;
    &lt;br /&gt;
      // Set new model position&lt;br /&gt;
      Horde3D::setNodeTransform( model, t * 10, 0, 0,     // Translation&lt;br /&gt;
                                           0, 0, 0,     // Rotation&lt;br /&gt;
                                           1, 1, 1 );   // Scale									   &lt;br /&gt;
      // Render scene &lt;br /&gt;
      Horde3D::render( cam );&lt;br /&gt;
    }&lt;br /&gt;
    //Releases the Horde3D Engine&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
    //Releases SDL and quits are program&lt;br /&gt;
    SDL_Quit();  &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 05:28, 1 August 2008 (CEST)&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=269</id>
		<title>Tutorial - Setup Horde with SDL</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=269"/>
				<updated>2008-08-01T03:38:29Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a small example on how to use Horde with sdl. Its a simple frame that closes when the x on the window is clicked.&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= Simple SDL Frame|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SDL.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* args[]){&lt;br /&gt;
    //Creates are bool value for the while loop.&lt;br /&gt;
    bool running = true;&lt;br /&gt;
  &lt;br /&gt;
    //Inits sdl with only the video extention.&lt;br /&gt;
    SDL_Init(SDL_INIT_VIDEO);&lt;br /&gt;
    //Sets are window Caption&lt;br /&gt;
    SDL_WM_SetCaption(&amp;quot;Simple SDL Frame&amp;quot;,NULL);&lt;br /&gt;
    //Sets the sdl video mode width and height as well has creates are opengl context.&lt;br /&gt;
    SDL_SetVideoMode(800,600,32,SDL_OPENGL);&lt;br /&gt;
    //Creates Are Event Reciver&lt;br /&gt;
    SDL_Event event;&lt;br /&gt;
    &lt;br /&gt;
    //Inits Horde3D&lt;br /&gt;
    Horde3D::init();&lt;br /&gt;
    &lt;br /&gt;
    //Sizes the Horde3D View&lt;br /&gt;
    Horde3D::resize( 0, 0, 800, 600 );&lt;br /&gt;
&lt;br /&gt;
    // Add pipeline resource&lt;br /&gt;
    ResHandle pipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;standard.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add model resource&lt;br /&gt;
    ResHandle modelRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;character.scene.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add animation resource&lt;br /&gt;
    ResHandle animRes = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;walk.anim.xml&amp;quot;, 0 );&lt;br /&gt;
    // Load added resources&lt;br /&gt;
    Horde3DUtils::loadResourcesFromDisk( &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add model to scene&lt;br /&gt;
    model = Horde3D::addNodes( RootNode, modelRes );&lt;br /&gt;
    // Apply animation&lt;br /&gt;
    Horde3D::setupModelAnimStage( model, 0, animRes, &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add light source&lt;br /&gt;
    NodeHandle light = Horde3D::addLightNode( RootNode, &amp;quot;Light1&amp;quot;, 0, &amp;quot;LIGHTING&amp;quot;, &amp;quot;SHADOWMAP&amp;quot; );&lt;br /&gt;
    // Set light position and radius&lt;br /&gt;
    Horde3D::setNodeTransform( light, 0, 20, 0, 0, 0, 0, 1, 1, 1 );&lt;br /&gt;
&lt;br /&gt;
    //Sets the lightnodes radius&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Radius, 50 );&lt;br /&gt;
    //Sets the lightnodes Field of view&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::FOV, 90 );&lt;br /&gt;
    //Sets the lightnodes ShadowMapCOunt&lt;br /&gt;
    Horde3D::setNodeParami( light, LightNodeParams::ShadowMapCount, 3 );&lt;br /&gt;
    //Sets the lightnodes ShadowSplitLambda&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowSplitLambda, 0.9f );&lt;br /&gt;
    //Sets the lightnodes ShadowMapBias&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::ShadowMapBias, 0.001f );&lt;br /&gt;
    //Sets the lightnodes red value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_R, 0.9f );&lt;br /&gt;
    //Sets the lightnodes green value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_G, 0.7f );&lt;br /&gt;
    //Sets the lightnodes blue value&lt;br /&gt;
    Horde3D::setNodeParamf( light, LightNodeParams::Col_B, 0.75f );    &lt;br /&gt;
	&lt;br /&gt;
    // Add camera&lt;br /&gt;
    cam = Horde3D::addCameraNode( RootNode, &amp;quot;Camera&amp;quot;, pipeRes );&lt;br /&gt;
&lt;br /&gt;
    // Our While loop&lt;br /&gt;
    while(running == true){&lt;br /&gt;
      static float t = 0;&lt;br /&gt;
    &lt;br /&gt;
      // Increase animation time&lt;br /&gt;
      t = t + 10.0f * (1 / 60);&lt;br /&gt;
      //Checks if there is a event that needs processing&lt;br /&gt;
      if(SDL_PollEvent(&amp;amp;event)){&lt;br /&gt;
         //Checks to see if the event is a SDL_QUIT*x on the window is clicked.&lt;br /&gt;
         if(event.type == SDL_QUIT){&lt;br /&gt;
            //Sets the while loop to false and ends program&lt;br /&gt;
            running = false;&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // Play animation&lt;br /&gt;
      Horde3D::setModelAnimParams( model, 0, t, 1.0f );&lt;br /&gt;
    &lt;br /&gt;
      // Set new model position&lt;br /&gt;
      Horde3D::setNodeTransform( model, t * 10, 0, 0,     // Translation&lt;br /&gt;
                                           0, 0, 0,     // Rotation&lt;br /&gt;
                                           1, 1, 1 );   // Scale&lt;br /&gt;
										   &lt;br /&gt;
      // Render scene &lt;br /&gt;
      Horde3D::render( cam );&lt;br /&gt;
    }&lt;br /&gt;
    //Releases the Horde3D Engine&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
    //Releases SDL and quits are program&lt;br /&gt;
    SDL_Quit();  &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 05:28, 1 August 2008 (CEST)&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=268</id>
		<title>Tutorial - Setup Horde with SDL</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=268"/>
				<updated>2008-08-01T03:29:50Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a small example on how to use Horde with sdl. Its a simple frame that closes when the x on the window is clicked.&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= Simple SDL Frame|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SDL.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* args[]){&lt;br /&gt;
    //Creates are bool value for the while loop.&lt;br /&gt;
    bool running = true;&lt;br /&gt;
  &lt;br /&gt;
    //Inits sdl with only the video extention.&lt;br /&gt;
    SDL_Init(SDL_INIT_VIDEO);&lt;br /&gt;
    //Sets are window Caption&lt;br /&gt;
    SDL_WM_SetCaption(&amp;quot;Simple SDL Frame&amp;quot;,NULL);&lt;br /&gt;
    //Sets the sdl video mode width and height as well has creates are opengl context.&lt;br /&gt;
    SDL_SetVideoMode(800,600,32,SDL_OPENGL);&lt;br /&gt;
    //Creates Are Event Reciver&lt;br /&gt;
    SDL_Event event;&lt;br /&gt;
    &lt;br /&gt;
    //Inits Horde3D&lt;br /&gt;
    Horde3D::init();&lt;br /&gt;
    &lt;br /&gt;
    //Sizes the Horde3D View&lt;br /&gt;
    Horde3D::resize( 0, 0, 800, 600 );&lt;br /&gt;
&lt;br /&gt;
    // Add pipeline resource&lt;br /&gt;
    ResHandle pipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;standard.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add model resource&lt;br /&gt;
    ResHandle modelRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;character.scene.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add animation resource&lt;br /&gt;
    ResHandle animRes = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;walk.anim.xml&amp;quot;, 0 );&lt;br /&gt;
    // Load added resources&lt;br /&gt;
    Horde3DUtils::loadResourcesFromDisk( &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add model to scene&lt;br /&gt;
    model = Horde3D::addNodes( RootNode, modelRes );&lt;br /&gt;
    // Apply animation&lt;br /&gt;
    Horde3D::setupModelAnimStage( model, 0, animRes, &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add light source&lt;br /&gt;
    NodeHandle light = Horde3D::addLightNode( RootNode, &amp;quot;Light1&amp;quot;, 0, &amp;quot;LIGHTING&amp;quot;, &amp;quot;SHADOWMAP&amp;quot; );&lt;br /&gt;
    // Set light position and radius&lt;br /&gt;
    Horde3D::setNodeTransform( light, 0, 20, 0, 0, 0, 0, 1, 1, 1 );&lt;br /&gt;
    Horde3D::setLightParam( light, LightNodeParams::Radius, 50.0f );&lt;br /&gt;
	&lt;br /&gt;
    // Add camera&lt;br /&gt;
    cam = Horde3D::addCameraNode( RootNode, &amp;quot;Camera&amp;quot;, pipeRes );&lt;br /&gt;
&lt;br /&gt;
    // Our While loop&lt;br /&gt;
    while(running == true){&lt;br /&gt;
      static float t = 0;&lt;br /&gt;
    &lt;br /&gt;
      // Increase animation time&lt;br /&gt;
      t = t + 10.0f * (1 / 60);&lt;br /&gt;
      //Checks if there is a event that needs processing&lt;br /&gt;
      if(SDL_PollEvent(&amp;amp;event)){&lt;br /&gt;
         //Checks to see if the event is a SDL_QUIT*x on the window is clicked.&lt;br /&gt;
         if(event.type == SDL_QUIT){&lt;br /&gt;
            //Sets the while loop to false and ends program&lt;br /&gt;
            running = false;&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // Play animation&lt;br /&gt;
      Horde3D::setModelAnimParams( model, 0, t, 1.0f );&lt;br /&gt;
    &lt;br /&gt;
      // Set new model position&lt;br /&gt;
      Horde3D::setNodeTransform( model, t * 10, 0, 0,     // Translation&lt;br /&gt;
                                           0, 0, 0,     // Rotation&lt;br /&gt;
                                           1, 1, 1 );   // Scale&lt;br /&gt;
										   &lt;br /&gt;
      // Render scene &lt;br /&gt;
      Horde3D::render( cam );&lt;br /&gt;
    }&lt;br /&gt;
    //Releases the Horde3D Engine&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
    //Releases SDL and quits are program&lt;br /&gt;
    SDL_Quit();  &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 05:28, 1 August 2008 (CEST)&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=267</id>
		<title>Tutorial - Setup Horde with SDL</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=267"/>
				<updated>2008-08-01T03:28:34Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: Small SDL with Horde example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a small example on how to use Horde with sdl. Its a simple frame that closes when the x on the window is clicked.&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= Simple SDL Frame|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SDL.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* args[]){&lt;br /&gt;
    //Creates are bool value for the while loop.&lt;br /&gt;
    bool running = true;&lt;br /&gt;
  &lt;br /&gt;
    //Inits sdl with only the video extention.&lt;br /&gt;
    SDL_Init(SDL_INIT_VIDEO);&lt;br /&gt;
    //Sets are window Caption&lt;br /&gt;
    SDL_WM_SetCaption(&amp;quot;Simple SDL Frame&amp;quot;,NULL);&lt;br /&gt;
    //Sets the sdl video mode width and height as well has creates are opengl context.&lt;br /&gt;
    SDL_SetVideoMode(800,600,32,SDL_OPENGL);&lt;br /&gt;
    //Creates Are Event Reciver&lt;br /&gt;
    SDL_Event event;&lt;br /&gt;
    &lt;br /&gt;
    //Inits Horde3D&lt;br /&gt;
    Horde3D::init();&lt;br /&gt;
    &lt;br /&gt;
    //Sizes the Horde3D View&lt;br /&gt;
    Horde3D::resize( 0, 0, 800, 600 );&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    // Add pipeline resource&lt;br /&gt;
    ResHandle pipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;standard.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add model resource&lt;br /&gt;
    ResHandle modelRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;character.scene.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add animation resource&lt;br /&gt;
    ResHandle animRes = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;walk.anim.xml&amp;quot;, 0 );&lt;br /&gt;
    // Load added resources&lt;br /&gt;
    Horde3DUtils::loadResourcesFromDisk( &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add model to scene&lt;br /&gt;
    model = Horde3D::addNodes( RootNode, modelRes );&lt;br /&gt;
    // Apply animation&lt;br /&gt;
    Horde3D::setupModelAnimStage( model, 0, animRes, &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add light source&lt;br /&gt;
    NodeHandle light = Horde3D::addLightNode( RootNode, &amp;quot;Light1&amp;quot;, 0, &amp;quot;LIGHTING&amp;quot;, &amp;quot;SHADOWMAP&amp;quot; );&lt;br /&gt;
    // Set light position and radius&lt;br /&gt;
    Horde3D::setNodeTransform( light, 0, 20, 0, 0, 0, 0, 1, 1, 1 );&lt;br /&gt;
    Horde3D::setLightParam( light, LightNodeParams::Radius, 50.0f );&lt;br /&gt;
	&lt;br /&gt;
    // Add camera&lt;br /&gt;
    cam = Horde3D::addCameraNode( RootNode, &amp;quot;Camera&amp;quot;, pipeRes );&lt;br /&gt;
&lt;br /&gt;
    // Our While loop&lt;br /&gt;
    while(running == true){&lt;br /&gt;
      static float t = 0;&lt;br /&gt;
    &lt;br /&gt;
      // Increase animation time&lt;br /&gt;
      t = t + 10.0f * (1 / 60);&lt;br /&gt;
      //Checks if there is a event that needs processing&lt;br /&gt;
      if(SDL_PollEvent(&amp;amp;event)){&lt;br /&gt;
         //Checks to see if the event is a SDL_QUIT*x on the window is clicked.&lt;br /&gt;
         if(event.type == SDL_QUIT){&lt;br /&gt;
            //Sets the while loop to false and ends program&lt;br /&gt;
            running = false;&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // Play animation&lt;br /&gt;
      Horde3D::setModelAnimParams( model, 0, t, 1.0f );&lt;br /&gt;
    &lt;br /&gt;
      // Set new model position&lt;br /&gt;
      Horde3D::setNodeTransform( model, t * 10, 0, 0,     // Translation&lt;br /&gt;
                                           0, 0, 0,     // Rotation&lt;br /&gt;
                                           1, 1, 1 );   // Scale&lt;br /&gt;
										   &lt;br /&gt;
      // Render scene &lt;br /&gt;
      Horde3D::render( cam );&lt;br /&gt;
    }&lt;br /&gt;
    //Releases the Horde3D Engine&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
    //Releases SDL and quits are program&lt;br /&gt;
    SDL_Quit();  &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
--[[User:Wild13|Rj]] 05:28, 1 August 2008 (CEST)&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	<entry>
		<id>http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=266</id>
		<title>Tutorial - Setup Horde with SDL</title>
		<link rel="alternate" type="text/html" href="http://horde3d.org/wiki/index.php?title=Tutorial_-_Setup_Horde_with_SDL&amp;diff=266"/>
				<updated>2008-08-01T03:27:45Z</updated>
		
		<summary type="html">&lt;p&gt;Wild13: New page: Here is a small example on how to use Horde with sdl. Its a simple frame that closes when the x on the window is clicked.  {{CppSourceCode| description= Simple SDL Frame| code= &amp;lt;source lan...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a small example on how to use Horde with sdl. Its a simple frame that closes when the x on the window is clicked.&lt;br /&gt;
&lt;br /&gt;
{{CppSourceCode|&lt;br /&gt;
description= Simple SDL Frame|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;Horde3D.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SDL.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* args[]){&lt;br /&gt;
    //Creates are bool value for the while loop.&lt;br /&gt;
    bool running = true;&lt;br /&gt;
  &lt;br /&gt;
    //Inits sdl with only the video extention.&lt;br /&gt;
    SDL_Init(SDL_INIT_VIDEO);&lt;br /&gt;
    //Sets are window Caption&lt;br /&gt;
    SDL_WM_SetCaption(&amp;quot;Simple SDL Frame&amp;quot;,NULL);&lt;br /&gt;
    //Sets the sdl video mode width and height as well has creates are opengl context.&lt;br /&gt;
    SDL_SetVideoMode(800,600,32,SDL_OPENGL);&lt;br /&gt;
    //Creates Are Event Reciver&lt;br /&gt;
    SDL_Event event;&lt;br /&gt;
    &lt;br /&gt;
    //Inits Horde3D&lt;br /&gt;
    Horde3D::init();&lt;br /&gt;
    &lt;br /&gt;
    //Sizes the Horde3D View&lt;br /&gt;
    Horde3D::resize( 0, 0, 800, 600 );&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    // Add pipeline resource&lt;br /&gt;
    ResHandle pipeRes = Horde3D::addResource( ResourceTypes::Pipeline, &amp;quot;standard.pipeline.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add model resource&lt;br /&gt;
    ResHandle modelRes = Horde3D::addResource( ResourceTypes::SceneGraph, &amp;quot;character.scene.xml&amp;quot;, 0 );&lt;br /&gt;
    // Add animation resource&lt;br /&gt;
    ResHandle animRes = Horde3D::addResource( ResourceTypes::Animation, &amp;quot;walk.anim.xml&amp;quot;, 0 );&lt;br /&gt;
    // Load added resources&lt;br /&gt;
    Horde3DUtils::loadResourcesFromDisk( &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add model to scene&lt;br /&gt;
    model = Horde3D::addNodes( RootNode, modelRes );&lt;br /&gt;
    // Apply animation&lt;br /&gt;
    Horde3D::setupModelAnimStage( model, 0, animRes, &amp;quot;&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    // Add light source&lt;br /&gt;
    NodeHandle light = Horde3D::addLightNode( RootNode, &amp;quot;Light1&amp;quot;, 0, &amp;quot;LIGHTING&amp;quot;, &amp;quot;SHADOWMAP&amp;quot; );&lt;br /&gt;
    // Set light position and radius&lt;br /&gt;
    Horde3D::setNodeTransform( light, 0, 20, 0, 0, 0, 0, 1, 1, 1 );&lt;br /&gt;
    Horde3D::setLightParam( light, LightNodeParams::Radius, 50.0f );&lt;br /&gt;
	&lt;br /&gt;
    // Add camera&lt;br /&gt;
    cam = Horde3D::addCameraNode( RootNode, &amp;quot;Camera&amp;quot;, pipeRes );&lt;br /&gt;
&lt;br /&gt;
    // Our While loop&lt;br /&gt;
    while(running == true){&lt;br /&gt;
      static float t = 0;&lt;br /&gt;
    &lt;br /&gt;
      // Increase animation time&lt;br /&gt;
      t = t + 10.0f * (1 / 60);&lt;br /&gt;
      //Checks if there is a event that needs processing&lt;br /&gt;
      if(SDL_PollEvent(&amp;amp;event)){&lt;br /&gt;
         //Checks to see if the event is a SDL_QUIT*x on the window is clicked.&lt;br /&gt;
         if(event.type == SDL_QUIT){&lt;br /&gt;
            //Sets the while loop to false and ends program&lt;br /&gt;
            running = false;&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // Play animation&lt;br /&gt;
      Horde3D::setModelAnimParams( model, 0, t, 1.0f );&lt;br /&gt;
    &lt;br /&gt;
      // Set new model position&lt;br /&gt;
      Horde3D::setNodeTransform( model, t * 10, 0, 0,     // Translation&lt;br /&gt;
                                           0, 0, 0,     // Rotation&lt;br /&gt;
                                           1, 1, 1 );   // Scale&lt;br /&gt;
										   &lt;br /&gt;
      // Render scene &lt;br /&gt;
      Horde3D::render( cam );&lt;br /&gt;
    }&lt;br /&gt;
    //Releases the Horde3D Engine&lt;br /&gt;
    Horde3D::release();&lt;br /&gt;
    //Releases SDL and quits are program&lt;br /&gt;
    SDL_Quit();  &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Wild13</name></author>	</entry>

	</feed>