Sophie

Sophie

distrib > Mandriva > 10.0-com > i586 > by-pkgid > 06719cf03808e17ae6f0852ca1052dc2 > files > 1319

libogre1-devel-0.13.0-1mdk.i586.rpm

<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> &nbsp; <a class="qindex" href="namespaces.html">Namespace List</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="classes.html">Alphabetical List</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="namespacemembers.html">Namespace Members</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; <a class="qindex" href="pages.html">Related Pages</a> &nbsp; </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 &lt;<a class="code" href="OgreTerrainSceneManager_8h.html">OgreTerrainSceneManager.h</a>&gt;</font>
00019 <font class="preprocessor">#include &lt;<a class="code" href="OgreImage_8h.html">OgreImage.h</a>&gt;</font>
00020 <font class="preprocessor">#include &lt;<a class="code" href="OgreConfigFile_8h.html">OgreConfigFile.h</a>&gt;</font>
00021 <font class="preprocessor">#include &lt;<a class="code" href="OgreMaterial_8h.html">OgreMaterial.h</a>&gt;</font>
00022 <font class="preprocessor">#include &lt;<a class="code" href="OgreTechnique_8h.html">OgreTechnique.h</a>&gt;</font>
00023 <font class="preprocessor">#include &lt;<a class="code" href="OgrePass_8h.html">OgrePass.h</a>&gt;</font>
00024 <font class="preprocessor">#include &lt;<a class="code" href="OgreCamera_8h.html">OgreCamera.h</a>&gt;</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 &lt;<a class="code" href="OgreRenderSystem_8h.html">OgreRenderSystem.h</a>&gt;</font>
00028 <font class="preprocessor">#include &lt;fstream&gt;</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 &lt; size; i++ )
00044         <font class="keywordflow">for</font> ( size_t j = 0; j &lt; 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>&amp; 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>-&gt;<a class="code" href="classOgre_1_1Material.html#Ogre_1_1Materiala7">getTechnique</a>(0)-&gt;<a class="code" href="classOgre_1_1Technique.html#Ogre_1_1Techniquea6">getPass</a>(0)-&gt;<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>-&gt;<a class="code" href="classOgre_1_1Material.html#Ogre_1_1Materiala7">getTechnique</a>(0)-&gt;<a class="code" href="classOgre_1_1Technique.html#Ogre_1_1Techniquea6">getPass</a>(0)-&gt;<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> -&gt; 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>-&gt;<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>() -&gt; 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 &lt; 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 &lt; 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 &lt; 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 &lt; 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> -&gt; 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 -&gt; setMaterial( <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern4">mTerrainMaterial</a> );
00178             tile -&gt; <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 -&gt; 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 &lt; size; j++ )
00195     {
00196         <font class="keywordflow">for</font> ( i = 0; i &lt; 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 ] -&gt; _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 ] -&gt; _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 ] -&gt; _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 ] -&gt; _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 &lt; size; j++ )
00216         {
00217             <font class="keywordflow">for</font> ( i = 0; i &lt; size; i++ )
00218             {
00219                 <a class="code" href="classOgre_1_1TerrainSceneManager.html#Ogre_1_1TerrainSceneManagern6">mTiles</a>[ i ][ j ] -&gt; _calculateNormals( );
00220                 <font class="comment">//  mTiles[ i ][ j ] -&gt; _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 &lt; size; j++ )</font>
00227 <font class="comment">     {</font>
00228 <font class="comment">         for ( i = 0; i &lt; size; i++ )</font>
00229 <font class="comment">         {</font>
00230 <font class="comment">             mTiles[ i ][ j ] -&gt; _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 -&gt; getPosition();</font>
00248     <font class="comment">//c.y = getHeightAt(c.x, c.z ) + 2;</font>
00249     <font class="comment">//cam -&gt; 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 &lt; ( 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 &lt; ( 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 ] -&gt;_alignNeighbors();
00262         }
00263     }
00264 
00265     <a class="code" href="classOgre_1_1SceneManager.html#Ogre_1_1TerrainSceneManagern20">mDestRenderSystem</a> -&gt; 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 -&gt; <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> &amp; 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 -&gt; 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> &lt; corners[ 0 ].<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m0">x</a> )
00313             tile = tile -&gt; _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> &gt; corners[ 4 ].<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m0">x</a> )
00315             tile = tile -&gt; _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> &lt; corners[ 0 ].<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m2">z</a> )
00317             tile = tile -&gt; _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> &gt; corners[ 4 ].<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m2">z</a> )
00319             tile = tile -&gt; _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> &amp; start, <font class="keyword">const</font> <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> &amp; 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 -&gt; <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 &copy; 2002-2003 by The OGRE Team<br />
Last modified Wed Jan 21 00:10:29 2004
</p>
</body>
</html>