diff options
Diffstat (limited to 'docs/doxygen/nel/a03705.html')
-rw-r--r-- | docs/doxygen/nel/a03705.html | 2007 |
1 files changed, 2007 insertions, 0 deletions
diff --git a/docs/doxygen/nel/a03705.html b/docs/doxygen/nel/a03705.html new file mode 100644 index 00000000..f17f1a7c --- /dev/null +++ b/docs/doxygen/nel/a03705.html @@ -0,0 +1,2007 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> +<title>NeL: NL3D::CVisualCollisionEntity class Reference</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.3.6 --> +<div class="qindex"> <form class="search" action="search.php" method="get"> +<a class="qindex" href="main.html">Main Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical List</a> | <a class="qindex" href="annotated.html">Data Structures</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html">Data Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related Pages</a> | <span class="search"><u>S</u>earch for <input class="search" type="text" name="query" value="" size="20" accesskey="s"/></span></form></div> +<h1>NL3D::CVisualCollisionEntity Class Reference</h1><code>#include <<a class="el" href="a06726.html">visual_collision_entity.h</a>></code> +<p> +<hr><a name="_details"></a><h2>Detailed Description</h2> +An entity created by <a class="el" href="a03707.html">CVisualCollisionManager</a>. <dl compact><dt><b>Author:</b></dt><dd>Lionel Berenguier <p> +Nevrax France </dd></dl> +<dl compact><dt><b>Date:</b></dt><dd>2001 </dd></dl> + +<p> + +<p> +Definition at line <a class="el" href="a06726.html#l00050">50</a> of file <a class="el" href="a06726.html">visual_collision_entity.h</a>.<table border=0 cellpadding=0 cellspacing=0> +<tr><td></td></tr> +<tr><td colspan=2><br><h2>Landscape part.</h2></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_0">doComputeLandscape</a> (const <a class="el" href="a03128.html">CVector</a> &pos)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">compute tiles infos around the position. <a href="#NL3D_1_1CVisualCollisionEntityz1174_0"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03620.html">CTrianglePatch</a> * </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_1">getPatchTriangleUnderUs</a> (const <a class="el" href="a03128.html">CVector</a> &pos, <a class="el" href="a03128.html">CVector</a> &<a class="el" href="a04223.html#a643">res</a>)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_2">snapToLandscapeCurrentTesselation</a> (<a class="el" href="a03128.html">CVector</a> &pos, const <a class="el" href="a03620.html">CTrianglePatch</a> &tri)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">snap to current rendered tesselation. <a href="#NL3D_1_1CVisualCollisionEntityz1174_2"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_3">testComputeLandscape</a> (const <a class="el" href="a03128.html">CVector</a> &pos)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">test if the new position is outside the preceding setuped bbox, and then compute tiles infos around the position. <a href="#NL3D_1_1CVisualCollisionEntityz1174_3"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_4">triangleIntersect</a> (<a class="el" href="a03616.html">CTriangle</a> &tri, const <a class="el" href="a03128.html">CVector</a> &pos0, const <a class="el" href="a03128.html">CVector</a> &pos1, <a class="el" href="a03128.html">CVector</a> &hit)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Fast "2D" test of a triangle against ray P0 P1. <a href="#NL3D_1_1CVisualCollisionEntityz1174_4"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02156.html">CAABBox</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_5">_CurrentBBoxValidity</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">The current BBox where we don't need to recompute the patchQuadBlocks if the entity is in. <a href="#NL3D_1_1CVisualCollisionEntityz1174_5"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02708.html">CLandscapeCollisionGrid</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_6">_LandscapeQuadGrid</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">A quadgrid of chainlist of tileId (<a class="el" href="a03713.html">CVisualTileDescNode</a>), which are around the entity. <a href="#NL3D_1_1CVisualCollisionEntityz1174_6"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03128.html">CVector</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_7">_LastGPTPosInput</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">compute tiles infos around the position. <a href="#NL3D_1_1CVisualCollisionEntityz1174_7"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03128.html">CVector</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_8">_LastGPTPosOutput</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">compute tiles infos around the position. <a href="#NL3D_1_1CVisualCollisionEntityz1174_8"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03620.html">CTrianglePatch</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_9">_LastGPTTrianglePatch</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">compute tiles infos around the position. <a href="#NL3D_1_1CVisualCollisionEntityz1174_9"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_10">_LastGPTValid</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Cache for <a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_1">getPatchTriangleUnderUs()</a>. <a href="#NL3D_1_1CVisualCollisionEntityz1174_10"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector< <a class="el" href="a03068.html">CPatchQuadBlock</a> * > </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_11">_PatchQuadBlocks</a></td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_12">computeUvForPos</a> (const <a class="el" href="a03620.html">CTrianglePatch</a> &tri, const <a class="el" href="a03128.html">CVector</a> &pos, <a class="el" href="a03640.html">CUV</a> &uv)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">given a <a class="el" href="a03620.html">CTrianglePatch</a>, compute Patch uv according to position. <a href="#NL3D_1_1CVisualCollisionEntityz1174_12"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_13">triangleIntersect2DCeil</a> (<a class="el" href="a03616.html">CTriangle</a> &tri, const <a class="el" href="a03128.html">CVector</a> &pos0)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">compute tiles infos around the position. <a href="#NL3D_1_1CVisualCollisionEntityz1174_13"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_14">triangleIntersect2DGround</a> (<a class="el" href="a03616.html">CTriangle</a> &tri, const <a class="el" href="a03128.html">CVector</a> &pos0)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Fast "2D" test of a triangle against ray P0 P1. <a href="#NL3D_1_1CVisualCollisionEntityz1174_14"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>const <a class="el" href="a04558.html#a11">uint32</a> </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_15">_StartPatchQuadBlockSize</a> = 64</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Default capacity of _PatchQuadBlocks. <a href="#NL3D_1_1CVisualCollisionEntityz1174_15"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector< <a class="el" href="a03059.html">CPatchBlockIdent</a> > </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_16">_TmpBlockIds</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">This is the temp array of BlockIds filled by landscape search. <a href="#NL3D_1_1CVisualCollisionEntityz1174_16"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector< <a class="el" href="a03068.html">CPatchQuadBlock</a> * > </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_17">_TmpPatchQuadBlocks</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">This is the temp array of PatchBlocks ptr. <a href="#NL3D_1_1CVisualCollisionEntityz1174_17"></a><br><br></td></tr> +<tr><td colspan=2><br><h2>Public Member Functions</h2></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top> </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntitya0">CVisualCollisionEntity</a> (<a class="el" href="a03707.html">CVisualCollisionManager</a> *owner)</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <a href="#NL3D_1_1CVisualCollisionEntitya0"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntitya1">getCeilMode</a> () const </td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntitya2">getGroundMode</a> () const </td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntitya3">getSnapToRenderedTesselation</a> () const </td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntitya4">getSurfaceInfo</a> (const <a class="el" href="a03128.html">CVector</a> &pos, <a class="el" href="a03463.html">CSurfaceInfo</a> &info)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntitya5">setCeilMode</a> (bool ceilMode)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntitya6">setGroundMode</a> (bool groundMode)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntitya7">setSnapToRenderedTesselation</a> (bool snapMode)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntitya8">snapToGround</a> (<a class="el" href="a03128.html">CVector</a> &pos, <a class="el" href="a03128.html">CVector</a> &normal)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntitya9">snapToGround</a> (<a class="el" href="a03128.html">CVector</a> &pos)</td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top> </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntitya10">~CVisualCollisionEntity</a> ()</td></tr> + +<tr><td colspan="2"><div class="groupHeader">Debug display</div></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1172_0">displayDebugGrid</a> (<a class="el" href="a02434.html">IDriver</a> &drv) const </td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Draw lines for the landscape quadgrid collision faces under us. <a href="#NL3D_1_1CVisualCollisionEntityz1172_0"></a><br><br></td></tr> +<tr><td colspan="2"><div class="groupHeader">Static Lighting</div></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1170_0">getStaticLightSetup</a> (const <a class="el" href="a03128.html">CVector</a> &pos, std::vector< <a class="el" href="a03092.html">CPointLightInfluence</a> > &pointLightList, <a class="el" href="a04558.html#a7">uint8</a> &sunContribution, <a class="el" href="a03337.html">NLMISC::CRGBA</a> &localAmbient)</td></tr> + +<tr><td colspan=2><br><h2>Static Public Attributes</h2></td></tr> +<tr><td colspan="2"><div class="groupHeader">Parameters.</div></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>const float </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1168_0">BBoxRadius</a> = 10</td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">This is the radius of the bbox around the entity where we have correct collisions: 10m. <a href="#NL3D_1_1CVisualCollisionEntityz1168_0"></a><br><br></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>const float </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1168_1">BBoxRadiusZ</a> = 20</td></tr> + +<tr><td colspan=2><br><h2>Private Attributes</h2></td></tr> +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityr0">_CeilMode</a></td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityr1">_GroundMode</a></td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03707.html">CVisualCollisionManager</a> * </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityr2">_Owner</a></td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>bool </td><td class="memItemRight" valign=bottom><a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityr3">_SnapToRenderedTesselation</a></td></tr> + +</table> +<hr><h2>Constructor & Destructor Documentation</h2> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntitya0" doxytag="NL3D::CVisualCollisionEntity::CVisualCollisionEntity" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> NL3D::CVisualCollisionEntity::CVisualCollisionEntity </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a03707.html">CVisualCollisionManager</a> * </td> + <td class="mdname1" valign="top" nowrap> <em>owner</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Constructor. +<p> + +<p> +Definition at line <a class="el" href="a06725.html#l00056">56</a> of file <a class="el" href="a06725.html">visual_collision_entity.cpp</a>. +<p> +References <a class="el" href="a06726.html#l00149">_CeilMode</a>, <a class="el" href="a06726.html#l00171">_CurrentBBoxValidity</a>, <a class="el" href="a06726.html#l00150">_GroundMode</a>, <a class="el" href="a06726.html#l00173">_LastGPTValid</a>, <a class="el" href="a06726.html#l00167">_PatchQuadBlocks</a>, <a class="el" href="a06726.html#l00151">_SnapToRenderedTesselation</a>, <a class="el" href="a06725.html#l00050">_StartPatchQuadBlockSize</a>, and <a class="el" href="a05385.html#l00067">NLMISC::CAABBox::setHalfSize()</a>. +<p> +<div class="fragment"><pre>00056 : <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_6">_LandscapeQuadGrid</a>(owner) +00057 { +00058 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityr2">_Owner</a>= owner; +00059 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_11">_PatchQuadBlocks</a>.reserve(_StartPatchQuadBlockSize); +00060 +00061 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_5">_CurrentBBoxValidity</a>.setHalfSize(CVector::Null); +00062 +00063 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityr1">_GroundMode</a>= <span class="keyword">true</span>; +00064 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityr0">_CeilMode</a>= <span class="keyword">false</span>; +00065 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityr3">_SnapToRenderedTesselation</a>= <span class="keyword">true</span>; +00066 +00067 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_10">_LastGPTValid</a>= <span class="keyword">false</span>; +00068 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntitya10" doxytag="NL3D::CVisualCollisionEntity::~CVisualCollisionEntity" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> NL3D::CVisualCollisionEntity::~<a class="el" href="a03705.html">CVisualCollisionEntity</a> </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06725.html#l00072">72</a> of file <a class="el" href="a06725.html">visual_collision_entity.cpp</a>. +<p> +References <a class="el" href="a06726.html#l00169">_LandscapeQuadGrid</a>, <a class="el" href="a06726.html#l00167">_PatchQuadBlocks</a>, <a class="el" href="a05864.html#l00059">NL3D::CLandscapeCollisionGrid::clear()</a>, <a class="el" href="a06729.html#l00114">NL3D::CVisualCollisionManager::deletePatchQuadBlock()</a>, and <a class="el" href="a05981.html#l00104">sint</a>. +<p> +<div class="fragment"><pre>00073 { +00074 <span class="comment">// delete the _PatchQuadBlocks.</span> +00075 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a14">sint</a> i=0; i<(<a class="code" href="a04558.html#a14">sint</a>)<a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_11">_PatchQuadBlocks</a>.size(); i++) +00076 { +00077 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityr2">_Owner</a>->deletePatchQuadBlock(_PatchQuadBlocks[i]); +00078 } +00079 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_11">_PatchQuadBlocks</a>.clear(); +00080 +00081 <span class="comment">// delete the quadgrid.</span> +00082 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_6">_LandscapeQuadGrid</a>.clear(); +00083 } +</pre></div> </td> + </tr> +</table> +<hr><h2>Member Function Documentation</h2> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntityz1174_12" doxytag="NL3D::CVisualCollisionEntity::computeUvForPos" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CVisualCollisionEntity::computeUvForPos </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top">const <a class="el" href="a03620.html">CTrianglePatch</a> & </td> + <td class="mdname" nowrap> <em>tri</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap>const <a class="el" href="a03128.html">CVector</a> & </td> + <td class="mdname" nowrap> <em>pos</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a03640.html">CUV</a> & </td> + <td class="mdname" nowrap> <em>uv</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [static, private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +given a <a class="el" href="a03620.html">CTrianglePatch</a>, compute Patch uv according to position. +<p> + +<p> +Definition at line <a class="el" href="a06725.html#l00247">247</a> of file <a class="el" href="a06725.html">visual_collision_entity.cpp</a>. +<p> +References <a class="el" href="a06584.html#l00067">NLMISC::CTriangle::computeGradient()</a>, <a class="el" href="a06655.html#l00049">NLMISC::CUV::U</a>, <a class="el" href="a05760.html#l00170">NLMISC::CTriangleUV::Uv0</a>, <a class="el" href="a05760.html#l00170">NLMISC::CTriangleUV::Uv1</a>, <a class="el" href="a05760.html#l00170">NLMISC::CTriangleUV::Uv2</a>, <a class="el" href="a06655.html#l00049">NLMISC::CUV::V</a>, and <a class="el" href="a06585.html#l00051">NLMISC::CTriangle::V0</a>. +<p> +Referenced by <a class="el" href="a06725.html#l00527">getStaticLightSetup()</a>, <a class="el" href="a06725.html#l00565">getSurfaceInfo()</a>, and <a class="el" href="a06725.html#l00261">snapToLandscapeCurrentTesselation()</a>. +<p> +<div class="fragment"><pre>00248 { +00249 <span class="comment">// compute UV gradients.</span> +00250 CVector Gu; +00251 CVector Gv; +00252 tri.computeGradient(tri.Uv0.U, tri.Uv1.U, tri.Uv2.U, Gu); +00253 tri.computeGradient(tri.Uv0.V, tri.Uv1.V, tri.Uv2.V, Gv); +00254 <span class="comment">// interpolate</span> +00255 uv.<a class="code" href="a03640.html#NLMISC_1_1CUVo0">U</a>= tri.Uv0.U + Gu*(pos-tri.V0); +00256 uv.<a class="code" href="a03640.html#NLMISC_1_1CUVo1">V</a>= tri.Uv0.V + Gv*(pos-tri.V0); +00257 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntityz1172_0" doxytag="NL3D::CVisualCollisionEntity::displayDebugGrid" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CVisualCollisionEntity::displayDebugGrid </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02434.html">IDriver</a> & </td> + <td class="mdname1" valign="top" nowrap> <em>drv</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap> const</td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Draw lines for the landscape quadgrid collision faces under us. +<p> + +<p> +Definition at line <a class="el" href="a06725.html#l00612">612</a> of file <a class="el" href="a06725.html">visual_collision_entity.cpp</a>. +<p> +References <a class="el" href="a06726.html#l00167">_PatchQuadBlocks</a>, <a class="el" href="a05968.html#l00059">NL3D::CMaterial::initUnlit()</a>, <a class="el" href="a06156.html#l00065">NL_PATCH_BLOCK_MAX_VERTEX</a>, <a class="el" href="a06156.html#l00255">NL3D::CPatchQuadBlock::PatchBlockId</a>, <a class="el" href="a05646.html#l00977">s</a>, <a class="el" href="a06156.html#l00201">NL3D::CPatchBlockIdent::S0</a>, <a class="el" href="a06156.html#l00201">NL3D::CPatchBlockIdent::S1</a>, <a class="el" href="a05646.html#l00985">t</a>, <a class="el" href="a06156.html#l00201">NL3D::CPatchBlockIdent::T0</a>, <a class="el" href="a06156.html#l00201">NL3D::CPatchBlockIdent::T1</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a06156.html#l00258">NL3D::CPatchQuadBlock::Vertices</a>. +<p> +Referenced by <a class="el" href="a06727.html#l00118">NL3D::CVisualCollisionEntityUser::displayDebugGrid()</a>. +<p> +<div class="fragment"><pre>00613 { +00614 <span class="comment">// static to not reallocate each frame</span> +00615 <span class="keyword">static</span> CMaterial mat; +00616 <span class="keyword">static</span> <span class="keywordtype">bool</span> inited= <span class="keyword">false</span>; +00617 <span class="keywordflow">if</span>(!inited) +00618 { +00619 inited= <span class="keyword">true</span>; +00620 mat.initUnlit(); +00621 } +00622 <span class="keyword">static</span> vector<CLine> lineList; +00623 lineList.clear(); +00624 +00625 <span class="comment">// Build lines for all patch quad blocks.</span> +00626 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i<<a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_11">_PatchQuadBlocks</a>.size();i++) +00627 { +00628 CPatchQuadBlock &pqb= *<a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_11">_PatchQuadBlocks</a>[i]; +00629 <span class="comment">// Parse all quads of this patch block.</span> +00630 CPatchBlockIdent &pbid= pqb.PatchBlockId; +00631 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a627">t</a>= pbid.T0; <a class="code" href="a04223.html#a627">t</a><pbid.T1; <a class="code" href="a04223.html#a627">t</a>++) +00632 { +00633 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a626">s</a>= pbid.S0; <a class="code" href="a04223.html#a626">s</a><pbid.S1; <a class="code" href="a04223.html#a626">s</a>++) +00634 { +00635 <span class="comment">// compute quad coordinate in pqb.</span> +00636 <a class="code" href="a04558.html#a15">uint</a> sd0= (<a class="code" href="a04223.html#a626">s</a>-pbid.S0); +00637 <a class="code" href="a04558.html#a15">uint</a> td0= (<a class="code" href="a04223.html#a627">t</a>-pbid.T0); +00638 <a class="code" href="a04558.html#a15">uint</a> sd1= sd0+1; +00639 <a class="code" href="a04558.html#a15">uint</a> td1= td0+1; +00640 <span class="comment">// get 4 vertex coord of quad</span> +00641 <span class="keyword">const</span> CVector &p0= pqb.Vertices[sd0 + td0*<a class="code" href="a04733.html#a10">NL_PATCH_BLOCK_MAX_VERTEX</a>]; +00642 <span class="keyword">const</span> CVector &p1= pqb.Vertices[sd0 + td1*<a class="code" href="a04733.html#a10">NL_PATCH_BLOCK_MAX_VERTEX</a>]; +00643 <span class="keyword">const</span> CVector &p2= pqb.Vertices[sd1 + td1*<a class="code" href="a04733.html#a10">NL_PATCH_BLOCK_MAX_VERTEX</a>]; +00644 <span class="keyword">const</span> CVector &p3= pqb.Vertices[sd1 + td0*<a class="code" href="a04733.html#a10">NL_PATCH_BLOCK_MAX_VERTEX</a>]; +00645 +00646 <span class="comment">// build the 5 lines</span> +00647 lineList.push_back(<a class="code" href="a02759.html">CLine</a>(p0, p1)); +00648 lineList.push_back(<a class="code" href="a02759.html">CLine</a>(p1, p2)); +00649 lineList.push_back(<a class="code" href="a02759.html">CLine</a>(p2, p3)); +00650 lineList.push_back(<a class="code" href="a02759.html">CLine</a>(p3, p0)); +00651 lineList.push_back(<a class="code" href="a02759.html">CLine</a>(p0, p2)); +00652 } +00653 } +00654 } +00655 +00656 <span class="comment">// Display the lines.</span> +00657 CDRU::drawLinesUnlit(lineList, mat, drv); +00658 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntityz1174_0" doxytag="NL3D::CVisualCollisionEntity::doComputeLandscape" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CVisualCollisionEntity::doComputeLandscape </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top">const <a class="el" href="a03128.html">CVector</a> & </td> + <td class="mdname1" valign="top" nowrap> <em>pos</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +compute tiles infos around the position. +<p> + +<p> +Definition at line <a class="el" href="a06725.html#l00414">414</a> of file <a class="el" href="a06725.html">visual_collision_entity.cpp</a>. +<p> +References <a class="el" href="a06726.html#l00171">_CurrentBBoxValidity</a>, <a class="el" href="a06730.html#l00130">NL3D::CVisualCollisionManager::_Landscape</a>, <a class="el" href="a06726.html#l00169">_LandscapeQuadGrid</a>, <a class="el" href="a06726.html#l00167">_PatchQuadBlocks</a>, <a class="el" href="a06725.html#l00051">_TmpBlockIds</a>, <a class="el" href="a06725.html#l00052">_TmpPatchQuadBlocks</a>, <a class="el" href="a06725.html#l00048">BBoxRadius</a>, <a class="el" href="a06725.html#l00049">BBoxRadiusZ</a>, <a class="el" href="a05864.html#l00147">NL3D::CLandscapeCollisionGrid::build()</a>, <a class="el" href="a06729.html#l00114">NL3D::CVisualCollisionManager::deletePatchQuadBlock()</a>, <a class="el" href="a06729.html#l00108">NL3D::CVisualCollisionManager::newPatchQuadBlock()</a>, <a class="el" href="a05385.html#l00066">NLMISC::CAABBox::setCenter()</a>, <a class="el" href="a05385.html#l00067">NLMISC::CAABBox::setHalfSize()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a06673.html#l00051">NLMISC::CVector::x</a>, <a class="el" href="a06673.html#l00051">NLMISC::CVector::y</a>, and <a class="el" href="a06673.html#l00051">NLMISC::CVector::z</a>. +<p> +Referenced by <a class="el" href="a06725.html#l00403">testComputeLandscape()</a>. +<p> +<div class="fragment"><pre>00415 { +00416 <a class="code" href="a04558.html#a14">sint</a> i; +00417 +00418 <span class="comment">// setup new bbox.</span> +00419 <span class="comment">//==================</span> +00420 <span class="comment">// compute the bbox which must includes the patchQuadBlocks</span> +00421 CAABBox bboxToIncludePatchs; +00422 bboxToIncludePatchs.setCenter(pos); +00423 bboxToIncludePatchs.setHalfSize(CVector(BBoxRadius, BBoxRadius, BBoxRadiusZ)); +00424 <span class="comment">// setup the _CurrentBBoxValidity with same values, but BBoxRadiusZ/2</span> +00425 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_5">_CurrentBBoxValidity</a>.setCenter(pos); +00426 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_5">_CurrentBBoxValidity</a>.setHalfSize(CVector(BBoxRadius, BBoxRadius, BBoxRadiusZ/2)); +00427 +00428 +00429 <span class="comment">// Search landscape blocks which are in the bbox.</span> +00430 <span class="comment">//==================</span> +00431 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityr2">_Owner</a>->_Landscape->buildPatchBlocksInBBox(bboxToIncludePatchs, _TmpBlockIds); +00432 +00433 +00434 +00435 <span class="comment">// Recompute PatchQuadBlockcs.</span> +00436 <span class="comment">//==================</span> +00437 <span class="comment">// This parts try to keeps old patch blocks so they are not recomputed if they already here.</span> +00438 +00439 <span class="comment">// sort PatchBlockIdent.</span> +00440 sort(<a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_16">_TmpBlockIds</a>.begin(), <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_16">_TmpBlockIds</a>.end()); +00441 +00442 <span class="comment">// Copy old array of ptr (ptr copy only).</span> +00443 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_17">_TmpPatchQuadBlocks</a>= <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_11">_PatchQuadBlocks</a>; +00444 +00445 <span class="comment">// allocate dest array.</span> +00446 _PatchQuadBlocks.resize(<a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_16">_TmpBlockIds</a>.size()); +00447 +00448 <span class="comment">// Traverse all current patchBlocks, deleting old ones no longer needed, and creating new ones.</span> +00449 <span class="comment">// this algorithm suppose both array are sorted.</span> +00450 <a class="code" href="a04558.html#a15">uint</a> iOld=0; +00451 <span class="comment">// parse until dest is filled.</span> +00452 <span class="keywordflow">for</span>(i=0; i<(<a class="code" href="a04558.html#a14">sint</a>)_PatchQuadBlocks.size();) +00453 { +00454 <span class="comment">// get requested new BlockIdent.</span> +00455 CPatchBlockIdent newBi= <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_16">_TmpBlockIds</a>[i]; +00456 +00457 <span class="comment">// get requested old BlockIdent in the array.</span> +00458 <span class="keywordtype">bool</span> oldEnd= <span class="keyword">false</span>; +00459 CPatchBlockIdent oldBi; +00460 <span class="keywordflow">if</span>(iOld==<a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_17">_TmpPatchQuadBlocks</a>.size()) +00461 oldEnd= <span class="keyword">true</span>; +00462 <span class="keywordflow">else</span> +00463 oldBi= <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_17">_TmpPatchQuadBlocks</a>[iOld]->PatchBlockId; +00464 +00465 <span class="comment">// if no more old blocks, or if new Block is < than current, we must create a new block, and insert it.</span> +00466 <span class="keywordflow">if</span>(oldEnd || newBi < oldBi) +00467 { +00468 <span class="comment">// allocate the patch block.</span> +00469 _PatchQuadBlocks[i]= <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityr2">_Owner</a>->newPatchQuadBlock(); +00470 <span class="comment">// fill the patch block.</span> +00471 _PatchQuadBlocks[i]->PatchBlockId= _TmpBlockIds[i]; +00472 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityr2">_Owner</a>->_Landscape->fillPatchQuadBlock(*_PatchQuadBlocks[i]); +00473 +00474 <span class="comment">// next new patch block.</span> +00475 i++; +00476 } +00477 <span class="comment">// else if current new Block is same than old block, just copy ptr.</span> +00478 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(newBi==oldBi) +00479 { +00480 <span class="comment">// just copy ptr with the old one.</span> +00481 _PatchQuadBlocks[i]= _TmpPatchQuadBlocks[iOld]; +00482 +00483 <span class="comment">// next new and old patch block.</span> +00484 i++; +00485 iOld++; +00486 } +00487 <span class="comment">// else, this old block is no longer used, delete it.</span> +00488 <span class="keywordflow">else</span> +00489 { +00490 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityr2">_Owner</a>->deletePatchQuadBlock(_TmpPatchQuadBlocks[iOld]); +00491 <span class="comment">// next old patch block.</span> +00492 iOld++; +00493 } +00494 } +00495 <span class="comment">// Here, must delete old blocks not yet processed.</span> +00496 <span class="keywordflow">for</span>(;iOld<<a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_17">_TmpPatchQuadBlocks</a>.size(); iOld++) +00497 { +00498 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityr2">_Owner</a>->deletePatchQuadBlock(_TmpPatchQuadBlocks[iOld]); +00499 } +00500 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_17">_TmpPatchQuadBlocks</a>.clear(); +00501 +00502 +00503 <span class="comment">// Compute the quadGrid.</span> +00504 <span class="comment">//==================</span> +00505 +00506 <span class="comment">// Compute a delta so elt position for CLandscapeCollisionGrid are positive, and so fastFloor() used will work.</span> +00507 CVector delta; +00508 <span class="comment">// center the position on 0.</span> +00509 <span class="comment">// floor may be important for precision when the delta is applied.</span> +00510 delta.x= (<span class="keywordtype">float</span>)floor(-pos.x); +00511 delta.y= (<span class="keywordtype">float</span>)floor(-pos.y); +00512 delta.z= 0; +00513 <span class="comment">// We must always have positive values for patchBlocks vertices.</span> +00514 <span class="keywordtype">float</span> val= (<span class="keywordtype">float</span>)ceil(BBoxRadius + 256); +00515 <span class="comment">// NB: 256 is a security. Because of size of patchs, a value of 32 at max should be sufficient (64 for bigger patch (gfx))</span> +00516 <span class="comment">// we are large because doesn't matter, the CLandscapeCollisionGrid tiles.</span> +00517 delta.x+= val; +00518 delta.y+= val; +00519 +00520 <span class="comment">// rebuild the quadGrid.</span> +00521 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_6">_LandscapeQuadGrid</a>.build(_PatchQuadBlocks, delta); +00522 +00523 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntitya1" doxytag="NL3D::CVisualCollisionEntity::getCeilMode" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool NL3D::CVisualCollisionEntity::getCeilMode </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap> const<code> [inline]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06726.html#l00090">90</a> of file <a class="el" href="a06726.html">visual_collision_entity.h</a>. +<p> +References <a class="el" href="a06726.html#l00149">_CeilMode</a>. +<p> +Referenced by <a class="el" href="a06727.html#l00084">NL3D::CVisualCollisionEntityUser::getCeilMode()</a>. +<p> +<div class="fragment"><pre>00090 {<span class="keywordflow">return</span> <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityr0">_CeilMode</a>;} +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntitya2" doxytag="NL3D::CVisualCollisionEntity::getGroundMode" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool NL3D::CVisualCollisionEntity::getGroundMode </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap> const<code> [inline]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06726.html#l00089">89</a> of file <a class="el" href="a06726.html">visual_collision_entity.h</a>. +<p> +References <a class="el" href="a06726.html#l00150">_GroundMode</a>. +<p> +Referenced by <a class="el" href="a06727.html#l00077">NL3D::CVisualCollisionEntityUser::getGroundMode()</a>. +<p> +<div class="fragment"><pre>00089 {<span class="keywordflow">return</span> <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityr1">_GroundMode</a>;} +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntityz1174_1" doxytag="NL3D::CVisualCollisionEntity::getPatchTriangleUnderUs" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a03620.html">CTrianglePatch</a> * NL3D::CVisualCollisionEntity::getPatchTriangleUnderUs </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top">const <a class="el" href="a03128.html">CVector</a> & </td> + <td class="mdname" nowrap> <em>pos</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a03128.html">CVector</a> & </td> + <td class="mdname" nowrap> <em>res</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +return the best trianglePatch under what we are. NULL if not found. Ptr is valid until next call to <a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_1">getPatchTriangleUnderUs()</a> Actually return NULL or +<p> +Definition at line <a class="el" href="a06725.html#l00096">96</a> of file <a class="el" href="a06725.html">visual_collision_entity.cpp</a>. +<p> +References <a class="el" href="a06730.html#l00130">NL3D::CVisualCollisionManager::_Landscape</a>, <a class="el" href="a06726.html#l00169">_LandscapeQuadGrid</a>, <a class="el" href="a06726.html#l00174">_LastGPTPosInput</a>, <a class="el" href="a06726.html#l00175">_LastGPTPosOutput</a>, <a class="el" href="a06726.html#l00176">_LastGPTTrianglePatch</a>, <a class="el" href="a06726.html#l00173">_LastGPTValid</a>, <a class="el" href="a06726.html#l00167">_PatchQuadBlocks</a>, <a class="el" href="a06155.html#l00410">NL3D::CPatchQuadBlock::buildTileTriangles()</a>, <a class="el" href="a06730.html#l00059">NL3D::CVisualTileDescNode::Next</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a06730.html#l00055">NL3D::CVisualTileDescNode::PatchQuadBlocId</a>, <a class="el" href="a06730.html#l00057">NL3D::CVisualTileDescNode::QuadId</a>, <a class="el" href="a05646.html#l01119">res</a>, <a class="el" href="a05864.html#l00273">NL3D::CLandscapeCollisionGrid::select()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05587.html#l00107">NLMISC::sqr()</a>, <a class="el" href="a06725.html#l00403">testComputeLandscape()</a>, <a class="el" href="a06725.html#l00366">triangleIntersect()</a>, and <a class="el" href="a05981.html#l00096">uint8</a>. +<p> +Referenced by <a class="el" href="a06725.html#l00527">getStaticLightSetup()</a>, <a class="el" href="a06725.html#l00565">getSurfaceInfo()</a>, and <a class="el" href="a06725.html#l00211">snapToGround()</a>. +<p> +<div class="fragment"><pre>00097 { +00098 <span class="comment">// verify if landscape (refptr) is here.</span> +00099 <span class="keywordflow">if</span>(<a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityr2">_Owner</a>->_Landscape==NULL) +00100 { +00101 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_10">_LastGPTValid</a>= <span class="keyword">false</span>; +00102 <span class="keywordflow">return</span> NULL; +00103 } +00104 +00105 +00106 <span class="comment">// Test GPT cache.</span> +00107 <span class="comment">//==================</span> +00108 <span class="comment">// If last call was valid, and if same pos (input or output), return cached information</span> +00109 <span class="keywordflow">if</span>(<a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_10">_LastGPTValid</a> && (pos==<a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_7">_LastGPTPosInput</a> || pos==<a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_8">_LastGPTPosOutput</a>) ) +00110 { +00111 <span class="comment">// copy from cache.</span> +00112 <a class="code" href="a04223.html#a643">res</a>= <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_8">_LastGPTPosOutput</a>; +00113 <span class="comment">/* don't modify _LastGPTPosInput cache, for best cache behavior in all cases.</span> +00114 <span class="comment"> 1/ this is not necessary (here, if pos!=_LastGPTPosInput, THEN pos==_LastGPTPosOutput, no other possibilities)</span> +00115 <span class="comment"> 2/ it causes problems when getPatchTriangleUnderUs() is called randomly with the unsnapped or snapped position:</span> +00116 <span class="comment"> 1st Time: zin:9.0 => zout:9.5 cache fail (ok, 1st time...)</span> +00117 <span class="comment"> 2nd Time: zin:9.0 => zout:9.5 cache OK (_LastGPTPosInput.z==zin)</span> +00118 <span class="comment"> 3rd Time: zin:9.5 => zout:9.5 cache OK (_LastGPTPosOutput.z==zin)</span> +00119 <span class="comment"> 4th Time: zin:9.0 => zout:9.5 cache FAILS (_LastGPTPosInput.z= 9.5 => !=zin)</span> +00120 <span class="comment"> */</span> +00121 <span class="comment">// and return ptr on cache.</span> +00122 <span class="keywordflow">return</span> &<a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_9">_LastGPTTrianglePatch</a>; +00123 } +00124 +00125 +00126 <span class="comment">// update the cache of tile info near this position.</span> +00127 <span class="comment">// =================</span> +00128 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_3">testComputeLandscape</a>(pos); +00129 +00130 +00131 <span class="comment">// find possible faces under the entity.</span> +00132 <span class="comment">// =================</span> +00133 CVisualTileDescNode *ptr= <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_6">_LandscapeQuadGrid</a>.select(pos); +00134 +00135 +00136 <span class="comment">// find the better face under the entity.</span> +00137 <span class="comment">// =================</span> +00138 <span class="keywordtype">float</span> sqrBestDist= <a class="code" href="a05378.html#a373">sqr</a>(1000.f); +00139 CVector hit; +00140 <span class="comment">// build the vertical ray.</span> +00141 CVector segP0= pos - CVector(0,0,100); +00142 CVector segP1= pos + CVector(0,0,100); +00143 +00144 +00145 <span class="comment">// triangles builded from this list.</span> +00146 <span class="keyword">static</span> vector<CTrianglePatch> testTriangles; +00147 <span class="comment">// NB: not so many reallocation here, because static.</span> +00148 testTriangles.clear(); +00149 <a class="code" href="a04558.html#a14">sint</a> bestTriangle= 0; +00150 +00151 +00152 <span class="comment">// For all the faces in this quadgrid node.</span> +00153 <span class="keywordflow">while</span>(ptr) +00154 { +00155 <span class="comment">// what is the quad block of this tile Id.</span> +00156 <a class="code" href="a04558.html#a14">sint</a> qbId= ptr->PatchQuadBlocId; +00157 <a class="code" href="a04199.html#a6">nlassert</a>(qbId>=0 && qbId<(<a class="code" href="a04558.html#a14">sint</a>)<a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_11">_PatchQuadBlocks</a>.size()); +00158 CPatchQuadBlock &qb= *<a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_11">_PatchQuadBlocks</a>[qbId]; +00159 +00160 <span class="comment">// Build the 2 triangles of this tile Id.</span> +00161 <a class="code" href="a04558.html#a14">sint</a> idStart= testTriangles.size(); +00162 testTriangles.resize(idStart+2); +00163 qb.buildTileTriangles((<a class="code" href="a04558.html#a7">uint8</a>)ptr->QuadId, &testTriangles[idStart]); +00164 +00165 <span class="comment">// Test the 2 triangles.</span> +00166 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a14">sint</a> i=0; i<2; i++) +00167 { +00168 CTrianglePatch &tri= testTriangles[idStart+i]; +00169 <span class="comment">// test if the ray intersect.</span> +00170 <span class="comment">// NB: triangleIntersect() is faster than CTriangle::intersect().</span> +00171 <span class="keywordflow">if</span>(<a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_4">triangleIntersect</a>(tri, segP0, segP1, hit)) +00172 { +00173 <span class="comment">// find the nearest triangle.</span> +00174 <span class="keywordtype">float</span> sqrdist= (hit-pos).sqrnorm(); +00175 <span class="keywordflow">if</span>(sqrdist<sqrBestDist) +00176 { +00177 bestTriangle= idStart+i; +00178 <a class="code" href="a04223.html#a643">res</a>= hit; +00179 sqrBestDist= sqrdist; +00180 } +00181 } +00182 } +00183 +00184 +00185 <span class="comment">// Next in the list.</span> +00186 ptr= ptr->Next; +00187 } +00188 +00189 +00190 <span class="comment">// found ??</span> +00191 <span class="keywordflow">if</span>(sqrBestDist<<a class="code" href="a05378.html#a373">sqr</a>(1000)) +00192 { +00193 <span class="comment">// copy into cache</span> +00194 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_10">_LastGPTValid</a>= <span class="keyword">true</span>; +00195 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_9">_LastGPTTrianglePatch</a>= testTriangles[bestTriangle]; +00196 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_7">_LastGPTPosInput</a>= pos; +00197 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_8">_LastGPTPosOutput</a>= <a class="code" href="a04223.html#a643">res</a>; +00198 <span class="comment">// and return ptr on cache.</span> +00199 <span class="keywordflow">return</span> &<a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_9">_LastGPTTrianglePatch</a>; +00200 } +00201 <span class="keywordflow">else</span> +00202 { +00203 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_10">_LastGPTValid</a>= <span class="keyword">false</span>; +00204 <span class="keywordflow">return</span> NULL; +00205 } +00206 +00207 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntitya3" doxytag="NL3D::CVisualCollisionEntity::getSnapToRenderedTesselation" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool NL3D::CVisualCollisionEntity::getSnapToRenderedTesselation </td> + <td class="md" valign="top">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap> const<code> [inline]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06726.html#l00098">98</a> of file <a class="el" href="a06726.html">visual_collision_entity.h</a>. +<p> +References <a class="el" href="a06726.html#l00151">_SnapToRenderedTesselation</a>. +<p> +Referenced by <a class="el" href="a06727.html#l00100">NL3D::CVisualCollisionEntityUser::getSnapToRenderedTesselation()</a>. +<p> +<div class="fragment"><pre>00098 {<span class="keywordflow">return</span> <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityr3">_SnapToRenderedTesselation</a>;} +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntityz1170_0" doxytag="NL3D::CVisualCollisionEntity::getStaticLightSetup" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool NL3D::CVisualCollisionEntity::getStaticLightSetup </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top">const <a class="el" href="a03128.html">CVector</a> & </td> + <td class="mdname" nowrap> <em>pos</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap>std::vector< <a class="el" href="a03092.html">CPointLightInfluence</a> > & </td> + <td class="mdname" nowrap> <em>pointLightList</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a> & </td> + <td class="mdname" nowrap> <em>sunContribution</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a03337.html">NLMISC::CRGBA</a> & </td> + <td class="mdname" nowrap> <em>localAmbient</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Get the static Light Setup, using landscape under us. append lights to pointLightList. NB: if find no landscape faces, don't modify pointLightList, set sunContribution=255, and return false Else, use <a class="el" href="a03057.html#NL3D_1_1CPatcho4">CPatch::TileLightInfluences</a> to get lights, and use CPatch::Lumels to get sunContribution. NB: because CPatch::Lumels encode the gouraud shading on the surface, returning lumelValue will darken the object too much. To avoid this, the sunContribution is raised to a power (0..1). See <a class="el" href="a03707.html#NL3D_1_1CVisualCollisionManagera7">CVisualCollisionManager::setSunContributionPower()</a>. Default is 0.5 +<p> +Definition at line <a class="el" href="a06725.html#l00527">527</a> of file <a class="el" href="a06725.html">visual_collision_entity.cpp</a>. +<p> +References <a class="el" href="a06730.html#l00130">NL3D::CVisualCollisionManager::_Landscape</a>, <a class="el" href="a06730.html#l00222">NL3D::CVisualCollisionManager::_SunContributionLUT</a>, <a class="el" href="a06725.html#l00247">computeUvForPos()</a>, <a class="el" href="a06725.html#l00096">getPatchTriangleUnderUs()</a>, <a class="el" href="a06156.html#l00181">NL3D::CTrianglePatch::PatchId</a>, <a class="el" href="a05646.html#l01119">res</a>, <a class="el" href="a06339.html#l00066">NLMISC::CRGBA::set()</a>, and <a class="el" href="a05981.html#l00096">uint8</a>. +<p> +Referenced by <a class="el" href="a05824.html#l00633">NL3D::CInstanceLighter::computeSunContribution()</a>, and <a class="el" href="a06727.html#l00109">NL3D::CVisualCollisionEntityUser::getStaticLightSetup()</a>. +<p> +<div class="fragment"><pre>00529 { +00530 <span class="comment">// Get Patch Triangle Under Us</span> +00531 CVector <a class="code" href="a04223.html#a643">res</a>; +00532 CTrianglePatch *tri= <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_1">getPatchTriangleUnderUs</a>(pos, res); +00533 +00534 <span class="comment">// For now, no localAmbient support on landscape.</span> +00535 localAmbient.<a class="code" href="a03337.html#NLMISC_1_1CRGBAa14">set</a>(0,0,0,0); +00536 +00537 <span class="comment">// result. NB: if not found, dot not modify.</span> +00538 <span class="keywordflow">if</span>( tri ) +00539 { +00540 <span class="comment">// compute UV for position.</span> +00541 <a class="code" href="a03640.html">CUV</a> uv; +00542 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_12">computeUvForPos</a>(*tri, pos, uv); +00543 +00544 <span class="comment">// get the sunContribution</span> +00545 sunContribution= <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityr2">_Owner</a>->_Landscape->getLumel(tri->PatchId, uv); +00546 <span class="comment">// see getStaticLightSetup.</span> +00547 sunContribution= <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityr2">_Owner</a>->_SunContributionLUT[sunContribution]; +00548 +00549 <span class="comment">// append any lights of interest.</span> +00550 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityr2">_Owner</a>->_Landscape->appendTileLightInfluences(tri->PatchId, uv, pointLightList); +00551 +00552 <span class="keywordflow">return</span> <span class="keyword">true</span>; +00553 } +00554 <span class="keywordflow">else</span> +00555 { +00556 <span class="comment">// Suppose full Sun Contribution, and don't add any pointLight</span> +00557 sunContribution= 255; +00558 +00559 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00560 } +00561 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntitya4" doxytag="NL3D::CVisualCollisionEntity::getSurfaceInfo" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool NL3D::CVisualCollisionEntity::getSurfaceInfo </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top">const <a class="el" href="a03128.html">CVector</a> & </td> + <td class="mdname" nowrap> <em>pos</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a03463.html">CSurfaceInfo</a> & </td> + <td class="mdname" nowrap> <em>info</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Get surface informations. pos is checked with polygons that are at least (cache dependent) at +- 10m in altitude. <dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign=top><em>info</em> </td><td>will be filled with surface informations if the method returns true. </td></tr> + </table> +</dl> +<dl compact><dt><b>Returns:</b></dt><dd>true if the surface has been found and informations has been filled.</dd></dl> + +<p> +Definition at line <a class="el" href="a06725.html#l00565">565</a> of file <a class="el" href="a06725.html">visual_collision_entity.cpp</a>. +<p> +References <a class="el" href="a06730.html#l00130">NL3D::CVisualCollisionManager::_Landscape</a>, <a class="el" href="a06725.html#l00247">computeUvForPos()</a>, <a class="el" href="a06725.html#l00096">getPatchTriangleUnderUs()</a>, <a class="el" href="a06537.html#l00520">NL3D::CTileBank::getTileSet()</a>, <a class="el" href="a06537.html#l00560">NL3D::CTileBank::getTileXRef()</a>, <a class="el" href="a05788.html#l00056">H_AUTO</a>, <a class="el" href="a06541.html#l00053">NL_TILE_ELM_LAYER_EMPTY</a>, <a class="el" href="a06156.html#l00181">NL3D::CTrianglePatch::PatchId</a>, <a class="el" href="a05646.html#l01119">res</a>, <a class="el" href="a06537.html#l00442">NL3D::CTileSet::SurfaceData</a>, <a class="el" href="a06541.html#l00077">NL3D::CTileElement::Tile</a>, <a class="el" href="a05646.html#l00244">type</a>, <a class="el" href="a05981.html#l00098">uint16</a>, and <a class="el" href="a06637.html#l00053">NL3D::CSurfaceInfo::UserSurfaceData</a>. +<p> +Referenced by <a class="el" href="a06727.html#l00125">NL3D::CVisualCollisionEntityUser::getSurfaceInfo()</a>. +<p> +<div class="fragment"><pre>00566 { +00567 <a class="code" href="a04365.html#a4">H_AUTO</a>( NL3D_CVisualCollisionEntity_getSurfaceInfo ) +00568 <span class="comment">// Get Patch Triangle Under Us</span> +00569 CVector <a class="code" href="a04223.html#a643">res</a>; +00570 CTrianglePatch *tri= <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_1">getPatchTriangleUnderUs</a>(pos, res); +00571 +00572 <span class="comment">// result. NB: if not found, dot not modify.</span> +00573 <span class="keywordflow">if</span>( tri ) +00574 { +00575 <span class="comment">// compute UV for position.</span> +00576 <a class="code" href="a03640.html">CUV</a> uv; +00577 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_12">computeUvForPos</a>(*tri, pos, uv); +00578 +00579 <span class="comment">// get the tileelement</span> +00580 CTileElement *tileElm = <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityr2">_Owner</a>->_Landscape->getTileElement(tri->PatchId, uv); +00581 <span class="keywordflow">if</span> (tileElm) +00582 { +00583 <span class="comment">// Valid tile ?</span> +00584 <a class="code" href="a04558.html#a9">uint16</a> tileId = tileElm->Tile[0]; +00585 <span class="keywordflow">if</span> (tileId != <a class="code" href="a05118.html#a12">NL_TILE_ELM_LAYER_EMPTY</a>) +00586 { +00587 <span class="comment">// The tilebank</span> +00588 CTileBank &tileBank = <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityr2">_Owner</a>->_Landscape->TileBank; +00589 +00590 <span class="comment">// Get xref info for this tile</span> +00591 <span class="keywordtype">int</span> tileSet; +00592 <span class="keywordtype">int</span> number; +00593 CTileBank::TTileType <a class="code" href="a04223.html#a581">type</a>; +00594 tileBank.getTileXRef ((<span class="keywordtype">int</span>)tileId, tileSet, number, type); +00595 +00596 <span class="comment">// Get the tileset from layer 0</span> +00597 <span class="keyword">const</span> CTileSet* tileSetPtr = tileBank.getTileSet (tileSet); +00598 +00599 <span class="comment">// Fill the surface</span> +00600 surfaceInfo.UserSurfaceData = tileSetPtr->SurfaceData; +00601 +00602 <span class="comment">// Ok</span> +00603 <span class="keywordflow">return</span> <span class="keyword">true</span>; +00604 } +00605 } +00606 } +00607 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00608 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntitya5" doxytag="NL3D::CVisualCollisionEntity::setCeilMode" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CVisualCollisionEntity::setCeilMode </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top">bool </td> + <td class="mdname1" valign="top" nowrap> <em>ceilMode</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [inline]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +If ceilMode is true, the entity is snapped on faces with <a class="el" href="a04223.html#a574">normal.z</a> < 0. Default is false. NB: if both groundMode and ceilMode are false, snapToGround is a no-op. +<p> +Definition at line <a class="el" href="a06726.html#l00086">86</a> of file <a class="el" href="a06726.html">visual_collision_entity.h</a>. +<p> +References <a class="el" href="a06726.html#l00149">_CeilMode</a>. +<p> +Referenced by <a class="el" href="a06727.html#l00070">NL3D::CVisualCollisionEntityUser::setCeilMode()</a>. +<p> +<div class="fragment"><pre>00086 {<a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityr0">_CeilMode</a>= ceilMode;} +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntitya6" doxytag="NL3D::CVisualCollisionEntity::setGroundMode" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CVisualCollisionEntity::setGroundMode </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top">bool </td> + <td class="mdname1" valign="top" nowrap> <em>groundMode</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [inline]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +If groundMode is true, the entity is snapped on faces with <a class="el" href="a04223.html#a574">normal.z</a> > 0. Default is true. NB: if both groundMode and ceilMode are false, snapToGround is a no-op. +<p> +Definition at line <a class="el" href="a06726.html#l00080">80</a> of file <a class="el" href="a06726.html">visual_collision_entity.h</a>. +<p> +References <a class="el" href="a06726.html#l00150">_GroundMode</a>. +<p> +Referenced by <a class="el" href="a06727.html#l00063">NL3D::CVisualCollisionEntityUser::setGroundMode()</a>. +<p> +<div class="fragment"><pre>00080 {<a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityr1">_GroundMode</a>= groundMode;} +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntitya7" doxytag="NL3D::CVisualCollisionEntity::setSnapToRenderedTesselation" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CVisualCollisionEntity::setSnapToRenderedTesselation </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top">bool </td> + <td class="mdname1" valign="top" nowrap> <em>snapMode</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [inline]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +By default, the visual collision entity is snapped on rendered/geomorphed tesselation (true). Use this method to change this behavior. if false, the entity is snapped to the tile level tesselation according to noise etc... +<p> +Definition at line <a class="el" href="a06726.html#l00097">97</a> of file <a class="el" href="a06726.html">visual_collision_entity.h</a>. +<p> +References <a class="el" href="a06726.html#l00151">_SnapToRenderedTesselation</a>. +<p> +Referenced by <a class="el" href="a06727.html#l00093">NL3D::CVisualCollisionEntityUser::setSnapToRenderedTesselation()</a>. +<p> +<div class="fragment"><pre>00097 {<a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityr3">_SnapToRenderedTesselation</a>= snapMode;} +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntitya8" doxytag="NL3D::CVisualCollisionEntity::snapToGround" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool NL3D::CVisualCollisionEntity::snapToGround </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a03128.html">CVector</a> & </td> + <td class="mdname" nowrap> <em>pos</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a03128.html">CVector</a> & </td> + <td class="mdname" nowrap> <em>normal</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Snap the entity onto the ground. <a class="el" href="a04223.html#a574">pos.z</a> is modified so that it lies on the ground, according to rendered landscapes and meshes. pos is checked with polygons that are at least (cache dependent) at +- 10m in altitude. <dl compact><dt><b>Parameters:</b></dt><dd> + <table border="0" cellspacing="2" cellpadding="0"> + <tr><td valign=top><em>normal</em> </td><td>the ret normal of where it is snapped. NB: if return false, not modified. </td></tr> + </table> +</dl> +<dl compact><dt><b>Returns:</b></dt><dd>true if <a class="el" href="a04223.html#a574">pos.z</a> has been modified (sometimes it may not find a solution).</dd></dl> + +<p> +Definition at line <a class="el" href="a06725.html#l00211">211</a> of file <a class="el" href="a06725.html">visual_collision_entity.cpp</a>. +<p> +References <a class="el" href="a06726.html#l00151">_SnapToRenderedTesselation</a>, <a class="el" href="a06725.html#l00096">getPatchTriangleUnderUs()</a>, <a class="el" href="a06682.html#l00119">NLMISC::CVector::normalize()</a>, <a class="el" href="a05646.html#l01119">res</a>, <a class="el" href="a06725.html#l00261">snapToLandscapeCurrentTesselation()</a>, <a class="el" href="a06585.html#l00051">NLMISC::CTriangle::V0</a>, <a class="el" href="a06585.html#l00051">NLMISC::CTriangle::V1</a>, and <a class="el" href="a06585.html#l00051">NLMISC::CTriangle::V2</a>. +<p> +<div class="fragment"><pre>00212 { +00213 <span class="comment">// Get Patch Triangle Under Us</span> +00214 CVector <a class="code" href="a04223.html#a643">res</a>; +00215 CTrianglePatch *tri= <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_1">getPatchTriangleUnderUs</a>(pos, res); +00216 +00217 <span class="comment">// result. NB: if not found, dot not modify.</span> +00218 <span class="keywordflow">if</span>( tri ) +00219 { +00220 <span class="keywordflow">if</span>(<a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityr3">_SnapToRenderedTesselation</a>) +00221 { +00222 <span class="comment">// snap the position to the nearest tesselation.</span> +00223 pos= <a class="code" href="a04223.html#a643">res</a>; +00224 +00225 <span class="comment">// snap the position to the current rendered tesselation.</span> +00226 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_2">snapToLandscapeCurrentTesselation</a>(pos, *tri); +00227 } +00228 <span class="keywordflow">else</span> +00229 { +00230 <span class="comment">// just snap to the accurate tile tesselation.</span> +00231 pos= <a class="code" href="a04223.html#a643">res</a>; +00232 } +00233 +00234 +00235 <span class="comment">// compute the normal.</span> +00236 normal= (tri->V1-tri->V0)^(tri->V2-tri->V0); +00237 normal.normalize(); +00238 +00239 <span class="keywordflow">return</span> <span class="keyword">true</span>; +00240 } +00241 <span class="keywordflow">else</span> +00242 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00243 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntitya9" doxytag="NL3D::CVisualCollisionEntity::snapToGround" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool NL3D::CVisualCollisionEntity::snapToGround </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a03128.html">CVector</a> & </td> + <td class="mdname1" valign="top" nowrap> <em>pos</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Snap the entity onto the ground. <a class="el" href="a04223.html#a574">pos.z</a> is modified so that it lies on the ground, according to rendered landscapes and meshes. see <a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntitya7">setSnapToRenderedTesselation()</a> option. pos is checked with polygons that are at least (cache dependent) at +- 10m in altitude. <dl compact><dt><b>Returns:</b></dt><dd>true if <a class="el" href="a04223.html#a574">pos.z</a> has been modified (sometimes it may not find a solution).</dd></dl> + +<p> +Definition at line <a class="el" href="a06725.html#l00087">87</a> of file <a class="el" href="a06725.html">visual_collision_entity.cpp</a>. +<p> +Referenced by <a class="el" href="a06727.html#l00053">NL3D::CVisualCollisionEntityUser::snapToGround()</a>. +<p> +<div class="fragment"><pre>00088 { +00089 CVector normal; +00090 <span class="comment">// Not optimized, but doesn't matter (one cross product is negligible).</span> +00091 <span class="keywordflow">return</span> <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntitya9">snapToGround</a>(pos, normal); +00092 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntityz1174_2" doxytag="NL3D::CVisualCollisionEntity::snapToLandscapeCurrentTesselation" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CVisualCollisionEntity::snapToLandscapeCurrentTesselation </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a03128.html">CVector</a> & </td> + <td class="mdname" nowrap> <em>pos</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap>const <a class="el" href="a03620.html">CTrianglePatch</a> & </td> + <td class="mdname" nowrap> <em>tri</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +snap to current rendered tesselation. +<p> + +<p> +Definition at line <a class="el" href="a06725.html#l00261">261</a> of file <a class="el" href="a06725.html">visual_collision_entity.cpp</a>. +<p> +References <a class="el" href="a06730.html#l00130">NL3D::CVisualCollisionManager::_Landscape</a>, <a class="el" href="a06725.html#l00247">computeUvForPos()</a>, <a class="el" href="a06156.html#l00181">NL3D::CTrianglePatch::PatchId</a>, and <a class="el" href="a06673.html#l00051">NLMISC::CVector::z</a>. +<p> +Referenced by <a class="el" href="a06725.html#l00211">snapToGround()</a>. +<p> +<div class="fragment"><pre>00262 { +00263 <span class="comment">// compute UV for position.</span> +00264 <a class="code" href="a03640.html">CUV</a> uv; +00265 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_12">computeUvForPos</a>(tri, pos, uv); +00266 +00267 <span class="comment">// Ask pos to landscape.</span> +00268 CVector posLand; +00269 posLand= <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityr2">_Owner</a>->_Landscape->getTesselatedPos(tri.PatchId, uv); +00270 +00271 <span class="comment">// just keep Z.</span> +00272 pos.z= posLand.z; +00273 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntityz1174_3" doxytag="NL3D::CVisualCollisionEntity::testComputeLandscape" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> void NL3D::CVisualCollisionEntity::testComputeLandscape </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top">const <a class="el" href="a03128.html">CVector</a> & </td> + <td class="mdname1" valign="top" nowrap> <em>pos</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +test if the new position is outside the preceding setuped bbox, and then compute tiles infos around the position. +<p> + +<p> +Definition at line <a class="el" href="a06725.html#l00403">403</a> of file <a class="el" href="a06725.html">visual_collision_entity.cpp</a>. +<p> +References <a class="el" href="a06726.html#l00171">_CurrentBBoxValidity</a>, <a class="el" href="a06725.html#l00414">doComputeLandscape()</a>, <a class="el" href="a05385.html#l00091">NLMISC::CAABBox::getHalfSize()</a>, and <a class="el" href="a05384.html#l00081">NLMISC::CAABBox::include()</a>. +<p> +Referenced by <a class="el" href="a06725.html#l00096">getPatchTriangleUnderUs()</a>. +<p> +<div class="fragment"><pre>00404 { +00405 <span class="comment">// if new position is out of the bbox surounding the entity.</span> +00406 <span class="keywordflow">if</span>(<a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_5">_CurrentBBoxValidity</a>.getHalfSize()==CVector::Null || !<a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_5">_CurrentBBoxValidity</a>.include(pos)) +00407 { +00408 <span class="comment">// must recompute the data around the entity.</span> +00409 <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_0">doComputeLandscape</a>(pos); +00410 } +00411 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntityz1174_4" doxytag="NL3D::CVisualCollisionEntity::triangleIntersect" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool NL3D::CVisualCollisionEntity::triangleIntersect </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a03616.html">CTriangle</a> & </td> + <td class="mdname" nowrap> <em>tri</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap>const <a class="el" href="a03128.html">CVector</a> & </td> + <td class="mdname" nowrap> <em>pos0</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap>const <a class="el" href="a03128.html">CVector</a> & </td> + <td class="mdname" nowrap> <em>pos1</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap><a class="el" href="a03128.html">CVector</a> & </td> + <td class="mdname" nowrap> <em>hit</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Fast "2D" test of a triangle against ray P0 P1. +<p> + +<p> +Definition at line <a class="el" href="a06725.html#l00366">366</a> of file <a class="el" href="a06725.html">visual_collision_entity.cpp</a>. +<p> +References <a class="el" href="a06726.html#l00149">_CeilMode</a>, <a class="el" href="a06726.html#l00150">_GroundMode</a>, <a class="el" href="a06172.html#l00051">NLMISC::CPlane::intersect()</a>, <a class="el" href="a06170.html#l00036">NLMISC::CPlane::make()</a>, <a class="el" href="a06725.html#l00336">triangleIntersect2DCeil()</a>, <a class="el" href="a06725.html#l00299">triangleIntersect2DGround()</a>, <a class="el" href="a06585.html#l00051">NLMISC::CTriangle::V0</a>, <a class="el" href="a06585.html#l00051">NLMISC::CTriangle::V1</a>, <a class="el" href="a06585.html#l00051">NLMISC::CTriangle::V2</a>, <a class="el" href="a06673.html#l00051">NLMISC::CVector::x</a>, <a class="el" href="a06673.html#l00051">NLMISC::CVector::y</a>, and <a class="el" href="a06673.html#l00051">NLMISC::CVector::z</a>. +<p> +Referenced by <a class="el" href="a06725.html#l00096">getPatchTriangleUnderUs()</a>. +<p> +<div class="fragment"><pre>00367 { +00368 CVector &p0= tri.V0; +00369 CVector &p1= tri.V1; +00370 CVector &p2= tri.V2; +00371 +00372 <span class="keywordtype">bool</span> ok= <span class="keyword">false</span>; +00373 <span class="keywordflow">if</span>( <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityr1">_GroundMode</a> && <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_14">triangleIntersect2DGround</a>(tri, pos0) ) +00374 ok= <span class="keyword">true</span>; +00375 <span class="keywordflow">if</span>(!ok && <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityr0">_CeilMode</a> && <a class="code" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_13">triangleIntersect2DCeil</a>(tri, pos0) ) +00376 ok= <span class="keyword">true</span>; +00377 <span class="keywordflow">if</span>(!ok) +00378 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00379 +00380 +00381 <span class="comment">// Compute the possible height.</span> +00382 CVector tmp; +00383 <span class="comment">// build the plane</span> +00384 CPlane plane; +00385 plane.make (p0, p1, p2); +00386 <span class="comment">// intersect the vertical line with the plane.</span> +00387 tmp= plane.intersect(pos0, pos1); +00388 +00389 <span class="keywordtype">float</span> h= tmp.z; +00390 <span class="comment">// Test if it would fit in the wanted field.</span> +00391 <span class="keywordflow">if</span>(h>pos1.z) <span class="keywordflow">return</span> <span class="keyword">false</span>; +00392 <span class="keywordflow">if</span>(h<pos0.z) <span class="keywordflow">return</span> <span class="keyword">false</span>; +00393 +00394 <span class="comment">// OK!!</span> +00395 <span class="comment">// For cache completness, ensure that X and Y don't move, take same XY than pos0</span> +00396 hit.x= pos0.x; +00397 hit.y= pos0.y; +00398 hit.z= h; +00399 <span class="keywordflow">return</span> <span class="keyword">true</span>; +00400 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntityz1174_13" doxytag="NL3D::CVisualCollisionEntity::triangleIntersect2DCeil" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool NL3D::CVisualCollisionEntity::triangleIntersect2DCeil </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a03616.html">CTriangle</a> & </td> + <td class="mdname" nowrap> <em>tri</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap>const <a class="el" href="a03128.html">CVector</a> & </td> + <td class="mdname" nowrap> <em>pos0</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [static, private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +compute tiles infos around the position. +<p> + +<p> +Definition at line <a class="el" href="a06725.html#l00336">336</a> of file <a class="el" href="a06725.html">visual_collision_entity.cpp</a>. +<p> +References <a class="el" href="a06585.html#l00051">NLMISC::CTriangle::V0</a>, <a class="el" href="a06585.html#l00051">NLMISC::CTriangle::V1</a>, <a class="el" href="a06585.html#l00051">NLMISC::CTriangle::V2</a>, <a class="el" href="a06673.html#l00051">NLMISC::CVector::x</a>, and <a class="el" href="a06673.html#l00051">NLMISC::CVector::y</a>. +<p> +Referenced by <a class="el" href="a06725.html#l00366">triangleIntersect()</a>. +<p> +<div class="fragment"><pre>00337 { +00338 CVector &p0= tri.V0; +00339 CVector &p1= tri.V1; +00340 CVector &p2= tri.V2; +00341 +00342 <span class="comment">// Test if the face enclose the pos in X/Y plane.</span> +00343 <span class="comment">// NB: compute and using a BBox to do a rapid test is not a very good idea, since it will </span> +00344 <span class="comment">// add an overhead which is NOT negligeable compared to the following test.</span> +00345 <span class="keywordtype">float</span> a,b,c; <span class="comment">// 2D cartesian coefficients of line in plane X/Y.</span> +00346 <span class="comment">// Line p0-p1.</span> +00347 a= -(p1.y-p0.y); +00348 b= (p1.x-p0.x); +00349 c= -(p0.x*a + p0.y*b); +00350 <span class="keywordflow">if</span>( (a*pos0.x + b*pos0.y + c) > 0) <span class="keywordflow">return</span> <span class="keyword">false</span>; +00351 <span class="comment">// Line p1-p2.</span> +00352 a= -(p2.y-p1.y); +00353 b= (p2.x-p1.x); +00354 c= -(p1.x*a + p1.y*b); +00355 <span class="keywordflow">if</span>( (a*pos0.x + b*pos0.y + c) > 0) <span class="keywordflow">return</span> <span class="keyword">false</span>; +00356 <span class="comment">// Line p2-p0.</span> +00357 a= -(p0.y-p2.y); +00358 b= (p0.x-p2.x); +00359 c= -(p2.x*a + p2.y*b); +00360 <span class="keywordflow">if</span>( (a*pos0.x + b*pos0.y + c) > 0) <span class="keywordflow">return</span> <span class="keyword">false</span>; +00361 +00362 <span class="keywordflow">return</span> <span class="keyword">true</span>; +00363 } +</pre></div> </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntityz1174_14" doxytag="NL3D::CVisualCollisionEntity::triangleIntersect2DGround" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool NL3D::CVisualCollisionEntity::triangleIntersect2DGround </td> + <td class="md" valign="top">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a03616.html">CTriangle</a> & </td> + <td class="mdname" nowrap> <em>tri</em>, </td> + </tr> + <tr> + <td class="md" nowrap align="right"></td> + <td></td> + <td class="md" nowrap>const <a class="el" href="a03128.html">CVector</a> & </td> + <td class="mdname" nowrap> <em>pos0</em></td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [static, private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Fast "2D" test of a triangle against ray P0 P1. +<p> + +<p> +Definition at line <a class="el" href="a06725.html#l00299">299</a> of file <a class="el" href="a06725.html">visual_collision_entity.cpp</a>. +<p> +References <a class="el" href="a06585.html#l00051">NLMISC::CTriangle::V0</a>, <a class="el" href="a06585.html#l00051">NLMISC::CTriangle::V1</a>, <a class="el" href="a06585.html#l00051">NLMISC::CTriangle::V2</a>, <a class="el" href="a06673.html#l00051">NLMISC::CVector::x</a>, and <a class="el" href="a06673.html#l00051">NLMISC::CVector::y</a>. +<p> +Referenced by <a class="el" href="a06725.html#l00366">triangleIntersect()</a>. +<p> +<div class="fragment"><pre>00300 { +00301 CVector &p0= tri.V0; +00302 CVector &p1= tri.V1; +00303 CVector &p2= tri.V2; +00304 +00305 <span class="comment">// TestYoyo. Test for precision problems.</span> +00306 <span class="comment">/*if( testLine(p1, p0, pos0) && testLine(p2, p1, pos0) && testLine(p0, p2, pos0) )</span> +00307 <span class="comment"> {</span> +00308 <span class="comment"> nlinfo("Found Tri For Pos: %.07f, %.07f\n P0: %.07f, %.07f\n P1: %.07f, %.07f\n P2: %.07f, %.07f",</span> +00309 <span class="comment"> pos0.x, pos0.y, p0.x, p0.y, p1.x, p1.y, p2.x, p2.y);</span> +00310 <span class="comment"> }*/</span> +00311 +00312 <span class="comment">// Test if the face enclose the pos in X/Y plane.</span> +00313 <span class="comment">// NB: compute and using a BBox to do a rapid test is not a very good idea, since it will </span> +00314 <span class="comment">// add an overhead which is NOT negligeable compared to the following test.</span> +00315 <span class="keywordtype">float</span> a,b,c; <span class="comment">// 2D cartesian coefficients of line in plane X/Y.</span> +00316 <span class="comment">// Line p0-p1.</span> +00317 a= -(p1.y-p0.y); +00318 b= (p1.x-p0.x); +00319 c= -(p0.x*a + p0.y*b); +00320 <span class="keywordflow">if</span>( (a*pos0.x + b*pos0.y + c) < 0) <span class="keywordflow">return</span> <span class="keyword">false</span>; +00321 <span class="comment">// Line p1-p2.</span> +00322 a= -(p2.y-p1.y); +00323 b= (p2.x-p1.x); +00324 c= -(p1.x*a + p1.y*b); +00325 <span class="keywordflow">if</span>( (a*pos0.x + b*pos0.y + c) < 0) <span class="keywordflow">return</span> <span class="keyword">false</span>; +00326 <span class="comment">// Line p2-p0.</span> +00327 a= -(p0.y-p2.y); +00328 b= (p0.x-p2.x); +00329 c= -(p2.x*a + p2.y*b); +00330 <span class="keywordflow">if</span>( (a*pos0.x + b*pos0.y + c) < 0) <span class="keywordflow">return</span> <span class="keyword">false</span>; +00331 +00332 <span class="keywordflow">return</span> <span class="keyword">true</span>; +00333 } +</pre></div> </td> + </tr> +</table> +<hr><h2>Field Documentation</h2> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntityr0" doxytag="NL3D::CVisualCollisionEntity::_CeilMode" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool <a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityr0">NL3D::CVisualCollisionEntity::_CeilMode</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06726.html#l00149">149</a> of file <a class="el" href="a06726.html">visual_collision_entity.h</a>. +<p> +Referenced by <a class="el" href="a06725.html#l00056">CVisualCollisionEntity()</a>, <a class="el" href="a06726.html#l00090">getCeilMode()</a>, <a class="el" href="a06726.html#l00086">setCeilMode()</a>, and <a class="el" href="a06725.html#l00366">triangleIntersect()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntityz1174_5" doxytag="NL3D::CVisualCollisionEntity::_CurrentBBoxValidity" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a02156.html">CAABBox</a> <a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_5">NL3D::CVisualCollisionEntity::_CurrentBBoxValidity</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +The current BBox where we don't need to recompute the patchQuadBlocks if the entity is in. +<p> + +<p> +Definition at line <a class="el" href="a06726.html#l00171">171</a> of file <a class="el" href="a06726.html">visual_collision_entity.h</a>. +<p> +Referenced by <a class="el" href="a06725.html#l00056">CVisualCollisionEntity()</a>, <a class="el" href="a06725.html#l00414">doComputeLandscape()</a>, and <a class="el" href="a06725.html#l00403">testComputeLandscape()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntityr1" doxytag="NL3D::CVisualCollisionEntity::_GroundMode" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool <a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityr1">NL3D::CVisualCollisionEntity::_GroundMode</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06726.html#l00150">150</a> of file <a class="el" href="a06726.html">visual_collision_entity.h</a>. +<p> +Referenced by <a class="el" href="a06725.html#l00056">CVisualCollisionEntity()</a>, <a class="el" href="a06726.html#l00089">getGroundMode()</a>, <a class="el" href="a06726.html#l00080">setGroundMode()</a>, and <a class="el" href="a06725.html#l00366">triangleIntersect()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntityz1174_6" doxytag="NL3D::CVisualCollisionEntity::_LandscapeQuadGrid" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a02708.html">CLandscapeCollisionGrid</a> <a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_6">NL3D::CVisualCollisionEntity::_LandscapeQuadGrid</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +A quadgrid of chainlist of tileId (<a class="el" href="a03713.html">CVisualTileDescNode</a>), which are around the entity. +<p> + +<p> +Definition at line <a class="el" href="a06726.html#l00169">169</a> of file <a class="el" href="a06726.html">visual_collision_entity.h</a>. +<p> +Referenced by <a class="el" href="a06725.html#l00414">doComputeLandscape()</a>, <a class="el" href="a06725.html#l00096">getPatchTriangleUnderUs()</a>, and <a class="el" href="a06725.html#l00072">~CVisualCollisionEntity()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntityz1174_7" doxytag="NL3D::CVisualCollisionEntity::_LastGPTPosInput" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a03128.html">CVector</a> <a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_7">NL3D::CVisualCollisionEntity::_LastGPTPosInput</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +compute tiles infos around the position. +<p> + +<p> +Definition at line <a class="el" href="a06726.html#l00174">174</a> of file <a class="el" href="a06726.html">visual_collision_entity.h</a>. +<p> +Referenced by <a class="el" href="a06725.html#l00096">getPatchTriangleUnderUs()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntityz1174_8" doxytag="NL3D::CVisualCollisionEntity::_LastGPTPosOutput" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a03128.html">CVector</a> <a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_8">NL3D::CVisualCollisionEntity::_LastGPTPosOutput</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +compute tiles infos around the position. +<p> + +<p> +Definition at line <a class="el" href="a06726.html#l00175">175</a> of file <a class="el" href="a06726.html">visual_collision_entity.h</a>. +<p> +Referenced by <a class="el" href="a06725.html#l00096">getPatchTriangleUnderUs()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntityz1174_9" doxytag="NL3D::CVisualCollisionEntity::_LastGPTTrianglePatch" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a03620.html">CTrianglePatch</a> <a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_9">NL3D::CVisualCollisionEntity::_LastGPTTrianglePatch</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +compute tiles infos around the position. +<p> + +<p> +Definition at line <a class="el" href="a06726.html#l00176">176</a> of file <a class="el" href="a06726.html">visual_collision_entity.h</a>. +<p> +Referenced by <a class="el" href="a06725.html#l00096">getPatchTriangleUnderUs()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntityz1174_10" doxytag="NL3D::CVisualCollisionEntity::_LastGPTValid" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool <a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_10">NL3D::CVisualCollisionEntity::_LastGPTValid</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Cache for <a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_1">getPatchTriangleUnderUs()</a>. +<p> + +<p> +Definition at line <a class="el" href="a06726.html#l00173">173</a> of file <a class="el" href="a06726.html">visual_collision_entity.h</a>. +<p> +Referenced by <a class="el" href="a06725.html#l00056">CVisualCollisionEntity()</a>, and <a class="el" href="a06725.html#l00096">getPatchTriangleUnderUs()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntityr2" doxytag="NL3D::CVisualCollisionEntity::_Owner" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> <a class="el" href="a03707.html">CVisualCollisionManager</a>* <a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityr2">NL3D::CVisualCollisionEntity::_Owner</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06726.html#l00147">147</a> of file <a class="el" href="a06726.html">visual_collision_entity.h</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntityz1174_11" doxytag="NL3D::CVisualCollisionEntity::_PatchQuadBlocks" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> std::vector<<a class="el" href="a03068.html">CPatchQuadBlock</a>*> <a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_11">NL3D::CVisualCollisionEntity::_PatchQuadBlocks</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Array of quadBlock which are around the entity. NB: plain vector, because not so big (ptrs). NB: reserve to a big size (64), so reallocation rarely occurs. NB: this array is sorted in ascending order (comparison of <a class="el" href="a03059.html">CPatchBlockIdent</a>). +<p> +Definition at line <a class="el" href="a06726.html#l00167">167</a> of file <a class="el" href="a06726.html">visual_collision_entity.h</a>. +<p> +Referenced by <a class="el" href="a06725.html#l00056">CVisualCollisionEntity()</a>, <a class="el" href="a06725.html#l00612">displayDebugGrid()</a>, <a class="el" href="a06725.html#l00414">doComputeLandscape()</a>, <a class="el" href="a06725.html#l00096">getPatchTriangleUnderUs()</a>, and <a class="el" href="a06725.html#l00072">~CVisualCollisionEntity()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntityr3" doxytag="NL3D::CVisualCollisionEntity::_SnapToRenderedTesselation" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> bool <a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityr3">NL3D::CVisualCollisionEntity::_SnapToRenderedTesselation</a><code> [private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> + +<p> +Definition at line <a class="el" href="a06726.html#l00151">151</a> of file <a class="el" href="a06726.html">visual_collision_entity.h</a>. +<p> +Referenced by <a class="el" href="a06725.html#l00056">CVisualCollisionEntity()</a>, <a class="el" href="a06726.html#l00098">getSnapToRenderedTesselation()</a>, <a class="el" href="a06726.html#l00097">setSnapToRenderedTesselation()</a>, and <a class="el" href="a06725.html#l00211">snapToGround()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntityz1174_15" doxytag="NL3D::CVisualCollisionEntity::_StartPatchQuadBlockSize" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> const <a class="el" href="a04558.html#a11">uint32</a> <a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_15">NL3D::CVisualCollisionEntity::_StartPatchQuadBlockSize</a> = 64<code> [static, private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Default capacity of _PatchQuadBlocks. +<p> + +<p> +Definition at line <a class="el" href="a06725.html#l00050">50</a> of file <a class="el" href="a06725.html">visual_collision_entity.cpp</a>. +<p> +Referenced by <a class="el" href="a06725.html#l00056">CVisualCollisionEntity()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntityz1174_16" doxytag="NL3D::CVisualCollisionEntity::_TmpBlockIds" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> vector< <a class="el" href="a03059.html">CPatchBlockIdent</a> > <a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_16">NL3D::CVisualCollisionEntity::_TmpBlockIds</a><code> [static, private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +This is the temp array of BlockIds filled by landscape search. +<p> + +<p> +Definition at line <a class="el" href="a06725.html#l00051">51</a> of file <a class="el" href="a06725.html">visual_collision_entity.cpp</a>. +<p> +Referenced by <a class="el" href="a06725.html#l00414">doComputeLandscape()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntityz1174_17" doxytag="NL3D::CVisualCollisionEntity::_TmpPatchQuadBlocks" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> vector< <a class="el" href="a03068.html">CPatchQuadBlock</a> * > <a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1174_17">NL3D::CVisualCollisionEntity::_TmpPatchQuadBlocks</a><code> [static, private]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +This is the temp array of PatchBlocks ptr. +<p> + +<p> +Definition at line <a class="el" href="a06725.html#l00052">52</a> of file <a class="el" href="a06725.html">visual_collision_entity.cpp</a>. +<p> +Referenced by <a class="el" href="a06725.html#l00414">doComputeLandscape()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntityz1168_0" doxytag="NL3D::CVisualCollisionEntity::BBoxRadius" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> const float <a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1168_0">NL3D::CVisualCollisionEntity::BBoxRadius</a> = 10<code> [static]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +This is the radius of the bbox around the entity where we have correct collisions: 10m. +<p> + +<p> +Definition at line <a class="el" href="a06725.html#l00048">48</a> of file <a class="el" href="a06725.html">visual_collision_entity.cpp</a>. +<p> +Referenced by <a class="el" href="a06725.html#l00414">doComputeLandscape()</a>. </td> + </tr> +</table> +<a class="anchor" name="NL3D_1_1CVisualCollisionEntityz1168_1" doxytag="NL3D::CVisualCollisionEntity::BBoxRadiusZ" ></a><p> +<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> + <tr> + <td class="mdRow"> + <table cellpadding="0" cellspacing="0" border="0"> + <tr> + <td class="md" nowrap valign="top"> const float <a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntityz1168_1">NL3D::CVisualCollisionEntity::BBoxRadiusZ</a> = 20<code> [static]</code> + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </td> + <td> + +<p> +Same as BBoxRadius, but for z value. This later should be greater because of <a class="el" href="a05380.html">NLPACS</a> surface quadtree imprecision. 20m NB: Because of caching, if the <a class="el" href="a04223.html#a574">pos.z</a> passed to <a class="el" href="a03705.html#NL3D_1_1CVisualCollisionEntitya9">snapToGround()</a> is outside of the currentBBox with BBoxRadiuZ/2 (=> 10m), then the bbox is recomputed. Hence, this actually means that a pos is checked with patchs that are at least at +- 10m in altitude. +<p> +Definition at line <a class="el" href="a06725.html#l00049">49</a> of file <a class="el" href="a06725.html">visual_collision_entity.cpp</a>. +<p> +Referenced by <a class="el" href="a06725.html#l00414">doComputeLandscape()</a>. </td> + </tr> +</table> +<hr>The documentation for this class was generated from the following files:<ul> +<li><a class="el" href="a06726.html">visual_collision_entity.h</a><li><a class="el" href="a06725.html">visual_collision_entity.cpp</a></ul> +<hr size="1"><address style="align: right;"><small>Generated on Tue Mar 16 08:26:34 2004 for NeL by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border=0 > +</a>1.3.6 </small></address> +</body> +</html> |