#include <iostream>
#include <Horde3DUtils.h>
#include <SDL.h>
using namespace std;
H3DNode model = 0, cam = 0;
int main(int argc, char* args[]){
//Creates are bool value for the while loop.
bool running = true;
//Inits sdl with only the video extention.
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
std::cerr << "SDL_Init failed: " << SDL_GetError() << std::endl;
return 0;
}
//Sets are window Caption
SDL_WM_SetCaption("Simple SDL Frame",NULL);
//Sets the sdl video mode width and height as well has creates are opengl context.
if (!SDL_SetVideoMode(800,600,32,SDL_OPENGL)) {
std::cerr << "SDL_SetVideoMode failed: " << SDL_GetError() << std::endl;
return 0;
}
//Creates Our Event Reciver
SDL_Event event;
//Inits Horde3D
h3dInit();
//Sizes the Horde3D View
h3dResize( 0, 0, 800, 600 );
// Add pipeline resource
H3DRes pipeRes = h3dAddResource( H3DResTypes::Pipeline, "standard.pipeline.xml", 0 );
// Add model resource
H3DRes modelRes = h3dAddResource( H3DResTypes::SceneGraph, "character.scene.xml", 0 );
// Add animation resource
H3DRes animRes = h3dAddResource( H3DResTypes::Animation, "walk.anim.xml", 0 );
// Load added resources
h3dutLoadResourcesFromDisk( "" );
// Add model to scene
model = h3dAddNodes( H3DRootNode, modelRes );
// Apply animation
h3dSetupModelAnimStage( model, 0, animRes, "", false );
// Add light source
H3DNode light = h3dAddLightNode( H3DRootNode, "Light1", 0, "LIGHTING", "SHADOWMAP" );
// Set light position and radius
h3dSetNodeTransform( light, 0, 20, 0, 0, 0, 0, 1, 1, 1 );
//Sets the lightnodes radius
h3dSetNodeParamf( light, H3DLight::RadiusF, 0, 50 );
//Sets the lightnodes Field of view
h3dSetNodeParamf( light, H3DLight::FovF, 0, 90 );
//Sets the lightnodes ShadowMapCOunt
h3dSetNodeParami( light, H3DLight::ShadowMapCountI, 0, 3 );
//Sets the lightnodes ShadowSplitLambda
h3dSetNodeParamf( light, H3DLight::ShadowSplitLambdaF, 0, 0.9f );
//Sets the lightnodes ShadowMapBias
h3dSetNodeParamf( light, H3DLight::ShadowMapBiasF, 0, 0.001f );
//Sets the lightnodes red value
h3dSetNodeParamf( light, H3DLight::ColorF3, 0, 0.9f );
//Sets the lightnodes green value
h3dSetNodeParamf( light, H3DLight::ColorF3, 1, 0.7f );
//Sets the lightnodes blue value
h3dSetNodeParamf( light, H3DLight::ColorF3, 2, 0.75f );
// Add camera
cam = h3dAddCameraNode( RootNode, "Camera", pipeRes );
// Our While loop
while(running == true){
static float t = 0;
// Increase animation time
t = t + 10.0f * (1 / 60);
//Checks if there is a event that needs processing
if(SDL_PollEvent(&event)){
//Checks to see if the event is a SDL_QUIT*x on the window is clicked*
if(event.type == SDL_QUIT){
//Sets the while loop to false and ends program
running = false;
}
}
// Play animation
h3dSetModelAnimParams( model, 0, t, 1.0f );
// Set new model position
h3dSetNodeTransform( model, t * 10, 0, 0, // Translation
0, 0, 0, // Rotation
1, 1, 1 ); // Scale
// Render scene
h3dRender( cam );
//Swaps the sdl opengl buffers
SDL_GL_SwapBuffers();
}
//Releases the Horde3D Engine
h3dRelease();
//Releases SDL and quits the program
SDL_Quit();
}