Gaze::~Gaze() { h3dRemoveNode( m_aux_leye->getHordeID() ); Joint::deleteJoint(m_aux_leye); m_aux_leye = 0; h3dRemoveNode( m_aux_reye->getHordeID() ); Joint::deleteJoint(m_aux_reye); m_aux_reye = 0; }
SceneGraphComponent::~SceneGraphComponent() { if (m_hordeID != 0 && h3dGetNodeType(m_hordeID) != H3DNodeTypes::Undefined) h3dRemoveNode(m_hordeID); SceneGraphManager::instance()->removeComponent(this); unloadTerrainGeoRes(); }
QSceneNode::~QSceneNode() { qDeleteAll(m_childItems); if (m_hordeID != 0 && h3dGetNodeType(m_hordeID) != H3DNodeTypes::Undefined) h3dRemoveNode(m_hordeID); m_hordeID = 0; QDomElement attachment = m_xmlNode.firstChildElement("Attachment"); SceneTreeModel* model = static_cast<SceneTreeModel*>(m_model); if( model && !attachment.isNull()) { AttachmentPlugIn* plugIn = model->nodeFactory()->attachmentPlugIn(); if (plugIn != 0) plugIn->destroyNodeAttachment(this); } h3dReleaseUnusedResources(H3DResTypes::Undefined); m_childItems.clear(); }
Camera::~Camera() { h3dRemoveNode(handle); return; }
// This function's code is from the RecastDemo project's main.cpp file by Mikko Mononen void MyRecastDemo::guiRender() { GLdouble proj[16]; GLdouble model[16]; GLint view[4]; glGetDoublev(GL_PROJECTION_MATRIX, proj); glGetDoublev(GL_MODELVIEW_MATRIX, model); glGetIntegerv(GL_VIEWPORT, view); GLdouble x, y, z; gluUnProject(m_mouseX, m_mouseY, 0.0f, model, proj, view, &x, &y, &z); m_rays[0] = (float)x; m_rays[1] = (float)y; m_rays[2] = (float)z; gluUnProject(m_mouseX, m_mouseY, 1.0f, model, proj, view, &x, &y, &z); m_raye[0] = (float)x; m_raye[1] = (float)y; m_raye[2] = (float)z; glDisable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0, m_width, 0, m_height); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glColor4ub(255,255,255,255); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); m_mouseOverMenu = false; imguiBeginFrame( m_mouseX,m_mouseY,m_mouseBut,m_mouseScroll ); const char msg[] = "W/S/A/D: move (+ shift) | F1: toggle recast gui | F2: toggle node names | F12: invert mouse"; imguiDrawText(280, m_height-20, IMGUI_ALIGN_LEFT, msg, imguiRGBA(255,255,255,200)); if (m_showMenu) { if (m_sample) { m_sample->handleRenderOverlay((double*)proj, (double*)model, (int*)view); } if (imguiBeginScrollArea("Properties", m_width-250-10, 10, 250, m_height-20, &m_propScroll)) m_mouseOverMenu = true; if (imguiCheck("Show Log", m_showLog)) m_showLog = !m_showLog; if (imguiCheck("Show Tools", m_showTools)) m_showTools = !m_showTools; imguiSeparator(); imguiLabel("Sample"); if (imguiButton(m_sampleName)) { if (m_showSample) { m_showSample = false; } else { m_showSample = true; m_showConfig = false; } } imguiSeparator(); imguiLabel("Config File"); if (imguiButton(m_configName)) { if (m_showConfig) { m_showConfig = false; } else { m_showSample = false; m_showConfig = true; scanDirectory("Content", ".xml", m_files); } } if (m_geom) { char text[64]; snprintf(text, 64, "Verts: %.1fk Tris: %.1fk", m_geom->getMesh()->getVertCount()/1000.0f, m_geom->getMesh()->getTriCount()/1000.0f); imguiValue(text); } imguiSeparator(); if (m_geom && m_sample) { imguiSeparatorLine(); m_sample->handleSettings(); if (imguiButton("Build")) { m_ctx.resetLog(); if (!m_sample->handleBuild()) { m_showLog = true; m_logScroll = 0; } m_ctx.dumpLog("Build log %s:", m_configName); } imguiSeparator(); } if (m_sample) { imguiSeparatorLine(); m_sample->handleDebugMode(); } imguiEndScrollArea(); } // Sample selection dialog. if (m_showSample) { static int levelScroll = 0; if (imguiBeginScrollArea("Choose Sample", m_width-10-250-10-200, m_height-10-250, 200, 250, &levelScroll)) m_mouseOverMenu = true; Sample* newSample = 0; for (int i = 0; i < g_nsamples; ++i) { if (imguiItem(g_samples[i].name)) { newSample = g_samples[i].create(); if (newSample) strcpy(m_sampleName, g_samples[i].name); } } if (newSample) { delete m_geom; m_geom = 0; delete m_sample; m_sample = newSample; m_sample->setContext(&m_ctx); if (m_geom && m_sample) { m_sample->handleMeshChanged(m_geom); } else if(!m_geom) { m_geom = new InputGeom(); m_geom->loadMesh( &m_ctx, m_configXmlFile.c_str() ); } if( m_geom && m_sample ) { m_sample->handleMeshChanged(m_geom); m_sample->handleSettings(); } m_showSample = false; } imguiEndScrollArea(); } // Config selection dialog. if (m_showConfig) { static int levelScroll = 0; if (imguiBeginScrollArea("Choose Config File", m_width-10-250-10-200, m_height-10-450, 200, 450, &levelScroll)) m_mouseOverMenu = true; int levelToLoad = -1; for (int i = 0; i < m_files.size; ++i) { if (imguiItem(m_files.files[i])) levelToLoad = i; } if (levelToLoad != -1) { strncpy(m_configName, m_files.files[levelToLoad], sizeof(m_configName)); m_configName[sizeof(m_configName)-1] = '\0'; m_showConfig = false; delete m_geom; m_geom = 0; char path[256]; strcpy(path, "Content/"); strcat(path, m_configName); m_configXmlFile = path; m_geom = new InputGeom(); if( m_loadedSceneGraphRes ) { // Remove previously loaded scene . // Every scene.xml file loaded should group its children in a GroupNode. int nrFoundNodes = h3dFindNodes( H3DRootNode, "", H3DNodeTypes::Group); for( int i = 0; i<2; ++i ) { int node = h3dGetNodeFindResult(i); const char* name = h3dGetNodeParamStr( node, H3DNodeParams::NameStr); std::string camName(name); // Do not delete nodes directly under the root node (e.g. the demo's camera) if( camName.compare("RootNode") != 0) { h3dRemoveNode( h3dGetNodeFindResult(i) ); } } int a = h3dRemoveResource( m_loadedSceneGraphRes ); h3dReleaseUnusedResources(); } if( !loadSceneFileFromConfig( path) ) { m_showLog = true; m_logScroll = 0; m_ctx.log(RC_LOG_ERROR, "Error loading resources from specified scene file."); } if (!m_geom || !m_geom->loadMesh(&m_ctx, m_configXmlFile.c_str()) ) { delete m_geom; m_geom = 0; m_showLog = true; m_logScroll = 0; m_ctx.log(RC_LOG_ERROR, "Error loading nav mesh geometry from: \"%s\"", m_configName); m_ctx.dumpLog("Config: Geom load log %s:", m_configName); } if (m_sample && m_geom) { m_sample->handleMeshChanged(m_geom); } } imguiEndScrollArea(); } // Log if (m_showLog && m_showMenu) { if (imguiBeginScrollArea("Log", 250+20, 10, m_width - 300 - 250, 200, &m_logScroll)) m_mouseOverMenu = true; for (int i = 0; i < m_ctx.getLogCount(); ++i) imguiLabel(m_ctx.getLogText(i)); imguiEndScrollArea(); } // Tools if (!m_showTestCases && m_showTools && m_showMenu) // && m_geom && m_sample) { if (imguiBeginScrollArea("Tools", 10, 10, 250, m_height-20, &m_toolsScroll)) m_mouseOverMenu = true; if (m_sample) m_sample->handleTools(); imguiEndScrollArea(); } m_wasMouseOverMenu = m_mouseOverMenu; if(!m_wasMouseOverMenu) { // In case we move a GUI slider and leave the menu area m_mouseBut = 0; } m_mouseScroll = 0; imguiEndFrame(); imguiRenderGLDraw(); glDisable(GL_BLEND); glEnable(GL_DEPTH_TEST); }