<html> <head> <title>OgreTerrainSceneManager.cpp Source File - OGRE Documentation</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <link type="text/css" rel="stylesheet" href="style.css"> </head> <body> <!-- Generated by Doxygen 1.2.16 --> <center> <a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="namespaces.html">Namespace List</a> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="classes.html">Alphabetical List</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="namespacemembers.html">Namespace Members</a> <a class="qindex" href="functions.html">Compound Members</a> <a class="qindex" href="globals.html">File Members</a> <a class="qindex" href="pages.html">Related Pages</a> </center> <hr><h1>OgreTerrainSceneManager.cpp</h1><a href="OgreTerrainSceneManager_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <font class="comment">/***************************************************************************</font> 00002 <font class="comment">terrainscenemanager.cpp - description</font> 00003 <font class="comment">-------------------</font> 00004 <font class="comment">begin : Mon Sep 23 2002</font> 00005 <font class="comment">copyright : (C) 2002 by Jon Anderson</font> 00006 <font class="comment">email : janders@users.sf.net</font> 00007 <font class="comment">***************************************************************************/</font> 00008 00009 <font class="comment">/***************************************************************************</font> 00010 <font class="comment">* *</font> 00011 <font class="comment">* This program is free software; you can redistribute it and/or modify *</font> 00012 <font class="comment">* it under the terms of the GNU Lesser General Public License as published by *</font> 00013 <font class="comment">* the Free Software Foundation; either version 2 of the License, or *</font> 00014 <font class="comment">* (at your option) any later version. *</font> 00015 <font class="comment">* *</font> 00016 <font class="comment">***************************************************************************/</font> 00017 00018 <font class="preprocessor">#include <<a class="code" href="OgreTerrainSceneManager_8h.html">OgreTerrainSceneManager.h</a>></font> 00019 <font class="preprocessor">#include <<a class="code" href="OgreImage_8h.html">OgreImage.h</a>></font> 00020 <font class="preprocessor">#include <<a class="code" href="OgreConfigFile_8h.html">OgreConfigFile.h</a>></font> 00021 <font class="preprocessor">#include <<a class="code" href="OgreMaterial_8h.html">OgreMaterial.h</a>></font> 00022 <font class="preprocessor">#include <<a class="code" href="OgreTechnique_8h.html">OgreTechnique.h</a>></font> 00023 <font class="preprocessor">#include <<a class="code" href="OgrePass_8h.html">OgrePass.h</a>></font> 00024 <font class="preprocessor">#include <<a class="code" href="OgreCamera_8h.html">OgreCamera.h</a>></font> 00025 <font class="preprocessor">#include "<a class="code" href="OgreException_8h.html">OgreException.h</a>"</font> 00026 <font class="preprocessor">#include "<a class="code" href="OgreStringConverter_8h.html">OgreStringConverter.h</a>"</font> 00027 <font class="preprocessor">#include <<a class="code" href="OgreRenderSystem_8h.html">OgreRenderSystem.h</a>></font> 00028 <font class="preprocessor">#include <fstream></font> 00029 00030 <font class="keyword">namespace </font>Ogre 00031 { 00032 <a name="l00033"></a><a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagera0">00033</a> TerrainSceneManager::TerrainSceneManager() : <a class="code" href="classOgre_1_1OctreeSceneManager.html">OctreeSceneManager</a>( ) 00034 { 00035 <font class="comment">//setDisplaySceneNodes( true );</font> 00036 <font class="comment">//setShowBoxes( true );</font> 00037 } 00038 <a name="l00039"></a><a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagera1">00039</a> TerrainSceneManager::~TerrainSceneManager() 00040 { 00041 size_t size = <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern6">mTiles</a>.size(); 00042 00043 <font class="keywordflow">for</font> ( size_t i = 0; i < size; i++ ) 00044 <font class="keywordflow">for</font> ( size_t j = 0; j < size; j++ ) 00045 <font class="keyword">delete</font> <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern6">mTiles</a>[ i ][ j ]; 00046 } 00047 <a name="l00048"></a><a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagera2">00048</a> <font class="keywordtype">void</font> TerrainSceneManager::setWorldGeometry( <font class="keyword">const</font> <a class="code" href="classOgre_1_1String.html">String</a>& filename ) 00049 { 00050 <font class="keywordtype">int</font> i, j; 00051 00052 <font class="comment">/* Set up the options */</font> 00053 <a class="code" href="classOgre_1_1ConfigFile.html">ConfigFile</a> config; 00054 <a class="code" href="classOgre_1_1TerrainOptions.html">TerrainOptions</a> options; 00055 00056 config.<a class="code" href="classOgre_1_1ConfigFile.html#Ogre_1_1ConfigFilea1">load</a>( filename ); 00057 00058 <font class="keywordflow">if</font> ( config.<a class="code" href="classOgre_1_1ConfigFile.html#Ogre_1_1ConfigFilea2">getSetting</a>( <font class="stringliteral">"DetailTile"</font> ) != <font class="stringliteral">""</font> ) 00059 options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm12">detail_tile</a> = atoi( config.<a class="code" href="classOgre_1_1ConfigFile.html#Ogre_1_1ConfigFilea2">getSetting</a>( <font class="stringliteral">"DetailTile"</font> ) ); 00060 00061 options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm5">max_mipmap</a> = atoi( config.<a class="code" href="classOgre_1_1ConfigFile.html#Ogre_1_1ConfigFilea2">getSetting</a>( <font class="stringliteral">"MaxMipMapLevel"</font> ) ); 00062 00063 options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm6">scalex</a> = atof( config.<a class="code" href="classOgre_1_1ConfigFile.html#Ogre_1_1ConfigFilea2">getSetting</a>( <font class="stringliteral">"ScaleX"</font> ) ); 00064 00065 options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm7">scaley</a> = atof( config.<a class="code" href="classOgre_1_1ConfigFile.html#Ogre_1_1ConfigFilea2">getSetting</a>( <font class="stringliteral">"ScaleY"</font> ) ); 00066 00067 options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm8">scalez</a> = atof( config.<a class="code" href="classOgre_1_1ConfigFile.html#Ogre_1_1ConfigFilea2">getSetting</a>( <font class="stringliteral">"ScaleZ"</font> ) ); 00068 00069 options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm9">max_pixel_error</a> = atoi( config.<a class="code" href="classOgre_1_1ConfigFile.html#Ogre_1_1ConfigFilea2">getSetting</a>( <font class="stringliteral">"MaxPixelError"</font> ) ); 00070 00071 options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm1">size</a> = atoi( config.<a class="code" href="classOgre_1_1ConfigFile.html#Ogre_1_1ConfigFilea2">getSetting</a>( <font class="stringliteral">"TileSize"</font> ) ); 00072 00073 <a class="code" href="classOgre_1_1String.html">String</a> terrain_filename = config.<a class="code" href="classOgre_1_1ConfigFile.html#Ogre_1_1ConfigFilea2">getSetting</a>( <font class="stringliteral">"Terrain"</font> ); 00074 00075 <a class="code" href="classOgre_1_1String.html">String</a> detail_texture = config.<a class="code" href="classOgre_1_1ConfigFile.html#Ogre_1_1ConfigFilea2">getSetting</a>( <font class="stringliteral">"DetailTexture"</font> ); 00076 00077 <a class="code" href="classOgre_1_1String.html">String</a> world_texture = config.<a class="code" href="classOgre_1_1ConfigFile.html#Ogre_1_1ConfigFilea2">getSetting</a>( <font class="stringliteral">"WorldTexture"</font> ); 00078 00079 <font class="keywordflow">if</font> ( config.<a class="code" href="classOgre_1_1ConfigFile.html#Ogre_1_1ConfigFilea2">getSetting</a>( <font class="stringliteral">"VertexColors"</font> ) == <font class="stringliteral">"yes"</font> ) 00080 options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm15">colored</a> = <font class="keyword">true</font>; 00081 00082 <font class="keywordflow">if</font> ( config.<a class="code" href="classOgre_1_1ConfigFile.html#Ogre_1_1ConfigFilea2">getSetting</a>( <font class="stringliteral">"VertexNormals"</font> ) == <font class="stringliteral">"yes"</font> ) 00083 options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm14">lit</a> = <font class="keyword">true</font>; 00084 00085 <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern3">mScale</a> = <a class="code" href="classOgre_1_1Vector3.html">Vector3</a>( options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm6">scalex</a>, options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm7">scaley</a>, options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm8">scalez</a> ); 00086 00087 <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern1">mTileSize</a> = options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm1">size</a>; 00088 00089 <a class="code" href="classOgre_1_1Image.html">Image</a> image; 00090 00091 image.<a class="code" href="classOgre_1_1Image.html#Ogre_1_1Imagea7">load</a>( terrain_filename ); 00092 00093 <font class="comment">//check to make sure it's 2^n + 1 size.</font> 00094 <font class="keywordflow">if</font> ( image.<a class="code" href="classOgre_1_1Image.html#Ogre_1_1Imagea14">getWidth</a>() != image.<a class="code" href="classOgre_1_1Image.html#Ogre_1_1Imagea15">getHeight</a>() || 00095 ! <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagerb0">_checkSize</a>( image.<a class="code" href="classOgre_1_1Image.html#Ogre_1_1Imagea14">getWidth</a>() ) ) 00096 { 00097 <a class="code" href="classOgre_1_1String.html">String</a> err = <font class="stringliteral">"Error: Invalid heightmap size : "</font> + 00098 StringConverter::toString( image.<a class="code" href="classOgre_1_1Image.html#Ogre_1_1Imagea14">getWidth</a>() ) + 00099 <font class="stringliteral">","</font> + StringConverter::toString( image.<a class="code" href="classOgre_1_1Image.html#Ogre_1_1Imagea15">getHeight</a>() ) + 00100 <font class="stringliteral">". Should be 2^n+1, 2^n+1"</font>; 00101 <a class="code" href="OgreException_8h.html#a0">Except</a>( Exception::ERR_INVALIDPARAMS, err, <font class="stringliteral">"TerrainSceneManager::setWorldGeometry"</font> ); 00102 } 00103 00104 <font class="keywordflow">if</font> ( image.<a class="code" href="classOgre_1_1Image.html#Ogre_1_1Imagea18">getFormat</a>() != <a class="code" href="namespaceOgre.html#a623a101">PF_L8</a> ) 00105 { 00106 <a class="code" href="OgreException_8h.html#a0">Except</a>( Exception::ERR_INVALIDPARAMS, <font class="stringliteral">"Error: Image is not a grayscale image."</font>, 00107 <font class="stringliteral">"TerrainSceneManager::setWorldGeometry"</font> ); 00108 } 00109 00110 <font class="keyword">const</font> <a class="code" href="namespaceOgre.html#a350">uchar</a> *data = image. getData(); 00111 00112 <font class="keywordtype">int</font> size = image.<a class="code" href="classOgre_1_1Image.html#Ogre_1_1Imagea14">getWidth</a>(); 00113 00114 <font class="comment">// set up the octree size.</font> 00115 <font class="keywordtype">float</font> max_x = options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm6">scalex</a> * size; 00116 00117 <font class="keywordtype">float</font> max_y = 255 * options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm7">scaley</a>; 00118 00119 <font class="keywordtype">float</font> max_z = options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm8">scalez</a> * size; 00120 00121 <a class="code" href="classOgre_1_1OctreeSceneManager.html#Ogre_1_1TerrainSceneManagera27">resize</a>( <a class="code" href="classOgre_1_1AxisAlignedBox.html">AxisAlignedBox</a>( 0, 0, 0, max_x, max_y, max_z ) ); 00122 00123 00124 00125 options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm0">data</a> = data; 00126 00127 options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm2">world_size</a> = size; 00128 00129 <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern4">mTerrainMaterial</a> = <a class="code" href="classOgre_1_1SceneManager.html#Ogre_1_1TerrainSceneManagera42">createMaterial</a>( <font class="stringliteral">"Terrain"</font> ); 00130 00131 <font class="keywordflow">if</font> ( world_texture != <font class="stringliteral">""</font> ) 00132 <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern4">mTerrainMaterial</a>-><a class="code" href="classOgre_1_1Material.html#Ogre_1_1Materiala7">getTechnique</a>(0)-><a class="code" href="classOgre_1_1Technique.html#Ogre_1_1Techniquea6">getPass</a>(0)-><a class="code" href="classOgre_1_1Pass.html#Ogre_1_1Passa22">createTextureUnitState</a>( world_texture, 0 ); 00133 00134 <font class="keywordflow">if</font> ( detail_texture != <font class="stringliteral">""</font> ) 00135 { 00136 <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern4">mTerrainMaterial</a>-><a class="code" href="classOgre_1_1Material.html#Ogre_1_1Materiala7">getTechnique</a>(0)-><a class="code" href="classOgre_1_1Technique.html#Ogre_1_1Techniquea6">getPass</a>(0)-><a class="code" href="classOgre_1_1Pass.html#Ogre_1_1Passa22">createTextureUnitState</a>( detail_texture, 1 ); 00137 } 00138 00139 <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern4">mTerrainMaterial</a> -> setLightingEnabled( options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm14">lit</a> ); 00140 00141 <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern4">mTerrainMaterial</a>-><a class="code" href="classOgre_1_1Material.html#Ogre_1_1Materiala14">load</a>(); 00142 00143 00144 <font class="comment">//create a root terrain node.</font> 00145 <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern5">mTerrainRoot</a> = <a class="code" href="classOgre_1_1SceneManager.html#Ogre_1_1TerrainSceneManagera46">getRootSceneNode</a>() -> createChildSceneNode( <font class="stringliteral">"Terrain"</font> ); 00146 00147 <font class="comment">//setup the tile array.</font> 00148 <font class="keywordtype">int</font> num_tiles = ( options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm2">world_size</a> - 1 ) / ( options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm1">size</a> - 1 ); 00149 00150 <font class="keywordflow">for</font> ( i = 0; i < num_tiles; i++ ) 00151 { 00152 <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern6">mTiles</a>.push_back( <a class="code" href="namespaceOgre.html#a474">TerrainRow</a>() ); 00153 00154 <font class="keywordflow">for</font> ( j = 0; j < num_tiles; j++ ) 00155 { 00156 <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern6">mTiles</a>[ i ].push_back( 0 ); 00157 } 00158 } 00159 00160 <font class="keywordtype">char</font> name[ 24 ]; 00161 <font class="keywordtype">int</font> p = 0; 00162 <font class="keywordtype">int</font> q = 0; 00163 00164 <font class="keywordflow">for</font> ( j = 0; j < options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm2">world_size</a> - 1; j += ( options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm1">size</a> - 1 ) ) 00165 { 00166 p = 0; 00167 00168 <font class="keywordflow">for</font> ( i = 0; i < options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm2">world_size</a> - 1; i += ( options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm1">size</a> - 1 ) ) 00169 { 00170 options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm3">startx</a> = i; 00171 options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm4">startz</a> = j; 00172 sprintf( name, <font class="stringliteral">"tile[%d,%d]"</font>, p, q ); 00173 00174 <a class="code" href="classOgre_1_1SceneNode.html">SceneNode</a> *c = <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern5">mTerrainRoot</a> -> createChildSceneNode( name ); 00175 <a class="code" href="classOgre_1_1TerrainRenderable.html">TerrainRenderable</a> *tile = <font class="keyword">new</font> <a class="code" href="classOgre_1_1TerrainRenderable.html">TerrainRenderable</a>(); 00176 00177 tile -> setMaterial( <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern4">mTerrainMaterial</a> ); 00178 tile -> <a class="code" href="classOgre_1_1OctreeSceneManager.html#Ogre_1_1TerrainSceneManagera10">init</a>( options ); 00179 00180 <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern6">mTiles</a>[ p ][ q ] = tile; 00181 00182 c -> attachObject( tile ); 00183 p++; 00184 } 00185 00186 q++; 00187 00188 } 00189 00190 00191 <font class="comment">//setup the neighbor links.</font> 00192 size = ( int ) <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern6">mTiles</a>.size(); 00193 00194 <font class="keywordflow">for</font> ( j = 0; j < size; j++ ) 00195 { 00196 <font class="keywordflow">for</font> ( i = 0; i < size; i++ ) 00197 { 00198 <font class="keywordflow">if</font> ( j != size - 1 ) 00199 { 00200 <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern6">mTiles</a>[ i ][ j ] -> _setNeighbor( TerrainRenderable::SOUTH, <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern6">mTiles</a>[ i ][ j + 1 ] ); 00201 <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern6">mTiles</a>[ i ][ j + 1 ] -> _setNeighbor( TerrainRenderable::NORTH, <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern6">mTiles</a>[ i ][ j ] ); 00202 } 00203 00204 <font class="keywordflow">if</font> ( i != size - 1 ) 00205 { 00206 <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern6">mTiles</a>[ i ][ j ] -> _setNeighbor( TerrainRenderable::EAST, <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern6">mTiles</a>[ i + 1 ][ j ] ); 00207 <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern6">mTiles</a>[ i + 1 ][ j ] -> _setNeighbor( TerrainRenderable::WEST, <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern6">mTiles</a>[ i ][ j ] ); 00208 } 00209 00210 } 00211 } 00212 00213 <font class="keywordflow">if</font>(options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm14">lit</a>) 00214 { 00215 <font class="keywordflow">for</font> ( j = 0; j < size; j++ ) 00216 { 00217 <font class="keywordflow">for</font> ( i = 0; i < size; i++ ) 00218 { 00219 <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern6">mTiles</a>[ i ][ j ] -> _calculateNormals( ); 00220 <font class="comment">// mTiles[ i ][ j ] -> _generateVertexLighting( Vector3( 255, 100, 255 ), ColourValue(.25,.25,.25) );</font> 00221 } 00222 } 00223 } 00224 00225 <font class="comment">/*</font> 00226 <font class="comment"> for ( j = 0; j < size; j++ )</font> 00227 <font class="comment"> {</font> 00228 <font class="comment"> for ( i = 0; i < size; i++ )</font> 00229 <font class="comment"> {</font> 00230 <font class="comment"> mTiles[ i ][ j ] -> _generateVertexLighting( Vector3( 255, 50, 255 ), ColourValue( .25, .25, .25 ) );</font> 00231 <font class="comment"> }</font> 00232 <font class="comment"> }</font> 00233 <font class="comment"> */</font> 00234 00235 00236 00237 <font class="comment">// intersectSegment( Vector3(255, getHeightAt(255,255), 255), Vector3(255,50,255), 0 );</font> 00238 00239 00240 } 00241 00242 <a name="l00243"></a><a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagera3">00243</a> <font class="keywordtype">void</font> TerrainSceneManager::_updateSceneGraph( <a class="code" href="classOgre_1_1Camera.html">Camera</a> * cam ) 00244 00245 { 00246 00247 <font class="comment">//Vector3 c = cam -> getPosition();</font> 00248 <font class="comment">//c.y = getHeightAt(c.x, c.z ) + 2;</font> 00249 <font class="comment">//cam -> setPosition( c );</font> 00250 00251 OctreeSceneManager::_updateSceneGraph( cam ); 00252 } 00253 <a name="l00254"></a><a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagera4">00254</a> <font class="keywordtype">void</font> TerrainSceneManager::_renderVisibleObjects( <font class="keywordtype">void</font> ) 00255 { 00256 00257 <font class="keywordflow">for</font> ( <font class="keywordtype">int</font> i = 0; i < ( int ) <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern6">mTiles</a>.size(); i++ ) 00258 { 00259 <font class="keywordflow">for</font> ( <font class="keywordtype">int</font> j = 0; j < ( int ) <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern6">mTiles</a>.size(); j++ ) 00260 { 00261 <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern6">mTiles</a>[ i ][ j ] ->_alignNeighbors(); 00262 } 00263 } 00264 00265 <a class="code" href="classOgre_1_1SceneManager.html#Ogre_1_1TerrainSceneManagern20">mDestRenderSystem</a> -> setLightingEnabled( <font class="keyword">false</font> ); 00266 00267 OctreeSceneManager::_renderVisibleObjects(); 00268 00269 TerrainRenderable::mRenderedTris = 0; 00270 00271 } 00272 <a name="l00273"></a><a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagera5">00273</a> <font class="keywordtype">void</font> TerrainSceneManager::_findVisibleObjects ( <a class="code" href="classOgre_1_1Camera.html">Camera</a> * cam ) 00274 { 00275 OctreeSceneManager::_findVisibleObjects( cam ); 00276 } 00277 <a name="l00278"></a><a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagera6">00278</a> <font class="keywordtype">float</font> TerrainSceneManager::getHeightAt( <font class="keywordtype">float</font> x, <font class="keywordtype">float</font> z ) 00279 { 00280 00281 00282 <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> pt( x, 0, z ); 00283 00284 <a class="code" href="classOgre_1_1TerrainRenderable.html">TerrainRenderable</a> * t = <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagera9">getTerrainTile</a>( pt ); 00285 00286 <font class="keywordflow">if</font> ( t == 0 ) 00287 { 00288 <font class="comment">// printf( "No tile found for point\n" );</font> 00289 <font class="keywordflow">return</font> -1; 00290 } 00291 00292 <font class="keywordtype">float</font> h = t -> <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagera6">getHeightAt</a>( x, z ); 00293 00294 <font class="comment">// printf( "Height is %f\n", h );</font> 00295 <font class="keywordflow">return</font> h; 00296 00297 } 00298 <a name="l00299"></a><a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagera9">00299</a> <a class="code" href="classOgre_1_1TerrainRenderable.html">TerrainRenderable</a> * TerrainSceneManager::getTerrainTile( <font class="keyword">const</font> <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> & pt ) 00300 { 00301 <font class="comment">/* Since we don't know if the terrain is square, or has holes, we use a line trace</font> 00302 <font class="comment"> to find the containing tile...</font> 00303 <font class="comment"> */</font> 00304 00305 <a class="code" href="classOgre_1_1TerrainRenderable.html">TerrainRenderable</a> * tile = <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern6">mTiles</a>[ 0 ][ 0 ]; 00306 00307 <font class="keywordflow">while</font> ( tile != 0 ) 00308 { 00309 <a class="code" href="classOgre_1_1AxisAlignedBox.html">AxisAlignedBox</a> b = tile -> getBoundingBox(); 00310 <font class="keyword">const</font> <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> *corners = b.<a class="code" href="classOgre_1_1AxisAlignedBox.html#Ogre_1_1AxisAlignedBoxa11">getAllCorners</a>(); 00311 00312 <font class="keywordflow">if</font> ( pt.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m0">x</a> < corners[ 0 ].<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m0">x</a> ) 00313 tile = tile -> _getNeighbor( TerrainRenderable::WEST ); 00314 <font class="keywordflow">else</font> <font class="keywordflow">if</font> ( pt.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m0">x</a> > corners[ 4 ].<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m0">x</a> ) 00315 tile = tile -> _getNeighbor( TerrainRenderable::EAST ); 00316 <font class="keywordflow">else</font> <font class="keywordflow">if</font> ( pt.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m2">z</a> < corners[ 0 ].<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m2">z</a> ) 00317 tile = tile -> _getNeighbor( TerrainRenderable::NORTH ); 00318 <font class="keywordflow">else</font> <font class="keywordflow">if</font> ( pt.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m2">z</a> > corners[ 4 ].<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m2">z</a> ) 00319 tile = tile -> _getNeighbor( TerrainRenderable::SOUTH ); 00320 <font class="keywordflow">else</font> 00321 <font class="keywordflow">return</font> tile; 00322 } 00323 00324 <font class="keywordflow">return</font> 0; 00325 } 00326 00327 <a name="l00328"></a><a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagera7">00328</a> <font class="keywordtype">bool</font> TerrainSceneManager::intersectSegment( <font class="keyword">const</font> <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> & start, <font class="keyword">const</font> <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> & end, <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> * result ) 00329 { 00330 00331 <a class="code" href="classOgre_1_1TerrainRenderable.html">TerrainRenderable</a> * t = <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagera9">getTerrainTile</a>( start ); 00332 00333 <font class="keywordflow">if</font> ( t == 0 ) 00334 { 00335 *result = <a class="code" href="classOgre_1_1Vector3.html">Vector3</a>( -1, -1, -1 ); 00336 <font class="keywordflow">return</font> <font class="keyword">false</font>; 00337 } 00338 00339 <font class="keywordflow">return</font> t -> <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagera7">intersectSegment</a>( start, end, result ); 00340 } 00341 00342 } <font class="comment">//namespace</font> </pre></div><p> Copyright © 2002-2003 by The OGRE Team<br /> Last modified Wed Jan 21 00:10:29 2004 </p> </body> </html>