Ignore:
Timestamp:
08/10/06 17:08:57 (18 years ago)
Author:
szydlowski
Message:

visualization workin' fine (TM)
demo recording/playback partially implemented

Location:
GTP/trunk/App/Demos/Vis/KdTreeDemo/OGRE/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/App/Demos/Vis/KdTreeDemo/OGRE/src/TestKdTree.cpp

    r1190 r1195  
    246246                        light->setDirection(-1,-1,-1); 
    247247                } 
    248                 light->setDiffuseColour(ColourValue()); 
     248                light->setDiffuseColour(ColourValue::White); 
    249249                light->setSpecularColour(ColourValue(1, 1, 0.2)); 
    250250 
     
    276276        mFrameListener->showDebugOverlay( true ); 
    277277        mRoot->addFrameListener(mFrameListener); 
    278         mWindow->addListener(new KdTreeAppRenderTargetListener(mSceneMgr)); 
     278        mRenderTargerListener = new KdTreeAppRenderTargetListener(mSceneMgr); 
     279        mWindow->addListener(mRenderTargerListener); 
    279280} 
    280281 
     
    312313        mTopCam->setDirection(0,0,-1); 
    313314        mTopCam->pitch(Radian(-Math::HALF_PI)); 
    314         mTopCam->setCullingFrustum(mCamera); 
     315        //mTopCam->setCullingFrustum(mCamera); 
    315316        mTopCam->setNearClipDistance(1); 
    316317 
  • GTP/trunk/App/Demos/Vis/KdTreeDemo/OGRE/src/TestKdTreeAppListener.cpp

    r1192 r1195  
     1#include <fstream> 
     2#include <cstdlib> 
     3 
    14#include "TestKdTreeAppListener.h" 
    25 
     
    9295        } 
    9396 
     97        mTopCamFollow = true; 
    9498        mFreeMove = false; 
    9599        mShowTree = false; 
     
    97101        mVizCamTransVect = Vector3::ZERO; 
    98102        mSeqNum = 0; 
     103 
     104        mAppState = AS_NORMAL; 
    99105 
    100106        mDelayedQueriesIssued = 0.0; 
     
    127133 
    128134        showDebugOverlay(true); 
     135 
     136        loadFrames("demo-in.txt"); 
    129137} 
    130138//----------------------------------------------------------------------- 
     
    139147                PlatformManager::getSingleton().destroyInputReader( mInputDevice ); 
    140148        } 
     149 
     150        // save demo 
     151        if (!mFrameList.empty()) 
     152                saveFrames("demo-out.txt"); 
    141153} 
    142154//----------------------------------------------------------------------- 
     
    183195        const int vert_space = 15; 
    184196        const String na = ": N/A"; 
    185         String sMD, sKT, sKI, sHL, sBM, sRM, sFM; 
     197        String sMD, sKT, sKI, sHL, sBM, sRM, sFM, sTC; 
    186198 
    187199        int top = border_height; 
     
    244256                sFM = ": Ground"; 
    245257 
     258        sTC = na; 
     259        if (mTopCamFollow) 
     260                sTC = ": Follow"; 
     261        else 
     262                sTC = ": Free"; 
     263 
    246264        initOverlayElement(&mRenderMethodInfo, ext, "RenderMethod", top, sRM); top += vert_space; 
    247265        initOverlayElement(&mBuildMethodInfo, ext, "BuildMethod", top, sBM); top += vert_space; 
     
    251269        initOverlayElement(&mKIInfo, ext, "KI", top, sKI); top += vert_space; 
    252270        initOverlayElement(&mMovementInfo, ext, "Movement", top, sFM); top += vert_space; 
     271        initOverlayElement(&mTopCamInfo, ext, "TopCam", top, sTC); top += vert_space; 
    253272 
    254273        OverlayElement *visPanel = OverlayManager::getSingleton(). 
     
    313332bool KdTreeAppListener::processUnbufferedKeyInput(const FrameEvent& evt) 
    314333{ 
     334        // demo recording stuff 
     335        if (mInputDevice->isKeyDown(KC_F5) && mTimeUntilNextToggle <= 0) 
     336        { 
     337                toggleRecord(); 
     338                mTimeUntilNextToggle = 0.5; 
     339        } 
     340 
     341        if (mInputDevice->isKeyDown(KC_F9) && mTimeUntilNextToggle <= 0) 
     342        { 
     343                togglePlayback(); 
     344                mTimeUntilNextToggle = 0.5; 
     345        } 
     346 
     347        const static int vizCamSpeedup = 12; 
    315348        // moving the cull camera 
    316349        if (mInputDevice->isKeyDown(KC_NUMPAD2)) 
    317350        { 
    318                 mVizCamTransVect.y = -mMoveScale; 
     351                mVizCamTransVect.y = -mMoveScale * vizCamSpeedup; 
    319352        } 
    320353        if (mInputDevice->isKeyDown(KC_NUMPAD8)) 
    321354        { 
    322                 mVizCamTransVect.y = mMoveScale; 
     355                mVizCamTransVect.y = mMoveScale * vizCamSpeedup; 
    323356        } 
    324357        if (mInputDevice->isKeyDown(KC_NUMPAD4)) 
    325358        { 
    326                 mVizCamTransVect.x = mMoveScale; 
     359                mVizCamTransVect.x = -mMoveScale * vizCamSpeedup; 
    327360        } 
    328361        if (mInputDevice->isKeyDown(KC_NUMPAD6)) 
    329362        { 
    330                 mVizCamTransVect.x = -mMoveScale; 
     363                mVizCamTransVect.x = mMoveScale * vizCamSpeedup; 
    331364        } 
    332365        if (mInputDevice->isKeyDown(KC_SUBTRACT)) 
    333366        { 
    334                 mVizCamTransVect.z = mMoveScale; 
     367                mVizCamTransVect.z = mMoveScale * vizCamSpeedup; 
    335368        } 
    336369        if (mInputDevice->isKeyDown(KC_ADD)) 
    337370        { 
    338                 mVizCamTransVect.z = -mMoveScale; 
     371                mVizCamTransVect.z = -mMoveScale * vizCamSpeedup; 
    339372        } 
    340373 
    341374        // stuff for the overlay 
    342         static String sNA = ": N/A"; 
     375        const static String sNA = ": N/A"; 
    343376 
    344377        static String bmOptions[] = { "Recursive", "PriorityQueue" }; 
     
    504537        } 
    505538 
    506         if (mInputDevice->isKeyDown(KC_Q) && mTimeUntilNextToggle <= 0) 
     539        if (mInputDevice->isKeyDown(KC_U) && mTimeUntilNextToggle <= 0) 
    507540        { 
    508541                mFreeMove = !mFreeMove; 
    509                 String move = "N/A"; 
     542                String move = ": N/A"; 
    510543                if (mFreeMove) 
    511544                        move = ": Free"; 
     
    518551        } 
    519552 
     553        if (mInputDevice->isKeyDown(KC_I) && mTimeUntilNextToggle <= 0) 
     554        { 
     555                mTopCamFollow = !mTopCamFollow; 
     556                String move = ": N/A"; 
     557                if (mTopCamFollow) 
     558                        move = ": Follow"; 
     559                else 
     560                        move = ": Free"; 
     561 
     562                mTopCamInfo->setCaption(move); 
     563 
     564                mTimeUntilNextToggle = 0.5; 
     565        } 
    520566 
    521567        if (mInputDevice->isKeyDown(KC_BACK) && mTimeUntilNextToggle <= 0) 
     
    801847        mCamNode->translate(mCamNode->getLocalAxes(), mTranslateVector); 
    802848        mTopCam->moveRelative(mVizCamTransVect); 
     849        if (mTopCamFollow) 
     850        { 
     851                Vector3 toppos = mTopCam->getPosition(); 
     852                Vector3 campos = mCamNode->getPosition(); 
     853                mTopCam->setPosition(Vector3::ZERO); 
     854                mTopCam->setOrientation(Quaternion::IDENTITY); 
     855                mTopCam->setPosition(campos.x, toppos.y, campos.z); 
     856                mTopCam->pitch(Radian(-Math::HALF_PI)); 
     857        } 
    803858 
    804859        if (!mFreeMove) 
     
    894949 
    895950        } 
     951 
     952 
     953        //saveFrameInfo(evt.timeSinceLastFrame); 
     954        if (mAppState == AS_RECORD) 
     955        { 
     956                mFrameList.push_back(FrameInfo(mCamNode->getPosition(), mCamNode->getOrientation(), evt.timeSinceLastFrame)); 
     957        } 
     958 
    896959 
    897960        //Camera        *followCam = mSceneMgr->getCamera("FollowCam"); 
     
    9531016        } 
    9541017} 
     1018 
     1019/************************************************************************/ 
     1020/* functions for recording & playback of demos                          */ 
     1021/************************************************************************/ 
     1022 
     1023//----------------------------------------------------------------------------- 
     1024void KdTreeAppListener::toggleRecord() 
     1025{ 
     1026        // TODO: overlay 
     1027        if (mAppState == AS_NORMAL) 
     1028        { 
     1029                mAppState = AS_RECORD; 
     1030        } 
     1031        else if (mAppState == AS_RECORD) 
     1032        { 
     1033                mAppState = AS_NORMAL; 
     1034        } 
     1035} 
     1036 
     1037//----------------------------------------------------------------------------- 
     1038void KdTreeAppListener::togglePlayback() 
     1039{ 
     1040        // TODO: overlay 
     1041        if (mAppState == AS_NORMAL) 
     1042        { 
     1043                mAppState = AS_PLAYBACK; 
     1044        } 
     1045        else if (mAppState == AS_PLAYBACK) 
     1046        { 
     1047                mAppState = AS_NORMAL; 
     1048        } 
     1049} 
     1050 
     1051//----------------------------------------------------------------------------- 
     1052void KdTreeAppListener::saveFrameInfo(Real elapsedTime) 
     1053{ 
     1054        mFrameList.push_back(FrameInfo(mCamNode->getPosition(), mCamNode->getOrientation(), elapsedTime)); 
     1055} 
     1056 
     1057//----------------------------------------------------------------------------- 
     1058void KdTreeAppListener::saveFrames(const String& filename) 
     1059{ 
     1060        // open file 
     1061        std::ofstream dest(filename.c_str()); 
     1062        if (!dest) 
     1063        { 
     1064                LogManager::getSingleton().logMessage("Failed to open file for saving demo: " + filename); 
     1065                return; 
     1066        } 
     1067 
     1068        FrameList::iterator it = mFrameList.begin(); 
     1069        FrameList::iterator end = mFrameList.end(); 
     1070 
     1071        // dump values 
     1072        while (it != end) 
     1073        { 
     1074                dest <<  
     1075                        StringConverter::toString(it->mPosition) << " " <<  
     1076                        StringConverter::toString(it->mOrientation) << " " <<  
     1077                        StringConverter::toString(it->mElapsedTime) << "\n"; 
     1078                ++ it; 
     1079        } 
     1080 
     1081        dest.close(); 
     1082} 
     1083 
     1084//----------------------------------------------------------------------------- 
     1085void KdTreeAppListener::loadFrames(const String& filename) 
     1086{ 
     1087        // open file 
     1088        std::ifstream src(filename.c_str()); 
     1089        if (!src) 
     1090        { 
     1091                LogManager::getSingleton().logMessage("Failed to open file for reading demo: " + filename); 
     1092                return; 
     1093        } 
     1094 
     1095        // clear the list 
     1096        mFrameList.clear(); 
     1097 
     1098        Vector3 pos; 
     1099        Quaternion or; 
     1100        Real time; 
     1101 
     1102        while (!src.eof()) 
     1103        { 
     1104                src >> pos.x;    
     1105                src >> pos.y;    
     1106                src >> pos.z; 
     1107 
     1108                src >> or.w; 
     1109                src >> or.x; 
     1110                src >> or.y; 
     1111                src >> or.z; 
     1112 
     1113                src >> time; 
     1114 
     1115                mFrameList.push_back(FrameInfo(pos, or, time)); 
     1116        } 
     1117 
     1118        // HACK pop last frame, was doubled while reading 
     1119        mFrameList.pop_back(); 
     1120 
     1121        src.close(); 
     1122} 
Note: See TracChangeset for help on using the changeset viewer.