Sophie

Sophie

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

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

<html>
<head>
<title>OgreTerrainRenderable.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>OgreTerrainRenderable.cpp</h1><a href="OgreTerrainRenderable_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <font class="comment">/***************************************************************************</font>
00002 <font class="comment">terrainrenderable.cpp  -  description</font>
00003 <font class="comment">-------------------</font>
00004 <font class="comment">begin                : Sat Oct 5 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="OgreTerrainRenderable_8h.html">OgreTerrainRenderable.h</a>"</font>
00019 <font class="preprocessor">#include &lt;<a class="code" href="OgreSceneNode_8h.html">OgreSceneNode.h</a>&gt;</font>
00020 <font class="preprocessor">#include &lt;<a class="code" href="OgreRenderQueue_8h.html">OgreRenderQueue.h</a>&gt;</font>
00021 <font class="preprocessor">#include &lt;<a class="code" href="OgreRenderOperation_8h.html">OgreRenderOperation.h</a>&gt;</font>
00022 <font class="preprocessor">#include &lt;<a class="code" href="OgreCamera_8h.html">OgreCamera.h</a>&gt;</font>
00023 <font class="preprocessor">#include &lt;<a class="code" href="OgreRoot_8h.html">OgreRoot.h</a>&gt;</font>
00024 
00025 
00026 <font class="keyword">namespace </font>Ogre
00027 {
<a name="l00028"></a><a class="code" href="OgreTerrainRenderable_8cpp.html#a0">00028</a> <font class="preprocessor">#define POSITION_BINDING 0</font>
<a name="l00029"></a><a class="code" href="OgreTerrainRenderable_8cpp.html#a1">00029</a> <font class="preprocessor"></font><font class="preprocessor">#define NORMAL_BINDING 1</font>
<a name="l00030"></a><a class="code" href="OgreTerrainRenderable_8cpp.html#a2">00030</a> <font class="preprocessor"></font><font class="preprocessor">#define TEXCOORD_BINDING 2</font>
<a name="l00031"></a><a class="code" href="OgreTerrainRenderable_8cpp.html#a3">00031</a> <font class="preprocessor"></font><font class="preprocessor">#define COLOUR_BINDING 3</font>
00032 <font class="preprocessor"></font>
<a name="l00033"></a><a class="code" href="namespaceOgre.html#a484">00033</a> <a class="code" href="classOgre_1_1TerrainBufferCache.html">TerrainBufferCache</a> <a class="code" href="namespaceOgre.html#a484">gIndexCache</a>;
00034 
<a name="l00035"></a><a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablep0">00035</a> size_t TerrainRenderable::mRenderedTris = 0;
00036 
<a name="l00037"></a><a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableq0">00037</a> <a class="code" href="classOgre_1_1String.html">String</a> TerrainRenderable::mType = <font class="stringliteral">"TerrainMipMap"</font>;
00038 
<a name="l00039"></a><a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableq1">00039</a> <a class="code" href="namespaceOgre.html#a473">LevelArray</a> TerrainRenderable::mLevelIndex;
<a name="l00040"></a><a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableq2">00040</a> <font class="keywordtype">bool</font> TerrainRenderable::mLevelInit = <font class="keyword">false</font>;
00041 
<a name="l00042"></a><a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea0">00042</a> TerrainRenderable::TerrainRenderable()
00043     : mTerrain(0)
00044 {
00045     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen22">mForcedRenderLevel</a> = -1;
00046 
00047     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen3">mMinLevelDistSqr</a> = 0;
00048 
00049     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen13">mInit</a> = <font class="keyword">false</font>;
00050     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen12">mRenderLevelChanged</a> = <font class="keyword">true</font>;
00051 
00052     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen20">mColored</a> = <font class="keyword">false</font>;
00053     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen21">mLit</a> = <font class="keyword">false</font>;
00054 
00055     <font class="keywordflow">for</font> ( <font class="keywordtype">int</font> i = 0; i &lt; 4; i++ )
00056     {
00057         <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen4">mNeighbors</a>[ i ] = 0;
00058     }
00059 
00060     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb5">_initLevelIndexes</a>();
00061 
00062 }
00063 
<a name="l00064"></a><a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea1">00064</a> TerrainRenderable::~TerrainRenderable()
00065 {
00066 
00067     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea2">deleteGeometry</a>();
00068 }
00069 
<a name="l00070"></a><a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea2">00070</a> <font class="keywordtype">void</font> TerrainRenderable::deleteGeometry()
00071 {
00072     <font class="keywordflow">if</font>(mTerrain)
00073         <font class="keyword">delete</font> <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen0">mTerrain</a>;
00074 
00075     <font class="keywordflow">if</font> ( <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen3">mMinLevelDistSqr</a> != 0 )
00076         <font class="keyword">delete</font> [] <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen3">mMinLevelDistSqr</a>;
00077 }
00078 
<a name="l00079"></a><a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea3">00079</a> <font class="keywordtype">void</font> TerrainRenderable::init( <a class="code" href="classOgre_1_1TerrainOptions.html">TerrainOptions</a> &amp;options )
00080 {
00081     <font class="comment">//ensure that the size works</font>
00082     <font class="keywordflow">if</font> ( ! <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb6">_checkSize</a>( options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm1">size</a> ) )
00083     {
00084         printf( <font class="stringliteral">"Terrain block must size: 2^n+1 ( it's %d )\n"</font>, options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm1">size</a> );
00085         <font class="keywordflow">return</font> ;
00086     }
00087 
00088     <font class="keywordflow">if</font> ( options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm5">max_mipmap</a> != 0 )
00089     {
00090         <font class="keywordtype">int</font> i = ( int ) 1 &lt;&lt; ( options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm5">max_mipmap</a> - 1 ) ;
00091 
00092         <font class="keywordflow">if</font> ( ( i + 1 ) &gt; options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm1">size</a> )
00093         {
00094             printf( <font class="stringliteral">"Invalid maximum mipmap specifed, must be n, such that 2^(n-1)+1 &lt; options.size \n"</font> );
00095             <font class="keywordflow">return</font> ;
00096         }
00097     }
00098 
00099     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea2">deleteGeometry</a>();
00100 
00101     <font class="comment">//calculate min and max heights;</font>
00102     <a class="code" href="namespaceOgre.html#a349">Real</a> min = 256000, max = 0;
00103 
00104     <font class="comment">/* Initialize the variables */</font>
00105     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen21">mLit</a> = options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm14">lit</a>;
00106 
00107     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen20">mColored</a> = options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm15">colored</a>;
00108 
00109     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen14">mNearPlane</a> = options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm10">near_plane</a>;
00110 
00111     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen15">mMaxPixelError</a> = options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm9">max_pixel_error</a>;
00112 
00113     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen16">mVertResolution</a> = options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm11">vert_res</a>;
00114 
00115     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen17">mTopCoord</a> = options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm13">top_coord</a>;
00116 
00117     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a> = options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm1">size</a>;
00118 
00119     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen9">mWorldSize</a> = options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm2">world_size</a>;
00120 
00121     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen1">mNumMipMaps</a> = options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm5">max_mipmap</a>;
00122 
00123     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen0">mTerrain</a> = <font class="keyword">new</font> <a class="code" href="classOgre_1_1VertexData.html">VertexData</a>;
00124     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen0">mTerrain</a>-&gt;<a class="code" href="classOgre_1_1VertexData.html#Ogre_1_1VertexDatam2">vertexStart</a> = 0;
00125     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen0">mTerrain</a>-&gt;<a class="code" href="classOgre_1_1VertexData.html#Ogre_1_1VertexDatam3">vertexCount</a> = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a> * <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a>;
00126 
00127     <a class="code" href="classOgre_1_1VertexDeclaration.html">VertexDeclaration</a>* decl = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen0">mTerrain</a>-&gt;<a class="code" href="classOgre_1_1VertexData.html#Ogre_1_1VertexDatam0">vertexDeclaration</a>;
00128     <a class="code" href="classOgre_1_1VertexBufferBinding.html">VertexBufferBinding</a>* bind = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen0">mTerrain</a>-&gt;<a class="code" href="classOgre_1_1VertexData.html#Ogre_1_1VertexDatam1">vertexBufferBinding</a>;
00129 
00130     <font class="comment">// positions</font>
00131     size_t offset = 0;
00132     decl-&gt;<a class="code" href="classOgre_1_1VertexDeclaration.html#Ogre_1_1VertexDeclarationa3">addElement</a>(<a class="code" href="OgreTerrainRenderable_8cpp.html#a0">POSITION_BINDING</a>, 0, <a class="code" href="namespaceOgre.html#a631a154">VET_FLOAT3</a>, <a class="code" href="namespaceOgre.html#a630a143">VES_POSITION</a>);
00133     decl-&gt;<a class="code" href="classOgre_1_1VertexDeclaration.html#Ogre_1_1VertexDeclarationa3">addElement</a>(<a class="code" href="OgreTerrainRenderable_8cpp.html#a1">NORMAL_BINDING</a>, 0, <a class="code" href="namespaceOgre.html#a631a154">VET_FLOAT3</a>, <a class="code" href="namespaceOgre.html#a630a144">VES_NORMAL</a>);
00134     <font class="comment">// texture coord sets</font>
00135     decl-&gt;<a class="code" href="classOgre_1_1VertexDeclaration.html#Ogre_1_1VertexDeclarationa3">addElement</a>(<a class="code" href="OgreTerrainRenderable_8cpp.html#a2">TEXCOORD_BINDING</a>, offset, <a class="code" href="namespaceOgre.html#a631a153">VET_FLOAT2</a>, <a class="code" href="namespaceOgre.html#a630a149">VES_TEXTURE_COORDINATES</a>, 0);
00136     offset += VertexElement::getTypeSize(<a class="code" href="namespaceOgre.html#a631a153">VET_FLOAT2</a>);
00137     decl-&gt;<a class="code" href="classOgre_1_1VertexDeclaration.html#Ogre_1_1VertexDeclarationa3">addElement</a>(<a class="code" href="OgreTerrainRenderable_8cpp.html#a2">TEXCOORD_BINDING</a>, offset, <a class="code" href="namespaceOgre.html#a631a153">VET_FLOAT2</a>, <a class="code" href="namespaceOgre.html#a630a149">VES_TEXTURE_COORDINATES</a>, 1);
00138     offset += VertexElement::getTypeSize(<a class="code" href="namespaceOgre.html#a631a153">VET_FLOAT2</a>);
00139     decl-&gt;<a class="code" href="classOgre_1_1VertexDeclaration.html#Ogre_1_1VertexDeclarationa3">addElement</a>(<a class="code" href="OgreTerrainRenderable_8cpp.html#a3">COLOUR_BINDING</a>, 0, <a class="code" href="namespaceOgre.html#a631a156">VET_COLOUR</a>, <a class="code" href="namespaceOgre.html#a630a147">VES_DIFFUSE</a>);
00140 
00141     <a class="code" href="classOgre_1_1HardwareVertexBufferSharedPtr.html">HardwareVertexBufferSharedPtr</a> vbuf =
00142         HardwareBufferManager::getSingleton().createVertexBuffer(
00143             decl-&gt;<a class="code" href="classOgre_1_1VertexDeclaration.html#Ogre_1_1VertexDeclarationa9">getVertexSize</a>(<a class="code" href="OgreTerrainRenderable_8cpp.html#a0">POSITION_BINDING</a>),
00144             <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen0">mTerrain</a>-&gt;<a class="code" href="classOgre_1_1VertexData.html#Ogre_1_1VertexDatam3">vertexCount</a>, 
00145             HardwareBuffer::HBU_STATIC_WRITE_ONLY, <font class="keyword">true</font>);
00146 
00147     bind-&gt;<a class="code" href="classOgre_1_1VertexBufferBinding.html#Ogre_1_1VertexBufferBindinga2">setBinding</a>(<a class="code" href="OgreTerrainRenderable_8cpp.html#a0">POSITION_BINDING</a>, vbuf);
00148 
00149     vbuf =
00150         HardwareBufferManager::getSingleton().createVertexBuffer(
00151             decl-&gt;<a class="code" href="classOgre_1_1VertexDeclaration.html#Ogre_1_1VertexDeclarationa9">getVertexSize</a>(<a class="code" href="OgreTerrainRenderable_8cpp.html#a1">NORMAL_BINDING</a>),
00152             <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen0">mTerrain</a>-&gt;<a class="code" href="classOgre_1_1VertexData.html#Ogre_1_1VertexDatam3">vertexCount</a>, 
00153             HardwareBuffer::HBU_STATIC_WRITE_ONLY);
00154 
00155     bind-&gt;<a class="code" href="classOgre_1_1VertexBufferBinding.html#Ogre_1_1VertexBufferBindinga2">setBinding</a>(<a class="code" href="OgreTerrainRenderable_8cpp.html#a1">NORMAL_BINDING</a>, vbuf);
00156 
00157     vbuf =
00158         HardwareBufferManager::getSingleton().createVertexBuffer(
00159             offset,
00160             <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen0">mTerrain</a>-&gt;<a class="code" href="classOgre_1_1VertexData.html#Ogre_1_1VertexDatam3">vertexCount</a>, 
00161             HardwareBuffer::HBU_STATIC_WRITE_ONLY);
00162 
00163     bind-&gt;<a class="code" href="classOgre_1_1VertexBufferBinding.html#Ogre_1_1VertexBufferBindinga2">setBinding</a>(<a class="code" href="OgreTerrainRenderable_8cpp.html#a2">TEXCOORD_BINDING</a>, vbuf);
00164 
00165     vbuf =
00166         HardwareBufferManager::getSingleton().createVertexBuffer(
00167             decl-&gt;<a class="code" href="classOgre_1_1VertexDeclaration.html#Ogre_1_1VertexDeclarationa9">getVertexSize</a>(<a class="code" href="OgreTerrainRenderable_8cpp.html#a3">COLOUR_BINDING</a>),
00168             <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen0">mTerrain</a>-&gt;<a class="code" href="classOgre_1_1VertexData.html#Ogre_1_1VertexDatam3">vertexCount</a>, 
00169             HardwareBuffer::HBU_STATIC_WRITE_ONLY);
00170 
00171     bind-&gt;<a class="code" href="classOgre_1_1VertexBufferBinding.html#Ogre_1_1VertexBufferBindinga2">setBinding</a>(<a class="code" href="OgreTerrainRenderable_8cpp.html#a3">COLOUR_BINDING</a>, vbuf);
00172 
00173     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen13">mInit</a> = <font class="keyword">true</font>;
00174 
00175     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen2">mRenderLevel</a> = 1;
00176 
00177     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen3">mMinLevelDistSqr</a> = <font class="keyword">new</font> <a class="code" href="namespaceOgre.html#a349">Real</a>[ <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen1">mNumMipMaps</a> ];
00178 
00179 
00180     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen7">mScale</a>.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m0">x</a> = options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm6">scalex</a>;
00181 
00182     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen7">mScale</a>.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m1">y</a> = options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm7">scaley</a>;
00183 
00184     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen7">mScale</a>.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m2">z</a> = options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm8">scalez</a>;
00185 
00186 
00187     <a class="code" href="namespaceOgre.html#a53">RGBA</a>* pCol = static_cast&lt;RGBA*&gt;( vbuf-&gt;lock(HardwareBuffer::HBL_DISCARD) );
00188     <font class="keywordflow">for</font> ( <font class="keywordtype">int</font> i = 0; i &lt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a>*<a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a>; i++ )
00189     {
00190         *pCol++ = 0xFFFFFFFF;
00191     }
00192     vbuf-&gt;unlock();
00193 
00194     <font class="keywordtype">int</font> endx = options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm3">startx</a> + options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm1">size</a>;
00195 
00196     <font class="keywordtype">int</font> endz = options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm4">startz</a> + options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm1">size</a>;
00197 
00198     <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> left, down, here;
00199 
00200     vbuf = bind-&gt;<a class="code" href="classOgre_1_1VertexBufferBinding.html#Ogre_1_1VertexBufferBindinga6">getBuffer</a>(<a class="code" href="OgreTerrainRenderable_8cpp.html#a0">POSITION_BINDING</a>);
00201 
00202     <a class="code" href="namespaceOgre.html#a349">Real</a>* pPos = static_cast&lt;Real*&gt;(vbuf-&gt;lock(HardwareBuffer::HBL_DISCARD));
00203 
00204     <a class="code" href="classOgre_1_1HardwareVertexBufferSharedPtr.html">HardwareVertexBufferSharedPtr</a> vtexbuf = bind-&gt;<a class="code" href="classOgre_1_1VertexBufferBinding.html#Ogre_1_1VertexBufferBindinga6">getBuffer</a>(<a class="code" href="OgreTerrainRenderable_8cpp.html#a2">TEXCOORD_BINDING</a>);
00205 
00206     <a class="code" href="namespaceOgre.html#a349">Real</a>* pTex = static_cast&lt;Real*&gt;(vtexbuf-&gt;lock(HardwareBuffer::HBL_DISCARD));
00207 
00208     <font class="keywordflow">for</font> ( <font class="keywordtype">int</font> j = options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm4">startz</a>; j &lt; endz; j++ )
00209     {
00210         <font class="keywordflow">for</font> ( <font class="keywordtype">int</font> i = options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm3">startx</a>; i &lt; endx; i++ )
00211         {
00212             <a class="code" href="namespaceOgre.html#a349">Real</a> height = options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsa1">_worldheight</a>( i, j ) * options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm7">scaley</a>;
00213 
00214             *pPos++ = ( Real ) i * options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm6">scalex</a>; <font class="comment">//x</font>
00215             *pPos++ = height; <font class="comment">//y</font>
00216             *pPos++ = ( Real ) j * options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm8">scalez</a>; <font class="comment">//z</font>
00217 
00218             *pTex++ = ( Real ) i / ( Real ) options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm2">world_size</a> ;
00219             *pTex++ = ( Real ) ( Real ) j / ( Real ) options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm2">world_size</a>;
00220 
00221             *pTex++ = ( ( Real ) i / ( Real ) <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a> ) * options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm12">detail_tile</a>;
00222             *pTex++ = ( ( Real ) ( Real ) j / ( Real ) <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a> ) * options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm12">detail_tile</a>;
00223 
00224             <font class="keywordflow">if</font> ( height &lt; min )
00225                 min = ( Real ) height;
00226 
00227             <font class="keywordflow">if</font> ( height &gt; max )
00228                 max = ( Real ) height;
00229         }
00230     }
00231 
00232     vtexbuf-&gt;unlock();
00233     vbuf-&gt;unlock();
00234 
00235     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen5">mBounds</a>.<a class="code" href="classOgre_1_1AxisAlignedBox.html#Ogre_1_1AxisAlignedBoxa9">setExtents</a>( ( <a class="code" href="namespaceOgre.html#a349">Real</a> ) options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm3">startx</a> * options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm6">scalex</a>, min, ( <a class="code" href="namespaceOgre.html#a349">Real</a> ) options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm4">startz</a> * options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm8">scalez</a>,
00236                         ( <a class="code" href="namespaceOgre.html#a349">Real</a> ) ( endx - 1 ) * options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm6">scalex</a>, max, ( <a class="code" href="namespaceOgre.html#a349">Real</a> ) ( endz - 1 ) * options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm8">scalez</a> );
00237 
00238 
00239     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen6">mCenter</a> = <a class="code" href="classOgre_1_1Vector3.html">Vector3</a>( ( options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm3">startx</a> * options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm6">scalex</a> + endx - 1 ) / 2,
00240                        ( min + max ) / 2,
00241                        ( options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm4">startz</a> * options.<a class="code" href="classOgre_1_1TerrainOptions.html#Ogre_1_1TerrainOptionsm8">scalez</a> + endz - 1 ) / 2 );
00242 
00243 
00244     <a class="code" href="namespaceOgre.html#a349">Real</a> C = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb8">_calculateCFactor</a>();
00245 
00246     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb7">_calculateMinLevelDist2</a>( C );
00247     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea25">_calculateNormals</a>();
00248 
00249 }
00250 
<a name="l00251"></a><a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea18">00251</a> <font class="keywordtype">void</font> TerrainRenderable::_getNormalAt( <font class="keywordtype">float</font> x, <font class="keywordtype">float</font> z, <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> * result )
00252 {
00253 
00254     <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> here, left, down;
00255     here.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m0">x</a> = x;
00256     here.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m1">y</a> = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea19">getHeightAt</a>( x, z );
00257     here.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m2">z</a> = z;
00258 
00259     left.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m0">x</a> = x - 1;
00260     left.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m1">y</a> = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea19">getHeightAt</a>( x - 1, z );
00261     left.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m2">z</a> = z;
00262 
00263     down.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m0">x</a> = x;
00264     down.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m1">y</a> = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea19">getHeightAt</a>( x, z + 1 );
00265     down.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m2">z</a> = z + 1;
00266 
00267     left = left - here;
00268 
00269     down = down - here;
00270 
00271     left.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3a24">normalise</a>();
00272     down.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3a24">normalise</a>();
00273 
00274     *result = left.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3a25">crossProduct</a>( down );
00275     result -&gt; normalise();
00276 
00277     <font class="comment">// result-&gt;x = - result-&gt;x;</font>
00278     <font class="comment">// result-&gt;y = - result-&gt;y;</font>
00279     <font class="comment">// result-&gt;z = - result-&gt;z;</font>
00280 }
00281 
<a name="l00282"></a><a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea25">00282</a> <font class="keywordtype">void</font> TerrainRenderable::_calculateNormals()
00283 {
00284     <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> norm;
00285 
00286     <a class="code" href="classOgre_1_1HardwareVertexBufferSharedPtr.html">HardwareVertexBufferSharedPtr</a> vbuf = 
00287         <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen0">mTerrain</a>-&gt;<a class="code" href="classOgre_1_1VertexData.html#Ogre_1_1VertexDatam1">vertexBufferBinding</a>-&gt;<a class="code" href="classOgre_1_1VertexBufferBinding.html#Ogre_1_1VertexBufferBindinga6">getBuffer</a>(<a class="code" href="OgreTerrainRenderable_8cpp.html#a1">NORMAL_BINDING</a>);
00288     <a class="code" href="namespaceOgre.html#a349">Real</a>* pNorm = static_cast&lt;Real*&gt;( vbuf-&gt;lock(HardwareBuffer::HBL_DISCARD) );
00289 
00290     <font class="keywordflow">for</font> ( <font class="keywordtype">int</font> j = 0; j &lt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a>; j++ )
00291     {
00292         <font class="keywordflow">for</font> ( <font class="keywordtype">int</font> i = 0; i &lt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a>; i++ )
00293         {
00294 
00295             <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea18">_getNormalAt</a>( <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb1">_vertex</a>( i, j, 0 ), <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb1">_vertex</a>( i, j, 2 ), &amp;norm );
00296 
00297             <font class="comment">//  printf( "Normal = %5f,%5f,%5f\n", norm.x, norm.y, norm.z );</font>
00298 
00299             *pNorm++ = norm.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m0">x</a>;
00300             *pNorm++ = norm.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m1">y</a>;
00301             *pNorm++ = norm.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m2">z</a>;
00302         }
00303 
00304     }
00305     vbuf-&gt;unlock();
00306 }
00307 
<a name="l00308"></a><a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea7">00308</a> <font class="keywordtype">void</font> TerrainRenderable::_notifyCurrentCamera( <a class="code" href="classOgre_1_1Camera.html">Camera</a>* cam )
00309 {
00310 
00311     <font class="keywordflow">if</font> ( <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen22">mForcedRenderLevel</a> &gt;= 0 )
00312     {
00313         <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen2">mRenderLevel</a> = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen22">mForcedRenderLevel</a>;
00314         <font class="keywordflow">return</font> ;
00315     }
00316 
00317 
00318     <font class="keywordtype">int</font> old_level = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen2">mRenderLevel</a>;
00319 
00320     <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> cpos = cam -&gt; getPosition();
00321     <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> diff = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen6">mCenter</a> - cpos;
00322 
00323     <a class="code" href="namespaceOgre.html#a349">Real</a> L = diff.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3a22">squaredLength</a>();
00324 
00325     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen19">current_L</a> = L;
00326 
00327 
00328     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen2">mRenderLevel</a> = -1;
00329 
00330     <font class="keywordflow">for</font> ( <font class="keywordtype">int</font> i = 0; i &lt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen1">mNumMipMaps</a>; i++ )
00331     {
00332         <font class="keywordflow">if</font> ( <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen3">mMinLevelDistSqr</a>[ i ] &gt; L )
00333         {
00334             <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen2">mRenderLevel</a> = i - 1;
00335             <font class="keywordflow">break</font>;
00336         }
00337     }
00338 
00339     <font class="keywordflow">if</font> ( <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen2">mRenderLevel</a> &lt; 0 )
00340         <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen2">mRenderLevel</a> = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen1">mNumMipMaps</a> - 1;
00341 
00342 
00343     <font class="comment">// mRenderLevel = 4;</font>
00344 
00345 }
00346 
<a name="l00347"></a><a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea8">00347</a> <font class="keywordtype">void</font> TerrainRenderable::_updateRenderQueue( <a class="code" href="classOgre_1_1RenderQueue.html">RenderQueue</a>* queue )
00348 {
00349     queue-&gt;<a class="code" href="classOgre_1_1RenderQueue.html#Ogre_1_1RenderQueuea3">addRenderable</a>( <font class="keyword">this</font> );
00350 }
00351 
<a name="l00352"></a><a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea9">00352</a> <font class="keywordtype">void</font> TerrainRenderable::getRenderOperation( <a class="code" href="classOgre_1_1RenderOperation.html">RenderOperation</a>&amp; op )
00353 {
00354     <font class="comment">//setup indexes for vertices and uvs...</font>
00355 
00356     <font class="keywordflow">if</font> ( !<a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen13">mInit</a> )
00357     {
00358         printf( <font class="stringliteral">"Uninitialized\n"</font> );
00359         <font class="keywordflow">return</font> ;
00360     }
00361 
00362     <font class="comment">/*</font>
00363 <font class="comment">    int j=0;</font>
00364 <font class="comment">    for( j=0; j&lt;mSize; j+= (mRenderLevel*2) ) //depth</font>
00365 <font class="comment">    {</font>
00366 <font class="comment">    int i=0;</font>
00367 <font class="comment">    if( j != 0 )</font>
00368 <font class="comment">    {</font>
00369 <font class="comment">    //two degenerate tris to turn the corner...</font>
00370 <font class="comment">    pIndexes[nupIndexes] = _index(i, j+mRenderLevel ); nupIndexes++;</font>
00371 <font class="comment">    pIndexes[numIndexes] = _index(i, j+mRenderLevel ); numIndexes++;</font>
00372 <font class="comment">}</font>
00373 <font class="comment"></font>
00374 <font class="comment">    //forward strip...</font>
00375 <font class="comment">    for( i=0; i&lt;mSize; i+= mRenderLevel ) //accross</font>
00376 <font class="comment">    {</font>
00377 <font class="comment">    pIndexes[numIndexes] = _index(i, j ); numIndexes++;</font>
00378 <font class="comment">    pIndexes[numIndexes] = _index(i, j+mRenderLevel ); numIndexes++;</font>
00379 <font class="comment">}</font>
00380 <font class="comment">    i -= mRenderLevel; //backtrack...</font>
00381 <font class="comment"></font>
00382 <font class="comment"></font>
00383 <font class="comment">    //degenerate tris to turn the corner...</font>
00384 <font class="comment"></font>
00385 <font class="comment">    pIndexes[numIndexes] = _index(i, j+mRenderLevel ); numIndexes++;</font>
00386 <font class="comment">    pIndexes[numIndexes] = _index(i, j+mRenderLevel ); numIndexes++;</font>
00387 <font class="comment"></font>
00388 <font class="comment">    //back strip</font>
00389 <font class="comment">    for( i = mSize-mRenderLevel; i&gt;=0; i-=mRenderLevel )</font>
00390 <font class="comment">    {</font>
00391 <font class="comment">    pIndexes[numIndexes] = _index(i, j+mRenderLevel ); numIndexes++;</font>
00392 <font class="comment">    pIndexes[numIndexes] = _index(i, j ); numIndexes++;</font>
00393 <font class="comment">}</font>
00394 <font class="comment"></font>
00395 <font class="comment">}</font>
00396 <font class="comment">    */</font>
00397 
00398     <font class="keywordtype">int</font> east = 0, west = 0, north = 0, south = 0;
00399 
00400     <font class="keywordtype">int</font> step = 1 &lt;&lt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen2">mRenderLevel</a>;
00401 
00402     <font class="keywordtype">int</font> index_array = 0;
00403 
00404     <font class="keywordtype">int</font> numIndexes = 0;
00405 
00406     <font class="keywordflow">if</font> ( <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen4">mNeighbors</a>[ <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderables5Ogre_1_1TerrainRenderables2">EAST</a> ] != 0 &amp;&amp; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen4">mNeighbors</a>[ <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderables5Ogre_1_1TerrainRenderables2">EAST</a> ] -&gt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen2">mRenderLevel</a> &gt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen2">mRenderLevel</a> )
00407     {
00408         east = step; index_array |= <a class="code" href="OgreTerrainRenderable_8h.html#a3">TILE_EAST</a>;
00409     }
00410 
00411     <font class="keywordflow">if</font> ( <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen4">mNeighbors</a>[ <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderables5Ogre_1_1TerrainRenderables3">WEST</a> ] != 0 &amp;&amp; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen4">mNeighbors</a>[ <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderables5Ogre_1_1TerrainRenderables3">WEST</a> ] -&gt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen2">mRenderLevel</a> &gt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen2">mRenderLevel</a> )
00412     {
00413         west = step; index_array |= <a class="code" href="OgreTerrainRenderable_8h.html#a2">TILE_WEST</a>;
00414     }
00415 
00416     <font class="keywordflow">if</font> ( <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen4">mNeighbors</a>[ <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderables5Ogre_1_1TerrainRenderables0">NORTH</a> ] != 0 &amp;&amp; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen4">mNeighbors</a>[ <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderables5Ogre_1_1TerrainRenderables0">NORTH</a> ] -&gt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen2">mRenderLevel</a> &gt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen2">mRenderLevel</a> )
00417     {
00418         north = step; index_array |= <a class="code" href="OgreTerrainRenderable_8h.html#a0">TILE_NORTH</a>;
00419     }
00420 
00421     <font class="keywordflow">if</font> ( <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen4">mNeighbors</a>[ <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderables5Ogre_1_1TerrainRenderables1">SOUTH</a> ] != 0 &amp;&amp; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen4">mNeighbors</a>[ <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderables5Ogre_1_1TerrainRenderables1">SOUTH</a> ] -&gt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen2">mRenderLevel</a> &gt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen2">mRenderLevel</a> )
00422     {
00423         south = step; index_array |= <a class="code" href="OgreTerrainRenderable_8h.html#a1">TILE_SOUTH</a>;
00424     }
00425 
00426     <a class="code" href="classOgre_1_1IndexData.html">IndexData</a>* indexData = 0;
00427 
00428     <font class="keywordflow">if</font> ( <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableq1">mLevelIndex</a>[ <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen2">mRenderLevel</a> ][ index_array ] != 0 )
00429     {
00430         indexData = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableq1">mLevelIndex</a>[ <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen2">mRenderLevel</a> ][ index_array ];
00431     }
00432     <font class="keywordflow">else</font>
00433     {
00434         <font class="keywordtype">int</font> new_length = ( <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a> / step ) * ( <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a> / step ) * 2 * 2 * 2 ;
00435         <font class="comment">//this is the maximum for a level.  It wastes a little, but shouldn't be a problem.</font>
00436         
00437         indexData = <font class="keyword">new</font> <a class="code" href="classOgre_1_1IndexData.html">IndexData</a>;
00438         indexData-&gt;<a class="code" href="classOgre_1_1IndexData.html#Ogre_1_1IndexDatam0">indexBuffer</a> = 
00439             HardwareBufferManager::getSingleton().createIndexBuffer(
00440                 HardwareIndexBuffer::IT_16BIT,
00441                 new_length, HardwareBuffer::HBU_STATIC_WRITE_ONLY);<font class="comment">//, false);</font>
00442 
00443         gIndexCache.<a class="code" href="classOgre_1_1TerrainBufferCache.html#Ogre_1_1TerrainBufferCachem0">mCache</a>.push_back( indexData );
00444 
00445         numIndexes = 0;
00446 
00447         <font class="keywordtype">unsigned</font> <font class="keywordtype">short</font>* pIdx = static_cast&lt;unsigned short*&gt;(
00448             indexData-&gt;<a class="code" href="classOgre_1_1IndexData.html#Ogre_1_1IndexDatam0">indexBuffer</a>-&gt;lock(0, 
00449               indexData-&gt;<a class="code" href="classOgre_1_1IndexData.html#Ogre_1_1IndexDatam0">indexBuffer</a>-&gt;getSizeInBytes(), 
00450               HardwareBuffer::HBL_DISCARD));
00451 
00452         <font class="keywordflow">for</font> ( <font class="keywordtype">int</font> j = north; j &lt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a> - 1 - south; j += step )
00453         {
00454             <font class="keywordflow">for</font> ( <font class="keywordtype">int</font> i = west; i &lt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a> - 1 - east; i += step )
00455             {
00456                 <font class="comment">//triangles</font>
00457                 *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( i, j ); numIndexes++;
00458                 *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( i, j + step ); numIndexes++;
00459                 *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( i + step, j ); numIndexes++;
00460 
00461                 *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( i, j + step ); numIndexes++;
00462                 *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( i + step, j + step ); numIndexes++;
00463                 *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( i + step, j ); numIndexes++;
00464             }
00465         }
00466 
00467         <font class="keywordtype">int</font> substep = step &lt;&lt; 1;
00468 
00469         <font class="keywordflow">if</font> ( west &gt; 0 )
00470         {
00471 
00472             <font class="keywordflow">for</font> ( <font class="keywordtype">int</font> j = 0; j &lt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a> - 1; j += substep )
00473             {
00474                 <font class="comment">//skip the first bit of the corner if the north side is a different level as well.</font>
00475                 <font class="keywordflow">if</font> ( j &gt; 0 || north == 0 )
00476                 {
00477                     *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( 0, j ); numIndexes++;
00478                     *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( step, j + step ); numIndexes++;
00479                     *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( step, j ); numIndexes++;
00480                 }
00481 
00482                 *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( step, j + step ); numIndexes++;
00483                 *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( 0, j ); numIndexes++;
00484                 *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( 0, j + step + step ); numIndexes++;
00485 
00486                 <font class="keywordflow">if</font> ( j &lt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a> - 1 - substep || south == 0 )
00487                 {
00488                     *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( step, j + step ); numIndexes++;
00489                     *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( 0, j + step + step ); numIndexes++;
00490                     *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( step, j + step + step ); numIndexes++;
00491                 }
00492             }
00493         }
00494 
00495         <font class="keywordflow">if</font> ( east &gt; 0 )
00496         {
00497             <font class="keywordtype">int</font> x = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a> - 1;
00498 
00499             <font class="keywordflow">for</font> ( <font class="keywordtype">int</font> j = 0; j &lt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a> - 1; j += substep )
00500             {
00501                 <font class="comment">//skip the first bit of the corner if the north side is a different level as well.</font>
00502                 <font class="keywordflow">if</font> ( j &gt; 0 || north == 0 )
00503                 {
00504                     *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( x, j ); numIndexes++;
00505                     *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( x - step, j ); numIndexes++;
00506                     *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( x - step, j + step ); numIndexes++;
00507                 }
00508 
00509                 *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( x, j ); numIndexes++;
00510                 *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( x - step, j + step ); numIndexes++;
00511                 *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( x, j + step + step ); numIndexes++;
00512 
00513                 <font class="keywordflow">if</font> ( j &lt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a> - 1 - substep || south == 0 )
00514                 {
00515                     *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( x, j + step + step ); numIndexes++;
00516                     *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( x - step, j + step ); numIndexes++;
00517                     *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( x - step, j + step + step ); numIndexes++;
00518                 }
00519             }
00520         }
00521 
00522         <font class="keywordflow">if</font> ( south &gt; 0 )
00523         {
00524             <font class="keywordtype">int</font> x = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a> - 1;
00525 
00526             <font class="keywordflow">for</font> ( <font class="keywordtype">int</font> j = 0; j &lt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a> - 1; j += substep )
00527             {
00528                 <font class="comment">//skip the first bit of the corner if the north side is a different level as well.</font>
00529                 <font class="keywordflow">if</font> ( j &gt; 0 || west == 0 )
00530                 {
00531                     *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( j, x - step ); numIndexes++;
00532                     *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( j, x ); numIndexes++;
00533                     *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( j + step, x - step ); numIndexes++;
00534                 }
00535 
00536                 *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( j + step, x - step ); numIndexes++;
00537                 *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( j, x ); numIndexes++;
00538                 *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( j + step + step, x ); numIndexes++;
00539 
00540                 <font class="keywordflow">if</font> ( j &lt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a> - 1 - substep || east == 0 )
00541                 {
00542                     *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( j + step, x - step ); numIndexes++;
00543                     *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( j + step + step, x ); numIndexes++;
00544                     *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( j + step + step, x - step ); numIndexes++;
00545                 }
00546             }
00547 
00548         }
00549 
00550         <font class="keywordflow">if</font> ( north &gt; 0 )
00551         {
00552             <font class="keywordflow">for</font> ( <font class="keywordtype">int</font> j = 0; j &lt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a> - 1; j += substep )
00553             {
00554                 <font class="comment">//skip the first bit of the corner if the north side is a different level as well.</font>
00555                 <font class="keywordflow">if</font> ( j &gt; 0 || west == 0 )
00556                 {
00557                     *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( j, 0 ); numIndexes++;
00558                     *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( j, step ); numIndexes++;
00559                     *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( j + step, step ); numIndexes++;
00560                 }
00561 
00562                 *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( j, 0 ); numIndexes++;
00563                 *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( j + step, step ); numIndexes++;
00564                 *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( j + step + step, 0 ); numIndexes++;
00565 
00566                 <font class="keywordflow">if</font> ( j &lt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a> - 1 - substep || east == 0 )
00567                 {
00568                     *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( j + step + step, 0 ); numIndexes++;
00569                     *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( j + step, step ); numIndexes++;
00570                     *pIdx++ = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( j + step + step, step ); numIndexes++;
00571                 }
00572             }
00573 
00574         }
00575 
00576         indexData-&gt;<a class="code" href="classOgre_1_1IndexData.html#Ogre_1_1IndexDatam0">indexBuffer</a>-&gt;unlock();
00577         indexData-&gt;<a class="code" href="classOgre_1_1IndexData.html#Ogre_1_1IndexDatam2">indexCount</a> = numIndexes;
00578         indexData-&gt;<a class="code" href="classOgre_1_1IndexData.html#Ogre_1_1IndexDatam1">indexStart</a> = 0;
00579 
00580         <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableq1">mLevelIndex</a>[ <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen2">mRenderLevel</a> ][ index_array ] = indexData;
00581     }
00582 
00583     op.<a class="code" href="classOgre_1_1RenderOperation.html#Ogre_1_1RenderOperationm2">useIndexes</a> = <font class="keyword">true</font>;
00584     op.<a class="code" href="classOgre_1_1RenderOperation.html#Ogre_1_1RenderOperationm1">operationType</a> = RenderOperation::OT_TRIANGLE_LIST;
00585     op.<a class="code" href="classOgre_1_1RenderOperation.html#Ogre_1_1RenderOperationm0">vertexData</a> = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen0">mTerrain</a>;
00586     op.<a class="code" href="classOgre_1_1RenderOperation.html#Ogre_1_1RenderOperationm3">indexData</a> = indexData;
00587 
00588     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablep0">mRenderedTris</a> += ( indexData-&gt;<a class="code" href="classOgre_1_1IndexData.html#Ogre_1_1IndexDatam2">indexCount</a> / 3 );
00589 
00590 
00591     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen12">mRenderLevelChanged</a> = <font class="keyword">false</font>;
00592 
00593 }
00594 
<a name="l00595"></a><a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea11">00595</a> <font class="keywordtype">void</font> TerrainRenderable::getWorldTransforms( <a class="code" href="classOgre_1_1Matrix4.html">Matrix4</a>* xform )<font class="keyword"> const</font>
00596 <font class="keyword"></font>{
00597     *xform = <a class="code" href="classOgre_1_1MovableObject.html#Ogre_1_1WireBoundingBoxn9">mParentNode</a>-&gt;<a class="code" href="classOgre_1_1Node.html#Ogre_1_1TagPointa59">_getFullTransform</a>();
00598 }
00599 
<a name="l00600"></a><a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea12">00600</a> <font class="keyword">const</font> <a class="code" href="classOgre_1_1Quaternion.html">Quaternion</a>&amp; TerrainRenderable::getWorldOrientation(<font class="keywordtype">void</font>)<font class="keyword"> const</font>
00601 <font class="keyword"></font>{
00602     <font class="keywordflow">return</font> <a class="code" href="classOgre_1_1MovableObject.html#Ogre_1_1WireBoundingBoxn9">mParentNode</a>-&gt;<a class="code" href="classOgre_1_1Node.html#Ogre_1_1TagPointa56">_getDerivedOrientation</a>();
00603 }
<a name="l00604"></a><a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea13">00604</a> <font class="keyword">const</font> <a class="code" href="classOgre_1_1Vector3.html">Vector3</a>&amp; TerrainRenderable::getWorldPosition(<font class="keywordtype">void</font>)<font class="keyword"> const</font>
00605 <font class="keyword"></font>{
00606     <font class="keywordflow">return</font> <a class="code" href="classOgre_1_1MovableObject.html#Ogre_1_1WireBoundingBoxn9">mParentNode</a>-&gt;<a class="code" href="classOgre_1_1Node.html#Ogre_1_1TagPointa57">_getDerivedPosition</a>();
00607 }
00608 
<a name="l00609"></a><a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb6">00609</a> <font class="keywordtype">bool</font> TerrainRenderable::_checkSize( <font class="keywordtype">int</font> n )
00610 {
00611     <font class="keywordflow">for</font> ( <font class="keywordtype">int</font> i = 0; i &lt; 10; i++ )
00612     {
00613         <font class="keywordflow">if</font> ( ( ( 1 &lt;&lt; i ) + 1 ) == n )
00614             <font class="keywordflow">return</font> <font class="keyword">true</font>;
00615     }
00616 
00617     <font class="keywordflow">return</font> <font class="keyword">false</font>;
00618 }
00619 
00620 
<a name="l00621"></a><a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb7">00621</a> <font class="keywordtype">void</font> TerrainRenderable::_calculateMinLevelDist2( <a class="code" href="namespaceOgre.html#a349">Real</a> C )
00622 {
00623     <font class="comment">//level 0 has no delta.</font>
00624     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen3">mMinLevelDistSqr</a>[ 0 ] = 0;
00625 
00626     <font class="keywordflow">for</font> ( <font class="keywordtype">int</font> level = 1; level &lt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen1">mNumMipMaps</a>; level++ )
00627     {
00628         <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen3">mMinLevelDistSqr</a>[ level ] = 0;
00629 
00630         <font class="keywordtype">int</font> step = 1 &lt;&lt; level;
00631 
00632         <font class="keywordflow">for</font> ( <font class="keywordtype">int</font> j = 0; j &lt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a> - step; j += step )
00633         {
00634             <font class="keywordflow">for</font> ( <font class="keywordtype">int</font> i = 0; i &lt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a> - step; i += step )
00635             {
00636                 <font class="comment">//check each height inbetween the steps.</font>
00637                 <a class="code" href="namespaceOgre.html#a349">Real</a> h1 = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb1">_vertex</a>( i, j, 1 );
00638                 <a class="code" href="namespaceOgre.html#a349">Real</a> h2 = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb1">_vertex</a>( i + step, j, 1 );
00639                 <a class="code" href="namespaceOgre.html#a349">Real</a> h3 = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb1">_vertex</a>( i + step, j + step, 1 );
00640                 <a class="code" href="namespaceOgre.html#a349">Real</a> h4 = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb1">_vertex</a>( i, j + step, 1 );
00641 
00642                 <font class="keywordflow">for</font> ( <font class="keywordtype">int</font> z = 1; z &lt; step; z++ )
00643                 {
00644                     <font class="keywordflow">for</font> ( <font class="keywordtype">int</font> x = 1; x &lt; step; x++ )
00645                     {
00646 
00647                         <a class="code" href="namespaceOgre.html#a349">Real</a> zpct = z / step;
00648                         <a class="code" href="namespaceOgre.html#a349">Real</a> xpct = x / step;
00649 
00650                         <font class="comment">//interpolated height</font>
00651                         <font class="keywordtype">float</font> top = h3 * ( 1.0f - xpct ) + xpct * h4;
00652                         <font class="keywordtype">float</font> bottom = h1 * ( 1.0f - xpct ) + xpct * h2;
00653 
00654                         <a class="code" href="namespaceOgre.html#a349">Real</a> interp_h = top * ( 1.0f - zpct ) + zpct * bottom;
00655 
00656                         <a class="code" href="namespaceOgre.html#a349">Real</a> actual_h = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb1">_vertex</a>( i + x, j + z, 1 );
00657                         <a class="code" href="namespaceOgre.html#a349">Real</a> delta = fabs( interp_h - actual_h );
00658 
00659                         <a class="code" href="namespaceOgre.html#a349">Real</a> D2 = delta * delta * C * C;
00660 
00661                         <font class="keywordflow">if</font> ( <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen3">mMinLevelDistSqr</a>[ level ] &lt; D2 )
00662                             <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen3">mMinLevelDistSqr</a>[ level ] = D2;
00663                     }
00664 
00665                 }
00666             }
00667         }
00668 
00669     }
00670 
00671     <font class="comment">//make sure the levels are increasing...</font>
00672     <font class="keywordflow">for</font> ( <font class="keywordtype">int</font> i = 1; i &lt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen1">mNumMipMaps</a>; i++ )
00673     {
00674         <font class="keywordflow">if</font> ( <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen3">mMinLevelDistSqr</a>[ i ] &lt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen3">mMinLevelDistSqr</a>[ i - 1 ] )
00675             <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen3">mMinLevelDistSqr</a>[ i ] = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen3">mMinLevelDistSqr</a>[ i - 1 ] + 1;
00676     }
00677 
00678 }
00679 
<a name="l00680"></a><a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb5">00680</a> <font class="keywordtype">void</font> TerrainRenderable::_initLevelIndexes()
00681 {
00682     <font class="keywordflow">if</font> ( mLevelInit )
00683         <font class="keywordflow">return</font> ;
00684 
00685 
00686     <font class="keywordflow">if</font> ( <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableq1">mLevelIndex</a>.size() == 0 )
00687     {
00688         <font class="keywordflow">for</font> ( <font class="keywordtype">int</font> i = 0; i &lt; 16; i++ )
00689         {
00690 
00691             <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableq1">mLevelIndex</a>.push_back( <a class="code" href="namespaceOgre.html#a472">IndexArray</a>() );
00692 
00693             <font class="keywordflow">for</font> ( <font class="keywordtype">int</font> j = 0; j &lt; 16; j++ )
00694             {
00695                 <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableq1">mLevelIndex</a>[ i ].push_back( 0 );
00696             }
00697 
00698         }
00699 
00700 
00701     }
00702 
00703     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableq2">mLevelInit</a> = <font class="keyword">true</font>;
00704 }
00705 
<a name="l00706"></a><a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb4">00706</a> <font class="keywordtype">void</font> TerrainRenderable::_adjustRenderLevel( <font class="keywordtype">int</font> i )
00707 {
00708 
00709     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen2">mRenderLevel</a> = i;
00710     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea24">_alignNeighbors</a>();
00711 
00712 }
00713 
<a name="l00714"></a><a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea24">00714</a> <font class="keywordtype">void</font> TerrainRenderable::_alignNeighbors()
00715 {
00716 
00717     <font class="comment">//ensure that there aren't any gaps...</font>
00718 
00719     <font class="keywordflow">for</font> ( <font class="keywordtype">int</font> i = 0; i &lt; 4;i++ )
00720     {
00721         <font class="keywordflow">if</font> ( <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen4">mNeighbors</a>[ i ] != 0 &amp;&amp; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen4">mNeighbors</a>[ i ] -&gt;<a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen2">mRenderLevel</a> + 1 &lt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen2">mRenderLevel</a> )
00722             <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen4">mNeighbors</a>[ i ] -&gt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb4">_adjustRenderLevel</a>( <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen2">mRenderLevel</a> - 1 );
00723     }
00724 
00725     <font class="comment">/*</font>
00726 <font class="comment"></font>
00727 <font class="comment">    //always go up, rather than down...</font>
00728 <font class="comment">          if ( mNeighbors[ EAST  ] != 0 &amp;&amp; mNeighbors[ EAST ] -&gt;mRenderLevel + 1 &lt; mRenderLevel )</font>
00729 <font class="comment">                 mNeighbors[ EAST ] -&gt; _adjustRenderLevel(  mRenderLevel - 1 );</font>
00730 <font class="comment"></font>
00731 <font class="comment">            if ( mNeighbors[ SOUTH  ] != 0 &amp;&amp; mNeighbors[ SOUTH ] -&gt;mRenderLevel + 1 &lt; mRenderLevel )</font>
00732 <font class="comment">                mNeighbors[ SOUTH ] -&gt; _adjustRenderLevel(  mRenderLevel - 1 );</font>
00733 <font class="comment">    */</font>
00734 }
00735 
<a name="l00736"></a><a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb8">00736</a> <a class="code" href="namespaceOgre.html#a349">Real</a> TerrainRenderable::_calculateCFactor()
00737 {
00738     <a class="code" href="namespaceOgre.html#a349">Real</a> A, T;
00739 
00740     A = ( Real ) <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen14">mNearPlane</a> / fabs( ( <a class="code" href="namespaceOgre.html#a349">Real</a> ) <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen17">mTopCoord</a> );
00741 
00742     T = 2 * ( Real ) <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen15">mMaxPixelError</a> / ( Real ) <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen16">mVertResolution</a>;
00743 
00744     <font class="keywordflow">return</font> A / T;
00745 }
00746 
<a name="l00747"></a><a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea19">00747</a> <font class="keywordtype">float</font> TerrainRenderable::getHeightAt( <font class="keywordtype">float</font> x, <font class="keywordtype">float</font> z )
00748 {
00749     <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> start;
00750     <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> end;
00751 
00752     start.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m0">x</a> = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb1">_vertex</a>( 0, 0, 0 );
00753     start.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m1">y</a> = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb1">_vertex</a>( 0, 0, 1 );
00754     start.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m2">z</a> = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb1">_vertex</a>( 0, 0, 2 );
00755 
00756     end.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m0">x</a> = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb1">_vertex</a>( <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a> - 1, <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a> - 1, 0 );
00757     end.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m1">y</a> = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb1">_vertex</a>( <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a> - 1, <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a> - 1, 1 );
00758     end.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m2">z</a> = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb1">_vertex</a>( <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a> - 1, <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a> - 1, 2 );
00759 
00760     <font class="comment">/* Safety catch, if the point asked for is outside</font>
00761 <font class="comment">     * of this tile, it will ask the appropriate tile</font>
00762 <font class="comment">     */</font>
00763 
00764     <font class="keywordflow">if</font> ( x &lt; start.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m0">x</a> )
00765     {
00766         <font class="keywordflow">if</font> ( <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen4">mNeighbors</a>[ <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderables5Ogre_1_1TerrainRenderables3">WEST</a> ] != 0 )
00767             <font class="keywordflow">return</font> <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen4">mNeighbors</a>[ <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderables5Ogre_1_1TerrainRenderables3">WEST</a> ] -&gt;getHeightAt( x, z );
00768         <font class="keywordflow">else</font>
00769             x = start.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m0">x</a>;
00770     }
00771 
00772     <font class="keywordflow">if</font> ( x &gt; end.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m0">x</a> )
00773     {
00774         <font class="keywordflow">if</font> ( <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen4">mNeighbors</a>[ <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderables5Ogre_1_1TerrainRenderables2">EAST</a> ] != 0 )
00775             <font class="keywordflow">return</font> <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen4">mNeighbors</a>[ <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderables5Ogre_1_1TerrainRenderables2">EAST</a> ] -&gt;getHeightAt( x, z );
00776         <font class="keywordflow">else</font>
00777             x = end.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m0">x</a>;
00778     }
00779 
00780     <font class="keywordflow">if</font> ( z &lt; start.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m2">z</a> )
00781     {
00782         <font class="keywordflow">if</font> ( <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen4">mNeighbors</a>[ <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderables5Ogre_1_1TerrainRenderables0">NORTH</a> ] != 0 )
00783             <font class="keywordflow">return</font> <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen4">mNeighbors</a>[ <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderables5Ogre_1_1TerrainRenderables0">NORTH</a> ] -&gt;getHeightAt( x, z );
00784         <font class="keywordflow">else</font>
00785             z = start.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m2">z</a>;
00786     }
00787 
00788     <font class="keywordflow">if</font> ( z &gt; end.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m2">z</a> )
00789     {
00790         <font class="keywordflow">if</font> ( <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen4">mNeighbors</a>[ <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderables5Ogre_1_1TerrainRenderables1">SOUTH</a> ] != 0 )
00791             <font class="keywordflow">return</font> <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen4">mNeighbors</a>[ <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderables5Ogre_1_1TerrainRenderables1">SOUTH</a> ] -&gt;getHeightAt( x, z );
00792         <font class="keywordflow">else</font>
00793             z = end.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m2">z</a>;
00794     }
00795 
00796 
00797 
00798     <font class="keywordtype">float</font> x_pct = ( x - start.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m0">x</a> ) / ( end.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m0">x</a> - start.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m0">x</a> );
00799     <font class="keywordtype">float</font> z_pct = ( z - start.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m2">z</a> ) / ( end.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m2">z</a> - start.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m2">z</a> );
00800 
00801     <font class="keywordtype">float</font> x_pt = x_pct * ( float ) ( <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a> - 1 );
00802     <font class="keywordtype">float</font> z_pt = z_pct * ( float ) ( <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a> - 1 );
00803 
00804     <font class="keywordtype">int</font> x_index = ( int ) x_pt;
00805     <font class="keywordtype">int</font> z_index = ( int ) z_pt;
00806 
00807     x_pct = x_pt - x_index;
00808     z_pct = z_pt - z_index;
00809 
00810     <font class="comment">//bilinear interpolate to find the height.</font>
00811 
00812     <font class="keywordtype">float</font> t1 = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb1">_vertex</a>( x_index, z_index, 1 );
00813     <font class="keywordtype">float</font> t2 = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb1">_vertex</a>( x_index + 1, z_index, 1 );
00814     <font class="keywordtype">float</font> b1 = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb1">_vertex</a>( x_index, z_index + 1, 1 );
00815     <font class="keywordtype">float</font> b2 = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb1">_vertex</a>( x_index + 1, z_index + 1, 1 );
00816 
00817     <font class="keywordtype">float</font> midpoint = (b1 + t2) / 2.0;
00818 
00819     <font class="keywordflow">if</font> (x_pct + z_pct &lt;= 1) {
00820         b2 = midpoint + (midpoint - t1);
00821     } <font class="keywordflow">else</font> {
00822         t1 = midpoint + (midpoint - b2);
00823     }
00824 
00825     <font class="keywordtype">float</font> t = ( t1 * ( 1 - x_pct ) ) + ( t2 * ( x_pct ) );
00826     <font class="keywordtype">float</font> b = ( b1 * ( 1 - x_pct ) ) + ( b2 * ( x_pct ) );
00827 
00828     <font class="keywordtype">float</font> h = ( t * ( 1 - z_pct ) ) + ( b * ( z_pct ) );
00829 
00830     <font class="keywordflow">return</font> h;
00831 }
00832 
<a name="l00833"></a><a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea20">00833</a> <font class="keywordtype">bool</font> TerrainRenderable::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 )
00834 {
00835     <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> dir = end - start;
00836     <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> ray = start;
00837 
00838     <font class="comment">//special case...</font>
00839     <font class="keywordflow">if</font> ( dir.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m0">x</a> == 0 &amp;&amp; dir.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m2">z</a> == 0 )
00840     {
00841         <font class="keywordflow">if</font> ( ray.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m1">y</a> &lt;= <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea19">getHeightAt</a>( ray.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m0">x</a>, ray.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m2">z</a> ) )
00842         {
00843             <font class="keywordflow">if</font> ( result != 0 )
00844                 * result = start;
00845 
00846             <font class="keywordflow">return</font> <font class="keyword">true</font>;
00847         }
00848     }
00849 
00850     dir.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3a24">normalise</a>();
00851 
00852     <font class="comment">//dir.x *= mScale.x;</font>
00853     <font class="comment">//dir.y *= mScale.y;</font>
00854     <font class="comment">//dir.z *= mScale.z;</font>
00855 
00856     <font class="keyword">const</font> <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> * corners = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea6">getBoundingBox</a>().<a class="code" href="classOgre_1_1AxisAlignedBox.html#Ogre_1_1AxisAlignedBoxa11">getAllCorners</a>();
00857 
00858     <font class="comment">//start with the next one...</font>
00859     ray += dir;
00860 
00861 
00862     <font class="keywordflow">while</font> ( ! ( ( ray.<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> ) ||
00863                 ( ray.<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> ) ||
00864                 ( ray.<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> ) ||
00865                 ( ray.<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> ) ) )
00866     {
00867 
00868 
00869         <font class="keywordtype">float</font> h = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea19">getHeightAt</a>( ray.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m0">x</a>, ray.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m2">z</a> );
00870 
00871         <font class="keywordflow">if</font> ( ray.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m1">y</a> &lt;= h )
00872         {
00873             <font class="keywordflow">if</font> ( result != 0 )
00874                 * result = ray;
00875 
00876             <font class="keywordflow">return</font> <font class="keyword">true</font>;
00877         }
00878 
00879         <font class="keywordflow">else</font>
00880         {
00881             ray += dir;
00882         }
00883 
00884     }
00885 
00886     <font class="keywordflow">if</font> ( ray.<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> &amp;&amp; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen4">mNeighbors</a>[ <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderables5Ogre_1_1TerrainRenderables3">WEST</a> ] != 0 )
00887         <font class="keywordflow">return</font> <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen4">mNeighbors</a>[ <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderables5Ogre_1_1TerrainRenderables3">WEST</a> ] -&gt;intersectSegment( ray, end, result );
00888     <font class="keywordflow">else</font> <font class="keywordflow">if</font> ( ray.<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> &amp;&amp; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen4">mNeighbors</a>[ <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderables5Ogre_1_1TerrainRenderables0">NORTH</a> ] != 0 )
00889         <font class="keywordflow">return</font> <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen4">mNeighbors</a>[ <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderables5Ogre_1_1TerrainRenderables0">NORTH</a> ] -&gt;intersectSegment( ray, end, result );
00890     <font class="keywordflow">else</font> <font class="keywordflow">if</font> ( ray.<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> &amp;&amp; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen4">mNeighbors</a>[ <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderables5Ogre_1_1TerrainRenderables2">EAST</a> ] != 0 )
00891         <font class="keywordflow">return</font> <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen4">mNeighbors</a>[ <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderables5Ogre_1_1TerrainRenderables2">EAST</a> ] -&gt;intersectSegment( ray, end, result );
00892     <font class="keywordflow">else</font> <font class="keywordflow">if</font> ( ray.<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> &amp;&amp; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen4">mNeighbors</a>[ <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderables5Ogre_1_1TerrainRenderables1">SOUTH</a> ] != 0 )
00893         <font class="keywordflow">return</font> <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen4">mNeighbors</a>[ <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderables5Ogre_1_1TerrainRenderables1">SOUTH</a> ] -&gt;intersectSegment( ray, end, result );
00894     <font class="keywordflow">else</font>
00895     {
00896         <font class="keywordflow">if</font> ( result != 0 )
00897             * result = <a class="code" href="classOgre_1_1Vector3.html">Vector3</a>( -1, -1, -1 );
00898 
00899         <font class="keywordflow">return</font> <font class="keyword">false</font>;
00900     }
00901 }
00902 
<a name="l00903"></a><a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea26">00903</a> <font class="keywordtype">void</font> TerrainRenderable::_generateVertexLighting( <font class="keyword">const</font> <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> &amp;sun, <a class="code" href="classOgre_1_1ColourValue.html">ColourValue</a> ambient )
00904 {
00905     <font class="keywordflow">if</font> ( !<a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen20">mColored</a> )
00906     {
00907         printf( <font class="stringliteral">"Can't generate terrain vertex lighting with out vertex colors enabled.\n"</font> );
00908         <font class="keywordflow">return</font> ;
00909     }
00910 
00911 
00912     <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> pt;
00913     <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> normal;
00914     <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> light;
00915 
00916     <font class="comment">//for each point in the terrain, see if it's in the line of sight for the sun.</font>
00917     <font class="keywordflow">for</font> ( <font class="keywordtype">int</font> i = 0; i &lt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a>; i++ )
00918     {
00919         <font class="keywordflow">for</font> ( <font class="keywordtype">int</font> j = 0; j &lt; <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen8">mSize</a>; j++ )
00920         {
00921             <font class="comment">//  printf( "Checking %f,%f,%f ", pt.x, pt.y, pt.z );</font>
00922             pt.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m0">x</a> = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb1">_vertex</a>( i, j, 0 );
00923             pt.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m1">y</a> = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb1">_vertex</a>( i, j, 1 );
00924             pt.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3m2">z</a> = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb1">_vertex</a>( i, j, 2 );
00925 
00926             light = sun - pt;
00927 
00928             light.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3a24">normalise</a>();
00929 
00930             <font class="keywordflow">if</font> ( ! <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea20">intersectSegment</a>( pt, sun, 0 ) )
00931             {
00932                 <font class="comment">//</font>
00933                 <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea18">_getNormalAt</a>( <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb1">_vertex</a>( i, j, 0 ), <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb1">_vertex</a>( i, j, 2 ), &amp;normal );
00934 
00935                 <font class="keywordtype">float</font> l = light.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3a23">dotProduct</a>( normal );
00936 
00937                 <a class="code" href="classOgre_1_1ColourValue.html">ColourValue</a> v;
00938                 v.<a class="code" href="classOgre_1_1ColourValue.html#Ogre_1_1ColourValuem0">r</a> = ambient.<a class="code" href="classOgre_1_1ColourValue.html#Ogre_1_1ColourValuem0">r</a> + l;
00939                 v.<a class="code" href="classOgre_1_1ColourValue.html#Ogre_1_1ColourValuem1">g</a> = ambient.<a class="code" href="classOgre_1_1ColourValue.html#Ogre_1_1ColourValuem1">g</a> + l;
00940                 v.<a class="code" href="classOgre_1_1ColourValue.html#Ogre_1_1ColourValuem2">b</a> = ambient.<a class="code" href="classOgre_1_1ColourValue.html#Ogre_1_1ColourValuem2">b</a> + l;
00941 
00942                 <font class="keywordflow">if</font> ( v.<a class="code" href="classOgre_1_1ColourValue.html#Ogre_1_1ColourValuem0">r</a> &gt; 1 ) v.<a class="code" href="classOgre_1_1ColourValue.html#Ogre_1_1ColourValuem0">r</a> = 1;
00943 
00944                 <font class="keywordflow">if</font> ( v.<a class="code" href="classOgre_1_1ColourValue.html#Ogre_1_1ColourValuem1">g</a> &gt; 1 ) v.<a class="code" href="classOgre_1_1ColourValue.html#Ogre_1_1ColourValuem1">g</a> = 1;
00945 
00946                 <font class="keywordflow">if</font> ( v.<a class="code" href="classOgre_1_1ColourValue.html#Ogre_1_1ColourValuem2">b</a> &gt; 1 ) v.<a class="code" href="classOgre_1_1ColourValue.html#Ogre_1_1ColourValuem2">b</a> = 1;
00947 
00948                 <font class="keywordflow">if</font> ( v.<a class="code" href="classOgre_1_1ColourValue.html#Ogre_1_1ColourValuem0">r</a> &lt; 0 ) v.<a class="code" href="classOgre_1_1ColourValue.html#Ogre_1_1ColourValuem0">r</a> = 0;
00949 
00950                 <font class="keywordflow">if</font> ( v.<a class="code" href="classOgre_1_1ColourValue.html#Ogre_1_1ColourValuem1">g</a> &lt; 0 ) v.<a class="code" href="classOgre_1_1ColourValue.html#Ogre_1_1ColourValuem1">g</a> = 0;
00951 
00952                 <font class="keywordflow">if</font> ( v.<a class="code" href="classOgre_1_1ColourValue.html#Ogre_1_1ColourValuem2">b</a> &lt; 0 ) v.<a class="code" href="classOgre_1_1ColourValue.html#Ogre_1_1ColourValuem2">b</a> = 0;
00953 
00954                 <a class="code" href="namespaceOgre.html#a53">RGBA</a> colour;
00955                 Root::getSingleton().convertColourValue( v, &amp;colour );
00956                 <a class="code" href="classOgre_1_1HardwareVertexBufferSharedPtr.html">HardwareVertexBufferSharedPtr</a> vbuf = 
00957                     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen0">mTerrain</a>-&gt;<a class="code" href="classOgre_1_1VertexData.html#Ogre_1_1VertexDatam1">vertexBufferBinding</a>-&gt;<a class="code" href="classOgre_1_1VertexBufferBinding.html#Ogre_1_1VertexBufferBindinga6">getBuffer</a>(<a class="code" href="OgreTerrainRenderable_8cpp.html#a3">COLOUR_BINDING</a>);
00958                 vbuf-&gt;writeData(<a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( i, j ) * <font class="keyword">sizeof</font>(<a class="code" href="namespaceOgre.html#a53">RGBA</a>), <font class="keyword">sizeof</font>(<a class="code" href="namespaceOgre.html#a53">RGBA</a>), &amp;colour);
00959             }
00960 
00961             <font class="keywordflow">else</font>
00962             {
00963                 <a class="code" href="namespaceOgre.html#a53">RGBA</a> colour;
00964                 Root::getSingleton().convertColourValue( ambient, &amp;colour );
00965 
00966                 <a class="code" href="classOgre_1_1HardwareVertexBufferSharedPtr.html">HardwareVertexBufferSharedPtr</a> vbuf = 
00967                     <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen0">mTerrain</a>-&gt;<a class="code" href="classOgre_1_1VertexData.html#Ogre_1_1VertexDatam1">vertexBufferBinding</a>-&gt;<a class="code" href="classOgre_1_1VertexBufferBinding.html#Ogre_1_1VertexBufferBindinga6">getBuffer</a>(<a class="code" href="OgreTerrainRenderable_8cpp.html#a3">COLOUR_BINDING</a>);
00968                 vbuf-&gt;writeData(<a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderableb0">_index</a>( i, j ) * <font class="keyword">sizeof</font>(<a class="code" href="namespaceOgre.html#a53">RGBA</a>), <font class="keyword">sizeof</font>(<a class="code" href="namespaceOgre.html#a53">RGBA</a>), &amp;colour);
00969             }
00970 
00971         }
00972 
00973     }
00974 
00975     printf( <font class="stringliteral">"."</font> );
00976 }
00977 <font class="comment">//-----------------------------------------------------------------------</font>
<a name="l00978"></a><a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea27">00978</a> <a class="code" href="namespaceOgre.html#a349">Real</a> TerrainRenderable::getSquaredViewDepth(<font class="keyword">const</font> <a class="code" href="classOgre_1_1Camera.html">Camera</a>* cam)<font class="keyword"> const</font>
00979 <font class="keyword"></font>{
00980     <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> diff = <a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablen6">mCenter</a> - cam-&gt;<a class="code" href="classOgre_1_1Camera.html#Ogre_1_1OctreeCameraa54">getDerivedPosition</a>();
00981     <font class="comment">// Use squared length to avoid square root</font>
00982     <font class="keywordflow">return</font> diff.<a class="code" href="classOgre_1_1Vector3.html#Ogre_1_1Vector3a22">squaredLength</a>();
00983 }
00984 
00985 <font class="comment">//-----------------------------------------------------------------------</font>
<a name="l00986"></a><a class="code" href="classOgre_1_1TerrainRenderable.html#Ogre_1_1TerrainRenderablea29">00986</a> <font class="keyword">const</font> <a class="code" href="namespaceOgre.html#a56">LightList</a>&amp; TerrainRenderable::getLights(<font class="keywordtype">void</font>)<font class="keyword"> const</font>
00987 <font class="keyword"></font>{
00988     <font class="keywordflow">return</font> <a class="code" href="classOgre_1_1MovableObject.html#Ogre_1_1WireBoundingBoxn9">mParentNode</a>-&gt;<a class="code" href="classOgre_1_1Node.html#Ogre_1_1Nodea59">getLights</a>();
00989 }
00990 
00991 } <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>