- Timestamp:
- 04/04/06 00:09:44 (19 years ago)
- Location:
- GTP/trunk/App/Demos/Vis/HillyTerrain/OGRE
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/App/Demos/Vis/HillyTerrain/OGRE/TerrainFrameListener.cpp
r679 r723 11 11 #include "OgreOcclusionQueriesQueryManager.h" 12 12 #include "TestCullingTerrainApplication.h" 13 13 #include <string> 14 14 15 15 //-- captions for overlays … … 20 20 "Stop and Wait Culling" 21 21 }; 22 23 //-- captions for overlays 24 String TerrainFrameListener::msApprevAlgorithmCaptions[] = 25 { 26 "CHC", 27 "VFC", 28 "SWC" 29 }; 30 22 31 23 32 String TerrainFrameListener::msQueryTypeCaptions[] = … … 98 107 mVisibilityThreshold(0), 99 108 mAssumedVisibility(0), 109 #if 0 100 110 mCurrentAlgorithm(GtpVisibility::VisibilityEnvironment::COHERENT_HIERARCHICAL_CULLING), 101 //mCurrentAlgorithm(GtpVisibility::VisibilityEnvironment::FRUSTUM_CULLING), 111 #else 112 mCurrentAlgorithm(GtpVisibility::VisibilityEnvironment::FRUSTUM_CULLING), 113 #endif 102 114 mNodeVizMode(NODEVIZ_NONE), 103 mVizCameraHeight(Real( 2500.0)),115 mVizCameraHeight(Real(4000.0)), 104 116 mCamNode(camNode), 105 117 mAppState(WALKTHROUGH), … … 139 151 mPureRenderTimeFps(0.0), 140 152 mNumVideoFrames(0), 141 mDemoFps(0), 142 mUseDemoFps(false), 153 mPrecomputedFps(0), 154 mRecordDemo(false), 155 mSavePrecomputedFps(false), 143 156 mUseArbQueries(false), 144 mUseBufferedInputMouse(false) 157 mUseBufferedInputMouse(false), 158 mVizScale(25) 145 159 { 146 160 //mInputDevice = PlatformManager::getSingleton().createInputReader(); … … 163 177 164 178 //-- overlays 179 165 180 mDebugOverlay = OverlayManager::getSingleton().getByName("Core/DebugOverlay"); 166 181 mHelpOverlay = OverlayManager::getSingleton().getByName("Example/Visibility/HelpOverlay"); … … 168 183 mCullStatsOverlay = OverlayManager::getSingleton().getByName("Example/Visibility/CullStatsOverlay"); 169 184 170 initVisStatsOverlay(); // visibility stats overlay 171 initHelpOverlay(); // help overlay 172 initQueryOverlay(); // visibility query stats overlay 173 174 // show stats overlays 175 showStats(true); 176 185 String ext = "Example/Visibility/"; 186 187 //-- overlays 188 mMyStatsOverlay = OverlayManager::getSingleton().getByName("Example/Visibility/MyStatsOverlay"); 189 mMyStatsAlgorithmInfo = OverlayManager::getSingleton().getOverlayElement("Example/Visibility/MyAlgorithmInfo"); 190 mMyStatsAlgorithmInfo->setCaption("hehaah2"); 191 192 char str[100]; sprintf(str,": %d", 0); 193 mMyStatsFpsInfo = OverlayManager::getSingleton().getOverlayElement("Example/Visibility/MyFpsInfo"); 194 mMyStatsFpsInfo->setCaption(str); 195 //mMyStatsAlgorithmInfo->setTop(top); 196 197 mMyStatsOverlay->show(); 198 199 if (1) 200 { 201 initVisStatsOverlay(); // visibility stats overlay 202 initHelpOverlay(); // help overlay 203 initQueryOverlay(); // visibility query stats overlay 204 205 // show stats overlays 206 showStats(false); 207 } 208 209 // the scale factor for the visualized bounding boxes 210 mSceneMgr->setOption("NodeVizScale", &mVizScale); 211 177 212 // set culling algorithm type 178 213 setAlgorithm(mCurrentAlgorithm); … … 186 221 mSceneMgr->setOption("CullCamera", &mCullCamera); 187 222 mSceneMgr->setOption("PrepareVisualization", &mShowVisualization); 188 223 189 224 setObjectType(mCurrentObjectType); 190 225 … … 201 236 // reset statistics 202 237 mWalkthroughStats.Reset(); 203 } 238 } 239 //----------------------------------------------------------------------- 240 void TerrainFrameListener::switchMouseMode() 241 { 242 mUseBufferedInputMouse = !mUseBufferedInputMouse; 243 mInputDevice->setBufferedInput(true, mUseBufferedInputMouse); 244 245 if (!mUseBufferedInputMouse) 246 CEGUI::MouseCursor::getSingleton().hide(); 247 else 248 CEGUI::MouseCursor::getSingleton().show(); 249 } 204 250 //----------------------------------------------------------------------- 205 251 TerrainFrameListener::~TerrainFrameListener() … … 410 456 /// set the current camera data to loaded frame information 411 457 setCurrentFrameInfo(evt.timeSinceLastFrame); 412 // HACK for demo 413 //addFrameInfo(mSavedFrameInfo, mCamNode, evt.timeSinceLastFrame); 458 459 // HACK for demo: save new frame rates for different methods on the 460 // same walkthrough 461 if (mSavePrecomputedFps) 462 { 463 addFrameInfo(mPrecomputedFpsFrameInfo, mCamNode, evt.timeSinceLastFrame); 464 } 465 414 466 break; 415 467 case WALKTHROUGH: … … 420 472 // print recording message 421 473 mWindow->setDebugText("Recording frame " + 422 StringConverter::toString( mFrameInfo.size() - 1));474 StringConverter::toString((int)mFrameInfo.size() - 1)); 423 475 } 424 476 // move camera according to input … … 654 706 } 655 707 //----------------------------------------------------------------------- 656 void TerrainFrameListener::writeFrames( )657 { 658 std::ofstream ofstr(frames_out_filename); 659 708 void TerrainFrameListener::writeFrames(const std::string filename, 709 const FrameInfoContainer &frameInfo) const 710 { 711 std::ofstream ofstr(filename.c_str()); 660 712 std::vector<frame_info>::const_iterator it, it_end; 661 662 it_end = mFrameInfo.end(); 663 for (it = mFrameInfo.begin(); it < it_end; ++it) 713 it_end = frameInfo.end(); 714 715 int i = 0; 716 717 for (it = frameInfo.begin(); it < it_end; ++ it, ++ i) 664 718 { 665 719 ofstr << StringConverter::toString((*it).position) << " " … … 668 722 << StringConverter::toString((*it).fps) << "\n"; 669 723 } 724 725 std::stringstream d; d << "saved " << i << " frames to file " << filename; 726 Ogre::LogManager::getSingleton().logMessage(d.str()); 727 670 728 ofstr.close(); 671 729 } 672 // quick hack 673 void TerrainFrameListener::writeNewFrameInfo() 674 { 675 std::ofstream ofstr("newframe.out"); 676 677 std::vector<frame_info>::const_iterator it, it_end; 678 679 it_end = mSavedFrameInfo.end(); 680 for (it = mSavedFrameInfo.begin(); it < it_end; ++it) 681 { 682 ofstr << StringConverter::toString((*it).position) << " " 683 << StringConverter::toString((*it).orientation) << " " 684 << StringConverter::toString((*it).timeElapsed) << " " 685 << StringConverter::toString((*it).fps) << "\n"; 686 } 687 ofstr.close(); 688 } 689 //----------------------------------------------------------------------- 690 void TerrainFrameListener::loadFrames() 691 { 692 std::ifstream ifstr(frames_out_filename); 730 //----------------------------------------------------------------------- 731 void TerrainFrameListener::loadFrames(const std::string filename, 732 FrameInfoContainer &frameInfo) 733 { 734 std::ifstream ifstr(filename.c_str()); 693 735 char line[256]; 694 736 frame_info info; 695 737 696 738 // reset current values 697 mFrameInfo.clear(); 739 frameInfo.clear(); 740 698 741 mCurrentFrame = 0; 699 742 int i = 0; 700 743 while (!ifstr.eof()) 701 744 { … … 709 752 // std::stringstream d; d << StringConverter::toString(info.position) << " " << StringConverter::toString(info.orientation); 710 753 // LogManager::getSingleton().logMessage(d.str()); 711 } 754 ++ i; 755 } 756 757 std::stringstream d; 758 d << "loaded " << i << " frames from file " << filename; 759 Ogre::LogManager::getSingleton().logMessage(d.str()); 760 712 761 ifstr.close(); 713 762 } … … 721 770 mAppState = (mAppState + 1) % STATE_NUM; 722 771 723 // if last state was replay state 772 // if last state was replay state: post process 724 773 if (lastState == REPLAY) 725 774 { … … 727 776 mWindow->setDebugText(""); 728 777 729 // hack for producing demo 730 writeNewFrameInfo(); 731 mSavedFrameInfo.clear(); 778 // hack for producing demo: 779 // we produced precomputed fps during the last replay => 780 // save them to file 781 if (mSavePrecomputedFps) //!mPrecomputedFpsFrameInfo.empty()) 782 { 783 std::string filename = msApprevAlgorithmCaptions[mCurrentAlgorithm] + "_frames.out"; 784 785 writeFrames(filename, mPrecomputedFpsFrameInfo); 786 mPrecomputedFpsFrameInfo.clear(); 787 } 732 788 733 789 std::stringstream d; 734 mWalkthroughStats.Print(d, msA lgorithmCaptions[mCurrentAlgorithm]);790 mWalkthroughStats.Print(d, msApprevAlgorithmCaptions[mCurrentAlgorithm]); 735 791 736 792 LogManager::getSingleton().logMessage(d.str()); 737 793 } 738 794 739 // replay recorded walkthrough795 //-- replay recorded walkthrough 740 796 if (mAppState == REPLAY) 741 797 { 742 // no recording during replay 743 mRecordFrames = false; mWindow->setDebugText(""); 744 745 // load recorded walkthrough from disk 746 if (mFrameInfo.size() == 0) 798 // no standard recording during replay 799 mRecordFrames = false; 800 801 // no stats information 802 mWindow->setDebugText(""); 803 804 // clear previous walktrough 805 mFrameInfo.clear(); 806 807 std::string filename; 808 809 // if recording demo, 810 // we use precomputed fps which corresponds to current method, 811 // e.g., for chc we load precomputed chc fps from disc. 812 if (mRecordDemo) 747 813 { 748 loadFrames();814 filename = msApprevAlgorithmCaptions[mCurrentAlgorithm] + "_frames.out"; 749 815 } 750 751 // if there are no recorded frames => set next state 752 if (mFrameInfo.size() == 0) 816 else // standard filename 817 { 818 filename = frames_out_filename; 819 } 820 821 //-- load recorded walkthrough from disk 822 loadFrames(filename, mFrameInfo); 823 824 825 // if there are still no recorded frames, 826 // no walkthrough was recorded => set next state 827 if (mFrameInfo.empty()) 753 828 { 754 829 nextAppState(); 755 830 } 756 else // replay831 else // actual replay 757 832 { 758 833 mWindow->setDebugText("Replay"); 759 834 760 // reset, because we measure fps stats during walkthrough (warning: average fps broken) 835 // reset, because we measure fps stats during walkthrough 836 // (warning: average fps broken) 761 837 mWindow->resetStatistics(); 762 838 mWalkthroughStats.Reset(); … … 781 857 mFrameInfo.clear(); 782 858 } 783 else 784 { 785 writeFrames( ); // write frame info to file859 else // recording just ended => write frame info to file 860 { 861 writeFrames(frames_out_filename, mFrameInfo); 786 862 mWindow->setDebugText(""); 787 863 } … … 818 894 } 819 895 //----------------------------------------------------------------------- 896 void TerrainFrameListener::changeVizScale(const int incr) 897 { 898 mVizScale += incr; 899 900 if (mVizScale < 1) 901 { 902 mVizScale = 1; 903 } 904 905 mSceneMgr->setOption("NodeVizScale", &mVizScale); 906 } 907 908 //----------------------------------------------------------------------- 820 909 void TerrainFrameListener::zoomVizCamera(int zoom) 821 910 { 822 mVizCameraHeight += zoom; 823 if(mVizCameraHeight < 0) mVizCameraHeight = 0; 911 mVizCameraHeight += zoom; 912 913 if(mVizCameraHeight < 0) 914 mVizCameraHeight = 0; 824 915 } 825 916 //----------------------------------------------------------------------- … … 861 952 static String trisString = "Triangle Count: "; 862 953 863 int currentFps = mWindow->getStatistics().lastFPS; 864 865 // HACK for demo: use precomputed FPS 866 if (mUseDemoFps) 867 currentFps = mDemoFps; 954 int currentFps; 955 956 // HACK for demo: use precomputed FPS instead of real FPS 957 if (mRecordDemo) 958 { 959 currentFps = mPrecomputedFps; 960 } 961 else 962 { 963 currentFps = mWindow->getStatistics().lastFPS; 964 } 965 868 966 #if 0 869 967 // HACK: take pure rendering time, only measures the render call … … 885 983 886 984 887 mWalkthroughStats.UpdateFrame(currentFps, mWindow->getBestFPS(), mWindow->getWorstFPS(), 888 (int)mWindow->getTriangleCount(), nodeInfo[0], nodeInfo[1], nodeInfo[2]); 985 mWalkthroughStats.UpdateFrame(currentFps, 986 mWindow->getBestFPS(), 987 mWindow->getWorstFPS(), 988 (int)mWindow->getTriangleCount(), 989 nodeInfo[0], 990 nodeInfo[1], 991 nodeInfo[2]); 889 992 890 993 // HACK: compute average fps ourselfs, because ogre avg. fps is wrong … … 909 1012 //guiCurr->setCaption(currFpsString + StringConverter::toString(currentFps)); 910 1013 } 1014 1015 /*std::stringstream d; 1016 d << "fps: " << StringConverter::toString(currentFps) << ", " 1017 << "avg fps: " << StringConverter::toString(avgFps); 1018 LogManager::getSingleton().logMessage(d.str());*/ 1019 911 1020 //guiAvg->setCaption(avgFps + StringConverter::toString(stats.avgFPS)); 912 1021 guiCurr->setCaption(currFpsString + StringConverter::toString(currentFps)); … … 916 1025 917 1026 guiBest->setCaption(bestFpsString + StringConverter::toString(stats.bestFPS) 918 +" "+StringConverter::toString(stats.bestFrameTime) + " ms");1027 + " " + StringConverter::toString(stats.bestFrameTime) + " ms"); 919 1028 guiWorst->setCaption(worstFpsString + StringConverter::toString(stats.worstFPS) 920 +" "+StringConverter::toString(stats.worstFrameTime) + " ms");1029 + " " + StringConverter::toString(stats.worstFrameTime) + " ms"); 921 1030 922 1031 OverlayElement* guiTris = OverlayManager::getSingleton().getOverlayElement("Core/NumTris"); … … 947 1056 // take old value into account in order to create no sudden changes 948 1057 mSceneMgr->getOption("NumQueriesIssued", &opt); 949 mDelayedQueriesIssued = mDelayedQueriesIssued * 0.8 + (float)opt * 0.2 ;1058 mDelayedQueriesIssued = mDelayedQueriesIssued * 0.8 + (float)opt * 0.2f; 950 1059 sprintf(str,": %d", (int)mDelayedQueriesIssued); 951 1060 mQueriesIssuedInfo->setCaption(str); 952 1061 953 1062 mSceneMgr->getOption("NumTraversedNodes", &opt); 954 mDelayedTraversedNodes = mDelayedTraversedNodes * 0.8 + (float)opt * 0.2 ;1063 mDelayedTraversedNodes = mDelayedTraversedNodes * 0.8 + (float)opt * 0.2f; 955 1064 sprintf(str,": %d", (int)mDelayedTraversedNodes); 956 1065 mTraversedNodesInfo->setCaption(str); 1066 1067 // update stats for demo 1068 mMyStatsAlgorithmInfo->setCaption(msApprevAlgorithmCaptions[mCurrentAlgorithm]); 1069 sprintf(str,": %d", (int)currentFps); 1070 mMyStatsFpsInfo->setCaption(str); 957 1071 958 1072 } … … 1205 1319 mTerrainContentGenerator->WriteObjects(objects_out_filename); 1206 1320 break; 1207 1208 1321 case KC_8: 1209 1322 changeAssumedVisibility(-1); … … 1218 1331 mDeleteObjects = true; 1219 1332 break; 1220 case KC_M: // hack 1221 mUseDemoFps = !mUseDemoFps; 1222 break; 1333 case KC_M: // hack for recording demo using precomputed fps 1334 mRecordDemo = !mRecordDemo; 1335 break; 1336 case KC_E: // hack for recording demo using precomputed fps 1337 mSavePrecomputedFps = !mSavePrecomputedFps; 1338 break; 1339 1223 1340 case KC_Q: 1224 1341 toggleUseArbQueries(); … … 1255 1372 } 1256 1373 //----------------------------------------------------------------------- 1257 void TerrainFrameListener::addFrameInfo(FrameInfoContainer &frameInfos, SceneNode *camNode, Real timeElapsed) 1374 void TerrainFrameListener::addFrameInfo(FrameInfoContainer &frameInfos, 1375 SceneNode *camNode, 1376 Real timeElapsed) 1258 1377 { 1259 1378 frame_info info; … … 1267 1386 } 1268 1387 //----------------------------------------------------------------------- 1269 void TerrainFrameListener::setCurrentFrameInfo( Real timeElapsed)1388 void TerrainFrameListener::setCurrentFrameInfo(const Real timeElapsed) 1270 1389 { 1271 1390 //-- find current frame relative to elapsed frame time … … 1279 1398 1280 1399 // TODO: crashes here if recording / replaying on the same time!! 1281 frame_info new_frame = mFrameInfo[mCurrentFrame];1282 frame_info old_frame = mFrameInfo[mCurrentFrame - 1];1400 const frame_info new_frame = mFrameInfo[mCurrentFrame]; 1401 const frame_info old_frame = mFrameInfo[mCurrentFrame - 1]; 1283 1402 1284 1403 //-- interpolate frames … … 1290 1409 } 1291 1410 1292 Vector3 camPos = old_frame.position + factor1411 const Vector3 camPos = old_frame.position + factor 1293 1412 * (new_frame.position - old_frame.position); 1294 1413 1295 1414 // interpolate the orientation 1296 Quaternion camOrienation = Quaternion::Slerp(factor, old_frame.orientation,1297 new_frame.orientation, true);1298 1299 // HACK : interpolatefps1300 m DemoFps = old_frame.fps + factor * (new_frame.fps -old_frame.fps);1415 const Quaternion camOrienation = 1416 Quaternion::Slerp(factor, old_frame.orientation, new_frame.orientation, true); 1417 1418 // HACK for demo: interpolate precomputed fps 1419 mPrecomputedFps = old_frame.fps + factor * (new_frame.fps - old_frame.fps); 1301 1420 1302 1421 mCamNode->setPosition(camPos); … … 1362 1481 { 1363 1482 zoomVizCamera(-50); 1483 } 1484 1485 if (mInputDevice->isKeyDown(KC_5)) 1486 { 1487 changeVizScale(-1); 1488 } 1489 1490 if (mInputDevice->isKeyDown(KC_6)) 1491 { 1492 changeVizScale(1); 1364 1493 } 1365 1494 -
GTP/trunk/App/Demos/Vis/HillyTerrain/OGRE/TerrainFrameListener.h
r639 r723 81 81 << "best FPS: " << mBestFps << "\n" 82 82 << "worst FPS: " << mWorstFps << "\n" 83 << "#frames: " << mFrameCount << "\n" 83 84 << "avg. #triangles: " << avgTris << " M\n" 84 << "#frames: " << mFrameCount << "\n"85 85 << "avg. #query culled nodes: " << avgFrustumCulledNodes << "\n" 86 86 << "avg. #frustum culled nodes: " << avgQueryCulledNodes << "\n" … … 151 151 152 152 // visualization modes for scene nodes 153 enum {NODEVIZ_NONE, NODEVIZ_RENDER_NODES, NODEVIZ_RENDER_NODES_AND_CONTENT, NODEVIZ_MODES_NUM}; 153 enum { 154 NODEVIZ_NONE, 155 NODEVIZ_RENDER_NODES, 156 NODEVIZ_RENDER_NODES_AND_CONTENT, 157 NODEVIZ_MODES_NUM}; 158 154 159 //enum {NODEVIZ_NONE, NODEVIZ_RENDER_GEOMETRY, NODEVIZ_MODES_NUM}; 155 160 … … 163 168 void moveCamera(); 164 169 165 void writeFrames(); 166 void loadFrames(); 167 168 // quick hack 169 void writeNewFrameInfo(); 170 170 void writeFrames(const std::string filename, const FrameInfoContainer &frameInfo) const; 171 void loadFrames(const std::string filename, FrameInfoContainer &frameInfo); 172 171 173 bool processUnbufferedKeyInput(const FrameEvent& evt); 172 174 bool processUnbufferedMouseInput(const FrameEvent& evt); 173 175 174 void switchMouseMode() 175 { 176 mUseBufferedInputMouse = !mUseBufferedInputMouse; 177 mInputDevice->setBufferedInput(true, mUseBufferedInputMouse); 178 179 if (!mUseBufferedInputMouse) 180 CEGUI::MouseCursor::getSingleton().hide(); 181 else 182 CEGUI::MouseCursor::getSingleton().show(); 183 } 184 176 void switchMouseMode(); 177 185 178 /** Shows the frame / algorithm statistics. 186 179 */ … … 213 206 void changeThreshold(int incr); 214 207 void changeAssumedVisibility(int incr); 208 void changeVizScale(const int incr); 215 209 void setTestGeometryForVisibleLeaves(bool testGeometryForVisibleLeaves); 216 210 /** Shows octree hierarchy of the scene. … … 248 242 249 243 static String msAlgorithmCaptions[]; 244 static String msApprevAlgorithmCaptions[]; 250 245 static String msQueryTypeCaptions[]; 251 246 static String msQueryRelativeVisCaptions[]; … … 288 283 WalkthroughStats mWalkthroughStats; 289 284 290 /// HACK for demo 291 float mDemoFps; 292 bool mUseDemoFps; 285 /// visualization scale 286 float mVizScale; 287 288 //////////////////////////////////////////////////////////////////////// 289 290 /** HACK for recording demo: 291 1) the walkthrough must be recorded. 292 2) the walktrough must be replayed using the different options, e.g., CHC 293 with the mSavePrecomputedFps option. This saves the frame rates 294 for the different methods. 295 3) the walkthrough must then be replayed with the mRecordDemo options turned on. 296 for the video recording we are using FRAPS. 297 */ 298 299 /// the currently interpolated FPS 300 float mPrecomputedFps; 301 /// saves the precomputed fps for the different methods. 302 bool mSavePrecomputedFps; 303 /// displayes the precomputed fps 304 bool mRecordDemo; 305 306 //////////////////////////////////////////////////////////////////////////// 307 293 308 294 309 OverlayElement *mAlgorithmInfo; … … 309 324 OverlayElement *mCurrentObjectTypeInfo; 310 325 326 OverlayElement *mMyStatsAlgorithmInfo; 327 OverlayElement *mMyStatsFpsInfo; 328 311 329 OverlayElement *mQueryTypeInfo; 312 330 OverlayElement *mQueryVisibleNodesInfo; … … 334 352 bool mShowHelp; 335 353 bool mStatsOn; 336 bool mLMouseDown, mRMouseDown; // True if the mouse buttons are down 354 bool mLMouseDown; 355 bool mRMouseDown; // True if the mouse buttons are down 337 356 bool mShutdownRequested; 338 357 bool mDisplayCameraDetails; … … 349 368 /// Per frame data stored for a walkthrough 350 369 FrameInfoContainer mFrameInfo; 351 /// HACK :for demo352 FrameInfoContainer m SavedFrameInfo;370 /// HACK for demo 371 FrameInfoContainer mPrecomputedFpsFrameInfo; 353 372 354 373 Real mReplayTimeElapsed; … … 379 398 Overlay* mCullStatsOverlay; 380 399 Overlay* mQueryOverlay; 400 Overlay* mMyStatsOverlay; 381 401 382 402 Light *mSunLight; -
GTP/trunk/App/Demos/Vis/HillyTerrain/OGRE/TestCullingTerrainApplication.cpp
r679 r723 227 227 void TestCullingTerrainApplication::createScene() 228 228 { 229 Real scale = 3;230 mSceneMgr->setOption("NodeVizScale", &scale);231 232 229 // Set ambient light 233 230 mAmbientLight = ColourValue(0.5, 0.5, 0.5); … … 305 302 { 306 303 // the objects are generated randomly distributed over the terrain 307 generateScene(1000, 0); // create soldiers, trees, ninjas 308 if (0) 309 generateScene(500, 1); 310 generateScene(500, 2); 304 if (1) generateScene(500, 0); // create robots 305 if (0) generateScene(100, 1); // create trees 306 if (0) generateScene(100, 2); // create ninjas 311 307 } 312 308 } -
GTP/trunk/App/Demos/Vis/HillyTerrain/OGRE/TestCullingTerrainApplication.h
r639 r723 10 10 11 11 #include <OgreEntity.h> 12 #include <string> 12 13 13 14 // z order index of visualizaion viewport
Note: See TracChangeset
for help on using the changeset viewer.