bool MyRecastDemo::loadSceneFileFromConfig( std::string configFilePath ) { glPushAttrib( GL_TEXTURE_BIT ); // Loading the scene changes gl state variables bool isResourceLoaded = false; XMLResults results; XMLNode config = XMLNode::parseFile( configFilePath.c_str(), 0, &results); if (results.error == eXMLErrorNone) { XMLNode sceneFileNode = config.getChildNode( "SceneXMLFile" ); XMLNode workingDirNode = config.getChildNode( "ContentDirectory" ); if( !sceneFileNode.isEmpty() && !workingDirNode.isEmpty() ) { const char* sceneXmlFile = sceneFileNode.getAttribute( "path" ); m_loadedSceneGraphRes = h3dAddResource( H3DResTypes::SceneGraph, sceneXmlFile, 0 ); const char* sceneWorkingDir = workingDirNode.getAttribute( "path" ); isResourceLoaded = h3dutLoadResourcesFromDisk( sceneWorkingDir ); h3dAddNodes( H3DRootNode, m_loadedSceneGraphRes ); } } glPopAttrib(); return isResourceLoaded; }
void CrowdSim::init() { // Init random generator //srand( (unsigned int)time( NULL ) ); srand( 99777 ); // Use fixed value for better performance comparisons // Load character with walk animation H3DRes characterRes = h3dAddResource( H3DResTypes::SceneGraph, "models/man/man.scene.xml", 0 ); H3DRes characterWalkRes = h3dAddResource( H3DResTypes::Animation, "animations/man.anim", 0 ); h3dutLoadResourcesFromDisk( _contentDir.c_str() ); // Add characters for( unsigned int i = 0; i < 100; ++i ) { Particle p; // Add character to scene and apply animation p.node = h3dAddNodes( H3DRootNode, characterRes ); h3dSetupModelAnimStage( p.node, 0, characterWalkRes, 0, "", false ); // Characters start in a circle formation p.px = sinf( (i / 100.0f) * 6.28f ) * 10.0f; p.pz = cosf( (i / 100.0f) * 6.28f ) * 10.0f; chooseDestination( p ); h3dSetNodeTransform( p.node, p.px, 0.02f, p.pz, 0, 0, 0, 1, 1, 1 ); _particles.push_back( p ); } }
static Model makeModelCB() { H3DNodeModel nm; nm.n = h3dAddNodes(H3DRootNode, modelRes); h3dSetNodeFlags(nm.n, H3DNodeFlags::NoCastShadow, true); LOG("Created node %d.", nm.n); return nm.m; } // end makeModelCB
/** * loads a node from the given xml file and attaches it to the joint eye */ Joint* Gaze::createGazeAux(Joint* eye, const char* filename, const char* filedir) { if(m_gazeaux_res == 0) { m_gazeaux_res = h3dAddResource(H3DResTypes::SceneGraph, filename, 0); if( !h3dIsResLoaded(m_gazeaux_res) ) h3dutLoadResourcesFromDisk( filedir ); } H3DNode node = h3dAddNodes( eye->getHordeID(), m_gazeaux_res); return Joint::getInstance(node); }
SCENEGRAPHPLUGINEXP void dllLoadScene( const char* sceneFile ) { GameLog::logMessage("Setting Horde3D Paths"); XMLResults results; XMLNode scene = XMLNode::parseFile( sceneFile, "Configuration", &results); XMLNode& engineSettings(scene.getChildNode("EngineConfig")); if ( !engineSettings.isEmpty() ) { bool loadTextures = _stricmp(engineSettings.getAttribute("loadTextures", "true"), "true") == 0 || _stricmp(engineSettings.getAttribute("loadTextures", "1"), "1") == 0; GameLog::logMessage("LoadTextures: %s", loadTextures ? "enabled" : "disabled"); h3dSetOption( H3DOptions::LoadTextures, loadTextures ? 1.0f : 0.0f ); int shadowMapSize = atoi(engineSettings.getAttribute("shadowMapSize", "1024")); GameLog::logMessage("ShadowMapSize: %d", shadowMapSize); h3dSetOption( H3DOptions::ShadowMapSize, float( shadowMapSize) ); int anisotropyFactor = atoi(engineSettings.getAttribute("anisotropyFactor", "1")); GameLog::logMessage("Anisotropy: %d", anisotropyFactor); h3dSetOption( H3DOptions::MaxAnisotropy, float( anisotropyFactor ) ); bool texCompression = _stricmp(engineSettings.getAttribute("texCompression", "true"), "true") == 0 || _stricmp(engineSettings.getAttribute("texCompression", "1"), "1") == 0; GameLog::logMessage("TexCompression: %s", texCompression ? "enabled" : "disabled"); h3dSetOption( H3DOptions::TexCompression, texCompression ); int maxNumMessages = atoi(engineSettings.getAttribute("maxNumMessages", "1024")); h3dSetOption( H3DOptions::MaxNumMessages, float( maxNumMessages ) ); } // Loading scene graph XMLNode& sceneGraph(scene.getChildNode("SceneGraph")); if ( sceneGraph.isEmpty() ) GameLog::errorMessage("No Scene Graph Node found!"); else { GameLog::logMessage("Loading SceneGraph %s", sceneGraph.getAttribute("path")); // Environment H3DRes sceneGraphID = h3dAddResource( H3DResTypes::SceneGraph, sceneGraph.getAttribute("path"), 0 ); GameLog::logMessage("Loading Resources..."); // Load resources h3dutLoadResourcesFromDisk( "." ); GameLog::logMessage("Adding scene graph to root node"); // Add scene nodes H3DNode newSceneID = h3dAddNodes( H3DRootNode, sceneGraphID); SceneGraphManager::instance()->addNewHordeNode( newSceneID ); } // Use the specified render cam if (scene.getChildNode("ActiveCamera").getAttribute("name") && h3dFindNodes( H3DRootNode, scene.getChildNode("ActiveCamera").getAttribute("name"), H3DNodeTypes::Camera ) > 0) SceneGraphManager::instance()->setActiveCam( h3dGetNodeFindResult(0) ); }
bool Application::init() { // Initialize engine and open default sound device if( !h3dInit() || !h3dOpenDevice( 0x0 ) ) { h3dutDumpMessages(); return false; } // Set options h3dSetOption( H3DOptions::LoadTextures, 1 ); h3dSetOption( H3DOptions::TexCompression, 0 ); h3dSetOption( H3DOptions::FastAnimation, 0 ); h3dSetOption( H3DOptions::MaxAnisotropy, 4 ); h3dSetOption( H3DOptions::ShadowMapSize, 2048 ); // Add resources // Pipelines _hdrPipeRes = h3dAddResource( H3DResTypes::Pipeline, "pipelines/hdr.pipeline.xml", 0 ); _forwardPipeRes = h3dAddResource( H3DResTypes::Pipeline, "pipelines/forward.pipeline.xml", 0 ); // Overlays _fontMatRes = h3dAddResource( H3DResTypes::Material, "overlays/font.material.xml", 0 ); _panelMatRes = h3dAddResource( H3DResTypes::Material, "overlays/panel.material.xml", 0 ); _logoMatRes = h3dAddResource( H3DResTypes::Material, "overlays/logo.material.xml", 0 ); // Environment H3DRes floorRes = h3dAddResource( H3DResTypes::SceneGraph, "models/tiles/tiles.scene.xml", 0 ); // Knight H3DRes speakerRes = h3dAddResource( H3DResTypes::SceneGraph, "models/speaker/speaker.scene.xml", 0 ); // Music _soundRes = h3dAddResource( RST_SoundResource, "sounds/stringed_disco.ogg", 0 ); // Load resources h3dutLoadResourcesFromDisk( _contentDir.c_str() ); // Add scene nodes // Add camera _cam = h3dAddCameraNode( H3DRootNode, "Camera", _hdrPipeRes ); //h3dSetNodeParamI( _cam, CameraNodeParams::OcclusionCulling, 1 ); // Add listener to the camera H3DNode listener = h3dAddListenerNode( _cam, "Listener" ); h3dSetActiveListener( listener ); // Add floor H3DNode floor = h3dAddNodes( H3DRootNode, floorRes ); h3dSetNodeTransform( floor, 0, -0.125, 0, 0, 0, 0, 1, 1, 1 ); // Add the speakers H3DNode speaker1 = h3dAddNodes( H3DRootNode, speakerRes ); h3dSetNodeTransform( speaker1, -2, 0, -2, 0, 215.0f, 0, 1, 1, 1 ); H3DNode speaker2 = h3dAddNodes( H3DRootNode, speakerRes ); h3dSetNodeTransform( speaker2, 2, 0, -2, 0, 145.0f, 0, 1, 1, 1 ); // Add music to the speakers _sound1 = h3dAddSoundNode( speaker1, "Sound1", _soundRes ); _sound2 = h3dAddSoundNode( speaker2, "Sound2", _soundRes ); // Add light source _light = h3dAddLightNode( H3DRootNode, "Light1", 0, "LIGHTING", "SHADOWMAP" ); h3dSetNodeTransform( _light, 0, 7, 0, -90, 0, 0, 1, 1, 1 ); h3dSetNodeParamF( _light, H3DLight::RadiusF, 0, 30 ); h3dSetNodeParamF( _light, H3DLight::FovF, 0, 90 ); h3dSetNodeParamI( _light, H3DLight::ShadowMapCountI, 1 ); h3dSetNodeParamF( _light, H3DLight::ShadowMapBiasF, 0, 0.01f ); // Set the distance model h3dSetDistanceModel( _distanceModel ); // Set the timer so the light immediately gets a random color _lightTimer = 1.0f; // Customize post processing effects H3DRes matRes = h3dFindResource( H3DResTypes::Material, "pipelines/postHDR.material.xml" ); // hdrParams: exposure, brightpass threshold, brightpass offset (see shader for description) h3dSetMaterialUniform( matRes, "hdrParams", 2.0f, 0.6f, 0.08f, 0 ); // Play the music h3dPlaySound( _sound1 ); h3dPlaySound( _sound2 ); return true; }
SCENEGRAPHPLUGINEXP void dllLoadScene( const char* sceneFile ) { GameLog::logMessage("Setting Horde3D Configuration"); XMLResults results; XMLNode scene = XMLNode::parseFile( sceneFile, "Configuration", &results); const XMLNode& engineSettings(scene.getChildNode("EngineConfig")); if ( !engineSettings.isEmpty() ) { int maxLogLevel = atoi(engineSettings.getAttribute("maxLogLevel", "4")); GameLog::logMessage("MaxLogLevel: %d", maxLogLevel); h3dSetOption( H3DOptions::MaxLogLevel, float( maxLogLevel ) ); int maxNumMessages = atoi(engineSettings.getAttribute("maxNumMessages", "1024")); GameLog::logMessage("MaxNumMessages: %d", maxNumMessages); h3dSetOption( H3DOptions::MaxNumMessages, float( maxNumMessages ) ); int trilinearFiltering = atoi(engineSettings.getAttribute("trilinearFiltering", "1")); GameLog::logMessage("TrilinearFiltering: %d", trilinearFiltering); h3dSetOption( H3DOptions::TrilinearFiltering, float( trilinearFiltering ) ); int maxAnisotropy = atoi(engineSettings.getAttribute("maxAnisotropy", "1")); GameLog::logMessage("MaxAnisotropy: %d", maxAnisotropy); h3dSetOption( H3DOptions::MaxAnisotropy, float( maxAnisotropy ) ); bool sRGBLinearization = _stricmp(engineSettings.getAttribute("sRGBLinearization", "0"), "true") == 0 || _stricmp(engineSettings.getAttribute("sRGBLinearization", "0"), "1") == 0; GameLog::logMessage("SRGBLinearization: %s", sRGBLinearization ? "enabled" : "disabled"); h3dSetOption( H3DOptions::SRGBLinearization, sRGBLinearization ); bool texCompression = _stricmp(engineSettings.getAttribute("texCompression", "0"), "true") == 0 || _stricmp(engineSettings.getAttribute("texCompression", "0"), "1") == 0; GameLog::logMessage("TexCompression: %s", texCompression ? "enabled" : "disabled"); h3dSetOption( H3DOptions::TexCompression, texCompression ); bool loadTextures = _stricmp(engineSettings.getAttribute("loadTextures", "1"), "1") == 0 || _stricmp(engineSettings.getAttribute("loadTextures", "1"), "true") == 0; GameLog::logMessage("LoadTextures: %s", loadTextures ? "enabled" : "disabled"); h3dSetOption( H3DOptions::LoadTextures, loadTextures ? 1.0f : 0.0f ); const XMLNode& pathes(scene.getChildNode("EnginePath")); if (!pathes.isEmpty()) { GameLog::logMessage("AnimationPath: %s", pathes.getAttribute("animationpath", "animations")); h3dutSetResourcePath(H3DResTypes::Animation, pathes.getAttribute("animationpath", "animations")); } const XMLNode& engineSettings(scene.getChildNode("EngineConfig")); if ( !engineSettings.isEmpty() ) { bool fastAnim = _stricmp(engineSettings.getAttribute("fastAnimation", "false"), "true") == 0 || _stricmp(engineSettings.getAttribute("fastAnimation", "0"), "1") == 0; GameLog::logMessage("FastAnimation: %s", fastAnim ? "enabled" : "disabled"); h3dSetOption( H3DOptions::FastAnimation, fastAnim ? 1.0f : 0.0f ); } int shadowMapSize = atoi(engineSettings.getAttribute("shadowMapSize", "1024")); GameLog::logMessage("ShadowMapSize: %d", shadowMapSize); h3dSetOption( H3DOptions::ShadowMapSize, float( shadowMapSize) ); int sampleCount = atoi(engineSettings.getAttribute("sampleCount", "0")); GameLog::logMessage("SampleCount: %d", sampleCount); h3dSetOption( H3DOptions::SampleCount, float( sampleCount) ); bool wireframeMode = _stricmp(engineSettings.getAttribute("wireframeMode", "0"), "1") == 0 || _stricmp(engineSettings.getAttribute("wireframeMode", "0"), "true") == 0; GameLog::logMessage("WireframeMode: %s", wireframeMode ? "enabled" : "disabled"); h3dSetOption( H3DOptions::WireframeMode, wireframeMode ); bool debugViewMode = _stricmp(engineSettings.getAttribute("debugViewMode", "0"), "1") == 0 || _stricmp(engineSettings.getAttribute("debugViewMode", "0"), "true") == 0; GameLog::logMessage("DebugViewMode: %s", debugViewMode ? "enabled" : "disabled"); h3dSetOption( H3DOptions::DebugViewMode, debugViewMode ); bool dumpFailedShaders = _stricmp(engineSettings.getAttribute("dumpFailedShaders", "0"), "1") == 0 || _stricmp(engineSettings.getAttribute("dumpFailedShaders", "0"), "true") == 0; GameLog::logMessage("DumpFailedShaders: %s", dumpFailedShaders ? "enabled" : "disabled"); h3dSetOption( H3DOptions::DumpFailedShaders, dumpFailedShaders ); bool gatherTimeStats = _stricmp(engineSettings.getAttribute("gatherTimeStats", "1"), "1") == 0 || _stricmp(engineSettings.getAttribute("gatherTimeStats", "1"), "true") == 0; GameLog::logMessage("GatherTimeStats: %s", gatherTimeStats ? "enabled" : "disabled"); h3dSetOption( H3DOptions::GatherTimeStats, gatherTimeStats ); } const XMLNode& stereoSettings(scene.getChildNode("StereoscopyConfig")); if ( !stereoSettings.isEmpty() ) { const char* modeC = stereoSettings.getAttribute("mode", "0"); unsigned int mode = 0; if (_stricmp(modeC, "0") == 0 || _stricmp(modeC, "disabled") == 0) mode = 0; else if (_stricmp(modeC, "1") == 0 || _stricmp(modeC, "sideBySide") == 0) mode = 1; else if (_stricmp(modeC, "2") == 0 || _stricmp(modeC, "quadBuffering") == 0) mode = 2; SceneGraphManager::instance()->setStereoscopyMode(mode); const char* methodC = stereoSettings.getAttribute("method", "0"); unsigned int method = 0; if (_stricmp(methodC, "0") == 0 || _stricmp(methodC, "toedIn") == 0) method = 0; else if (_stricmp(methodC, "1") == 0 || _stricmp(methodC, "asymmetricFrustum") == 0) method = 1; SceneGraphManager::instance()->setStereoscopyMethod(method); SceneGraphManager::instance()->setStereoscopyParams((float)atof(stereoSettings.getAttribute("eyeOffset", "0.05")), (float)atof(stereoSettings.getAttribute("strabismus", "2.5")), (float)atof(stereoSettings.getAttribute("focalLength", "1"))); const char* stereoPipeline = stereoSettings.getAttribute("renderPipeline"); if (stereoPipeline) { int resID = h3dAddResource( H3DResTypes::Pipeline, stereoPipeline, 0 ); h3dutLoadResourcesFromDisk( "." ); if (resID > 0) SceneGraphManager::instance()->setStereoPipelineResource(resID); } const char* stereoOverlayMaterial = stereoSettings.getAttribute("overlayMaterial"); if (stereoOverlayMaterial) { int materialId = h3dAddResource( H3DResTypes::Material, stereoOverlayMaterial, 0 ); h3dutLoadResourcesFromDisk( "." ); if (materialId > 0) SceneGraphManager::instance()->setStereoOverlayMaterial(materialId); } } // Loading scene graph const XMLNode& sceneGraph(scene.getChildNode("SceneGraph")); if ( sceneGraph.isEmpty() ) GameLog::errorMessage("No Scene Graph Node found!"); else { GameLog::logMessage("Loading SceneGraph %s", sceneGraph.getAttribute("path")); // Environment H3DRes sceneGraphID = h3dAddResource( H3DResTypes::SceneGraph, sceneGraph.getAttribute("path"), 0 ); GameLog::logMessage("Loading Resources..."); // Load resources h3dutLoadResourcesFromDisk( "." ); GameLog::logMessage("Adding scene graph to root node"); // Add scene nodes H3DNode newSceneID = h3dAddNodes( H3DRootNode, sceneGraphID); SceneGraphManager::instance()->addNewHordeNode( newSceneID ); } // Use the specified render cam if (scene.getChildNode("ActiveCamera").getAttribute("name") && h3dFindNodes( H3DRootNode, scene.getChildNode("ActiveCamera").getAttribute("name"), H3DNodeTypes::Camera ) > 0) SceneGraphManager::instance()->setActiveCam( h3dGetNodeFindResult(0) ); }
bool TentacleApplication::init() { // Initialize engine if( !h3dInit() ) { h3dutDumpMessages(); return false; } // Set options h3dSetOption( H3DOptions::LoadTextures, 1 ); h3dSetOption( H3DOptions::TexCompression, 0 ); h3dSetOption( H3DOptions::MaxAnisotropy, 4 ); h3dSetOption( H3DOptions::ShadowMapSize, 2048 ); h3dSetOption( H3DOptions::FastAnimation, 1 ); // Add resources // Pipelines _hdrPipeRes = h3dAddResource( H3DResTypes::Pipeline, "pipelines/hdr.pipeline.xml", 0 ); _forwardPipeRes = h3dAddResource( H3DResTypes::Pipeline, "pipelines/forward.pipeline.xml", 0 ); // Font _fontMatRes = h3dAddResource( H3DResTypes::Material, "overlays/font.material.xml", 0 ); // Logo _logoMatRes = h3dAddResource( H3DResTypes::Material, "overlays/logo.material.xml", 0 ); // invJacXpl //_invJacMatRes = h3dAddResource( H3DResTypes::Material, "materials/invJac.material.xml", 0 ); // Environment H3DRes envRes = h3dAddResource( H3DResTypes::SceneGraph, "models/sphere/sphere.scene.xml", 0 ); // Tentacle H3DRes tentacleRes = h3dAddResource( H3DResTypes::SceneGraph, "models/tentacle.scene.xml", 0 ); // Fly H3DRes flyRes = h3dAddResource( H3DResTypes::SceneGraph, "models/fly.scene.xml", 0 ); _dx = _dy = _dz = 0; // Load resources h3dutLoadResourcesFromDisk( _contentDir.c_str() ); // Add scene nodes // Add camera _cam = h3dAddCameraNode( H3DRootNode, "Camera", _forwardPipeRes ); // Add environment H3DNode env = h3dAddNodes( H3DRootNode, envRes ); h3dSetNodeTransform( env, 0, -20, 0, 0, 0, 0, 20, 20, 20 ); // Add tentacle node _tentacle = h3dAddNodes( H3DRootNode, tentacleRes ); h3dSetNodeTransform( _tentacle, 0, 0, 0, 0, 0, 0.0, 1.0f, 1.0f, 1.0f ); // Create tentacle kinematic chain _tentacleIK = setUpKinematikChain(_tentacle); //cout << _tentacleIK->getEndPosition(_tentacleIK->getNumJoints()-1); //_ikCCDSolver = new SmrCCDSolver(_tentacleIK); //_ikCCDSolver->addConstraintPtr(_ikConstraint); _ikGSMMSolver = new SMRGSMMSolver(_tentacleIK); _ikGSMMSolver->addConstraintPtr(_ikConstraint); _ikInvJacSolver = new SMRInvJacSolver(_tentacleIK); _ikInvJacSolver->addConstraintPtr(_ikConstraint); //delete(_tentacleIK); _currentSolver = _ikInvJacSolver; _ikMethodString = "J pseudo-inverse"; // Add fly node _fly = h3dAddNodes( H3DRootNode, flyRes ); h3dSetNodeTransform( _fly, 0, 4, 0, 0, 0, 0, 0.2f, 0.2f, 0.2f ); // Add light source H3DNode light = h3dAddLightNode( H3DRootNode, "Light1", 0, "LIGHTING", "SHADOWMAP" ); h3dSetNodeTransform( light, 0, 15, 10, -60, 0, 0, 1, 1, 1 ); h3dSetNodeParamF( light, H3DLight::RadiusF,0, 30 ); h3dSetNodeParamF( light, H3DLight::FovF,0, 90 ); h3dSetNodeParamI( light, H3DLight::ShadowMapCountI, 0 ); h3dSetNodeParamF( light, H3DLight::ShadowMapBiasF,0, 0.01f ); h3dSetNodeParamF( light, H3DLight::ColorF3,0, 1.0f ); h3dSetNodeParamF( light, H3DLight::ColorF3,1, 0.8f ); h3dSetNodeParamF( light, H3DLight::ColorF3,2, 0.7f ); // Customize post processing effects H3DNode matRes = h3dFindResource( H3DResTypes::Material, "pipelines/postHDR.material.xml" ); //hdrParams: exposure, brightpass threshold, brightpass offset (see shader for description) h3dSetMaterialUniform( matRes, "hdrParams", 2.5f, 0.5f, 0.08f, 0 ); return true; }
H3DView(int winWidth, int winHeight) : BulletEngineTest(), //model(0), cam(0), frameNum(0), text(NULL), textLen(32), _rx(15), _ry(-50), //_rx(0), _ry(0), _prev_x(0), _prev_y(0), _mouseEnteredThisFrame(false) { assert(view == NULL); view = this; text = new char[textLen]; memset(text, 0, textLen); LOG("Initializing Horde3D..."); h3dInit(); h3dSetOption(H3DOptions::MaxAnisotropy, 8); h3dSetOption(H3DOptions::SampleCount, 16); //h3dSetOption(H3DOptions::WireframeMode, 1); //h3dSetOption(H3DOptions::DebugViewMode, 1); h3dSetOption(H3DOptions::GatherTimeStats, 1); LOG("Declaring resources..."); pipeRes = h3dAddResource(H3DResTypes::Pipeline, "pipelines/forward.pipeline.xml", 0); H3DRes skyBoxRes = h3dAddResource(H3DResTypes::SceneGraph, "models/skybox/skybox.scene.xml", 0); //modelRes = h3dAddResource(H3DResTypes::SceneGraph, "models/AssJacket/AssJacket.scene.xml", 0); //modelRes = h3dAddResource(H3DResTypes::SceneGraph, "models/ares/ares.scene.xml", 0); modelRes = h3dAddResource(H3DResTypes::SceneGraph, "models/man/man.scene.xml", 0); fontMatRes = h3dAddResource(H3DResTypes::Material, "overlays/font.material.xml", 0); panelMatRes = h3dAddResource(H3DResTypes::Material, "overlays/panel.material.xml", 0); LOG("Loading resources from disk..."); h3dutLoadResourcesFromDisk("/home/whitelynx/devel/other/Horde3D/build-make/Binaries/Content" "|/home/whitelynx/devel/skewedaspect/precursors-client/resources/content"); LOG("Building scene..."); /* // Add model to scene model = h3dAddNodes(H3DRootNode, modelRes); h3dSetNodeTransform(model, 0, 0, -500, // Translation 0, 0, 0, // Rotation 1, 1, 1 // Scale ); */ // Add light source H3DNode light = h3dAddLightNode(H3DRootNode, "Light1", 0, "LIGHTING", "SHADOWMAP"); // Set light position and radius h3dSetNodeTransform(light, 0, 20, 0, 0, 0, 0, 10, 10, 10 ); h3dSetNodeParamF(light, H3DLight::RadiusF, 0, 50.0f); LOG("Setting up camera..."); cam = h3dAddCameraNode(H3DRootNode, "Camera", pipeRes); resizeViewport(winWidth, winHeight); #if 1 H3DNode sky = h3dAddNodes(H3DRootNode, skyBoxRes); h3dSetNodeTransform(sky, 0, 0, 0, // Translation 0, 0, 0, // Rotation 210, 50, 210 // Scale ); h3dSetNodeFlags(sky, H3DNodeFlags::NoCastShadow, true); #endif LOG("Setting BulletEngine callbacks..."); setMakeModelCallback(&makeModelCB); setUpdateModelCallback(&updateModelCB); LOG("Initializing physics..."); initPhysics(); LOG("Ready."); } // end H3DView