aboutsummaryrefslogtreecommitdiff
path: root/docs/doxygen/nel/landscape__vegetable__block_8cpp-source.html
diff options
context:
space:
mode:
authorneodarz <neodarz@neodarz.net>2018-08-11 20:21:34 +0200
committerneodarz <neodarz@neodarz.net>2018-08-11 20:21:34 +0200
commit0ea5fc66924303d1bf73ba283a383e2aadee02f2 (patch)
tree2568e71a7ccc44ec23b8bb3f0ff97fb6bf2ed709 /docs/doxygen/nel/landscape__vegetable__block_8cpp-source.html
downloadnevrax-website-self-hostable-0ea5fc66924303d1bf73ba283a383e2aadee02f2.tar.xz
nevrax-website-self-hostable-0ea5fc66924303d1bf73ba283a383e2aadee02f2.zip
Initial commit
Diffstat (limited to 'docs/doxygen/nel/landscape__vegetable__block_8cpp-source.html')
-rw-r--r--docs/doxygen/nel/landscape__vegetable__block_8cpp-source.html416
1 files changed, 416 insertions, 0 deletions
diff --git a/docs/doxygen/nel/landscape__vegetable__block_8cpp-source.html b/docs/doxygen/nel/landscape__vegetable__block_8cpp-source.html
new file mode 100644
index 00000000..fedbc93f
--- /dev/null
+++ b/docs/doxygen/nel/landscape__vegetable__block_8cpp-source.html
@@ -0,0 +1,416 @@
+<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+ <TITLE>nevrax.org : docs</TITLE>
+ <LINK REL=stylesheet TYPE="text/css" HREF="http://www.nevrax.org/inc/css/nevrax.css">
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+</HEAD>
+<BODY MARGINHEIGHT="0" MARGINWIDTH="0">
+
+<!-- uplinks -->
+<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0>
+ <TR>
+ <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD WIDTH=140 BGCOLOR=#dddddd><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD><IMG width=6 height=14 SRC="http://www.nevrax.org/inc/img/reddots.gif" ALT="#" VSPACE=2 HSPACE=2 BORDER=0 ></TD><TD VALIGN=middle>&nbsp;<A CLASS=uplinks HREF=http://www.nevrax.org><b>Home</B></FONT></A>&nbsp;&nbsp;&nbsp;</TD>
+ <TD><IMG width=6 height=14 SRC="http://www.nevrax.org/inc/img/reddots.gif" ALT="#" VSPACE=2 HSPACE=2 BORDER=0 ></TD><TD VALIGN=middle>&nbsp;<A CLASS=uplinks HREF=http://www.nevrax.com><b>nevrax.com</B></FONT></A>&nbsp;&nbsp;&nbsp;</TD>
+ </TR>
+</TABLE>
+
+<!-- banner Nevrax -->
+<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 WIDTH=100%>
+ <TR><TD BGCOLOR="#000000" BACKGROUND="http://www.nevrax.org/inc/img/black_banner.jpg"><A HREF="http://www.nevrax.org"><IMG SRC="http://www.nevrax.org/inc/img/nevrax.gif" WIDTH="170" HEIGHT="45" BORDER=0 ALT="Nevrax" ></A></TD></TR>
+</TABLE>
+
+<!-- main table -->
+<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 height=100%>
+ <TR>
+ <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="10" BORDER=0 ALT=""></TD>
+ <TD WIDTH=140 BGCOLOR=#dddddd VALIGN=TOP ALIGN=middle><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="10" BORDER=0 ALT="">
+
+ <!------ Begin Box ------>
+ <TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 BGCOLOR=black><TR><TD><TABLE border=0 cellspacing=2 cellpadding=0 width=120><tr><TD ALIGN=middle bgcolor=black>
+ <FONT COLOR=white FACE="sans-serif"><B>Nevrax.org</B></FONT></TD></TR><tr><td colspan=2 bgcolor=#FFFFFF>
+ <TABLE cellspacing=0 cellpadding=1 border=0>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/news/" TITLE="Rubrique news"><img width=13 height=15 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-news.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/news/" TITLE="News">News</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/mail/" TITLE="Rubrique mail"><img width=15 height=11 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-mail.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/mail/" TITLE="Mailing list archive">Mailing-list</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/docs/" TITLE="Rubrique docs"><img width=14 height=16 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-docs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/docs/" TITLE="Documentation">Documentation</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/cvs/" TITLE="Rubrique cvs"><img width=13 height=17 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-cvs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/cvs/" TITLE="CVS Web">CVS</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/bugs/" TITLE="Rubrique bugs"><img width=20 height=16 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-bugs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/bugs/" TITLE="Bugtracking">Bugs</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/GPL.php3" TITLE="Rubrique license"><img width=18 height=12 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-gpl.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/GPL.php3" TITLE="License">License</a></td></tr>
+ </TABLE>
+ </TD></TR></TABLE></TD></TR></TABLE>
+ <!------ End Box ------>
+
+ </TD>
+ <TD WIDTH=15><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD ALIGN=left valign=top><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="10" BORDER=0 ALT="">
+
+<!-- title -->
+<TABLE background="http://www.nevrax.org/inc/img/redline.gif" CELLSPACING=0 CELLPADDING=0 BORDER=0 width=100%><tr><td>
+<A HREF="http://www.nevrax.org/docs/"><img src="http://www.nevrax.org/inc/img/t_docs.gif" ALT="Docs" HEIGHT=20 BORDER=0></A>
+</td><td><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="1" HEIGHT="1" BORDER=0 ALT="">
+</td></tr></table>
+&nbsp;
+
+<!-- block -->
+<TABLE bgcolor="#dddddd" CELLSPACING=0 CELLPADDING=0 BORDER=0 width=100%><tr><td width=1% valign=middle><img width=6 height=14 hspace=2 vspace=2 src="http://www.nevrax.org/inc/img/reddots.gif"></TD>
+ <TD><B>Documentation</B></TD>
+ <TD ALIGN=RIGHT>&nbsp;</td>
+</tr></table>
+<!-- Generated by Doxygen 1.2.14 -->
+<center>
+<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="namespaces.html">Namespace List</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="classes.html">Alphabetical List</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="namespacemembers.html">Namespace Members</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; <a class="qindex" href="pages.html">Related Pages</a> &nbsp; <a class="qindexRef" doxygen="_cgi:http://www.nevrax.org/cgi-bin/nel-search.cgi" href="http://www.nevrax.org/cgi-bin/nel-search.cgi">Search</a> &nbsp; </center>
+<hr><h1>landscape_vegetable_block.cpp</h1><a href="landscape__vegetable__block_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001
+00007 <font class="comment">/* Copyright, 2001 Nevrax Ltd.</font>
+00008 <font class="comment"> *</font>
+00009 <font class="comment"> * This file is part of NEVRAX NEL.</font>
+00010 <font class="comment"> * NEVRAX NEL is free software; you can redistribute it and/or modify</font>
+00011 <font class="comment"> * it under the terms of the GNU General Public License as published by</font>
+00012 <font class="comment"> * the Free Software Foundation; either version 2, or (at your option)</font>
+00013 <font class="comment"> * any later version.</font>
+00014 <font class="comment"></font>
+00015 <font class="comment"> * NEVRAX NEL is distributed in the hope that it will be useful, but</font>
+00016 <font class="comment"> * WITHOUT ANY WARRANTY; without even the implied warranty of</font>
+00017 <font class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</font>
+00018 <font class="comment"> * General Public License for more details.</font>
+00019 <font class="comment"></font>
+00020 <font class="comment"> * You should have received a copy of the GNU General Public License</font>
+00021 <font class="comment"> * along with NEVRAX NEL; see the file COPYING. If not, write to the</font>
+00022 <font class="comment"> * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,</font>
+00023 <font class="comment"> * MA 02111-1307, USA.</font>
+00024 <font class="comment"> */</font>
+00025
+00026 <font class="preprocessor">#include "<a class="code" href="std3d_8h.html">std3d.h</a>"</font>
+00027
+00028 <font class="preprocessor">#include "<a class="code" href="landscape__vegetable__block_8h.html">3d/landscape_vegetable_block.h</a>"</font>
+00029 <font class="preprocessor">#include "<a class="code" href="vegetable__manager_8h.html">3d/vegetable_manager.h</a>"</font>
+00030 <font class="preprocessor">#include "<a class="code" href="vegetable__clip__block_8h.html">3d/vegetable_clip_block.h</a>"</font>
+00031 <font class="preprocessor">#include "<a class="code" href="vegetable__instance__group_8h.html">3d/vegetable_instance_group.h</a>"</font>
+00032 <font class="preprocessor">#include "<a class="code" href="patch_8h.html">3d/patch.h</a>"</font>
+00033 <font class="preprocessor">#include "<a class="code" href="bezier__patch_8h.html">3d/bezier_patch.h</a>"</font>
+00034
+00035
+00036 <font class="keyword">using</font> <font class="keyword">namespace </font>std;
+00037 <font class="keyword">using</font> <font class="keyword">namespace </font>NLMISC;
+00038
+00039
+00040 <font class="keyword">namespace </font>NL3D
+00041 {
+00042
+00043
+00044 <font class="comment">// ***************************************************************************</font>
+00045 <font class="comment">/*</font>
+00046 <font class="comment"> Distances type squared.</font>
+00047 <font class="comment">*/</font>
+<a name="l00048"></a><a class="code" href="classNL3D_1_1CLVBSqrDistLUT.html">00048</a> <font class="keyword">class </font>CLVBSqrDistLUT
+00049 {
+00050 <font class="keyword">public</font>:
+00051 <font class="keyword">static</font> <font class="keywordtype">float</font> <a class="code" href="classNL3D_1_1CLVBSqrDistLUT.html#p0">Array</a>[<a class="code" href="vegetable__def_8h.html#a7">NL3D_VEGETABLE_BLOCK_NUMDIST</a>+1];
+00052
+<a name="l00053"></a><a class="code" href="classNL3D_1_1CLVBSqrDistLUT.html#a0">00053</a> <a class="code" href="classNL3D_1_1CLVBSqrDistLUT.html#a0">CLVBSqrDistLUT</a>()
+00054 {
+00055 <font class="comment">// 0, 10, 20, 30, 40, 50</font>
+00056 <font class="keywordflow">for</font>(uint i=0;i&lt;<a class="code" href="vegetable__def_8h.html#a7">NL3D_VEGETABLE_BLOCK_NUMDIST</a>+1;i++)
+00057 {
+00058 <a class="code" href="classNL3D_1_1CLVBSqrDistLUT.html#p0">Array</a>[i]= i*<a class="code" href="vegetable__def_8h.html#a8">NL3D_VEGETABLE_BLOCK_ELTDIST</a>;
+00059 <a class="code" href="classNL3D_1_1CLVBSqrDistLUT.html#p0">Array</a>[i]= <a class="code" href="namespaceNLMISC.html#a214">sqr</a>(<a class="code" href="classNL3D_1_1CLVBSqrDistLUT.html#p0">Array</a>[i]);
+00060 }
+00061 }
+00062
+00063 };
+00064
+00065
+00066 CLVBSqrDistLUT <a class="code" href="namespaceNL3D.html#a85">NL3D_InitSqrDistLUT</a>;
+<a name="l00067"></a><a class="code" href="classNL3D_1_1CLVBSqrDistLUT.html#p0">00067</a> <font class="keywordtype">float</font> CLVBSqrDistLUT::Array[<a class="code" href="vegetable__def_8h.html#a7">NL3D_VEGETABLE_BLOCK_NUMDIST</a>+1];
+00068
+00069
+00070 <font class="comment">// ***************************************************************************</font>
+<a name="l00071"></a><a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#a0">00071</a> CLandscapeVegetableBlock::CLandscapeVegetableBlock()
+00072 {
+00073 <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o1">_VegetableClipBlock</a>= NULL;
+00074 <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o5">_CurDistType</a>= <a class="code" href="vegetable__def_8h.html#a7">NL3D_VEGETABLE_BLOCK_NUMDIST</a>;
+00075
+00076 <font class="keywordflow">for</font>(uint j=0;j&lt;<a class="code" href="tess__block_8h.html#a1">NL3D_TESSBLOCK_TILESIZE</a>;j++)
+00077 {
+00078 <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o6">_VegetableSortBlock</a>[j]= NULL;
+00079 <font class="keywordflow">for</font>(uint i=0;i&lt;<a class="code" href="vegetable__def_8h.html#a7">NL3D_VEGETABLE_BLOCK_NUMDIST</a>;i++)
+00080 {
+00081 <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o7">_VegetableIG</a>[j][i]= NULL;
+00082 }
+00083 }
+00084 }
+00085
+00086
+00087
+00088 <font class="comment">// ***************************************************************************</font>
+<a name="l00089"></a><a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#a1">00089</a> <font class="keywordtype">void</font> CLandscapeVegetableBlock::init(<font class="keyword">const</font> CVector &amp;center, CVegetableManager *vegetManager,
+00090 CVegetableClipBlock *vegetableClipBlock, CPatch *patch, uint ts, uint tt, CTessList&lt;CLandscapeVegetableBlock&gt; &amp;vblist)
+00091 {
+00092 <a class="code" href="debug_8h.html#a6">nlassert</a>(patch);
+00093 <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o0">_Center</a>= center;
+00094 <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o1">_VegetableClipBlock</a>= vegetableClipBlock;
+00095 <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o2">_Patch</a>= patch;
+00096 <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o3">_Ts</a>= ts;
+00097 <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o4">_Tt</a>= tt;
+00098
+00099 <font class="comment">// Create the Vegetable SortBlocks</font>
+00100 sint tms,tmt;
+00101 <font class="comment">// for all tiles</font>
+00102 <a class="code" href="debug_8h.html#a6">nlassert</a>(<a class="code" href="tess__block_8h.html#a1">NL3D_TESSBLOCK_TILESIZE</a>==4);
+00103 <font class="keywordflow">for</font>(tmt= <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o4">_Tt</a>; tmt&lt;<a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o4">_Tt</a>+2; tmt++)
+00104 {
+00105 <font class="keywordflow">for</font>(tms= <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o3">_Ts</a>; tms&lt;<a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o3">_Ts</a>+2; tms++)
+00106 {
+00107 <font class="comment">// compute approximate center of the tile.</font>
+00108 <font class="keywordtype">float</font> <a class="code" href="driver__opengl__extension__def_8h.html#a383">s</a>= (tms + 0.5f) / <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o2">_Patch</a>-&gt;getOrderS();
+00109 <font class="keywordtype">float</font> <a class="code" href="driver__opengl__extension__def_8h.html#a384">t</a>= (tmt + 0.5f) / <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o2">_Patch</a>-&gt;getOrderT();
+00110 CBezierPatch *bpatch= <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o2">_Patch</a>-&gt;unpackIntoCache();
+00111 CVector center= bpatch-&gt;eval(<a class="code" href="driver__opengl__extension__def_8h.html#a383">s</a>, <a class="code" href="driver__opengl__extension__def_8h.html#a384">t</a>);
+00112
+00113 <font class="comment">// create the sortBlock. NB: very approximate SortBlock radius....</font>
+00114 <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o6">_VegetableSortBlock</a>[(tmt-<a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o4">_Tt</a>)*2 + (tms-<a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o3">_Ts</a>)]= vegetManager-&gt;createSortBlock(<a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o1">_VegetableClipBlock</a>, center, <a class="code" href="landscape__def_8h.html#a12">NL3D_PATCH_TILE_RADIUS</a>);
+00115 }
+00116 }
+00117
+00118 <font class="comment">// append to list.</font>
+00119 vblist.append(<font class="keyword">this</font>);
+00120 }
+00121
+00122
+00123 <font class="comment">// ***************************************************************************</font>
+<a name="l00124"></a><a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#a2">00124</a> <font class="keywordtype">void</font> CLandscapeVegetableBlock::release(CVegetableManager *vegeManager, CTessList&lt;CLandscapeVegetableBlock&gt; &amp;vblist)
+00125 {
+00126 <font class="comment">// release all Igs, and all Sbs.</font>
+00127 <font class="keywordflow">for</font>(uint j=0;j&lt;<a class="code" href="tess__block_8h.html#a1">NL3D_TESSBLOCK_TILESIZE</a>;j++)
+00128 {
+00129 <font class="comment">// release IGs first.</font>
+00130 <font class="keywordflow">for</font>(uint i=0;i&lt;<a class="code" href="vegetable__def_8h.html#a7">NL3D_VEGETABLE_BLOCK_NUMDIST</a>;i++)
+00131 {
+00132 <font class="keywordflow">if</font>(<a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o7">_VegetableIG</a>[j][i])
+00133 {
+00134 vegeManager-&gt;deleteIg(<a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o7">_VegetableIG</a>[j][i]);
+00135 <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o7">_VegetableIG</a>[j][i]= NULL;
+00136 }
+00137 }
+00138
+00139 <font class="comment">// release SB</font>
+00140 <font class="keywordflow">if</font>(<a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o6">_VegetableSortBlock</a>[j])
+00141 {
+00142 vegeManager-&gt;deleteSortBlock(<a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o6">_VegetableSortBlock</a>[j]);
+00143 <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o6">_VegetableSortBlock</a>[j]= NULL;
+00144 }
+00145 }
+00146
+00147 <font class="comment">// reset state.</font>
+00148 <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o5">_CurDistType</a>= <a class="code" href="vegetable__def_8h.html#a7">NL3D_VEGETABLE_BLOCK_NUMDIST</a>;
+00149
+00150 <font class="comment">// remove from list.</font>
+00151 vblist.remove(<font class="keyword">this</font>);
+00152 }
+00153
+00154 <font class="comment">// ***************************************************************************</font>
+<a name="l00155"></a><a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#a3">00155</a> <font class="keywordtype">void</font> CLandscapeVegetableBlock::update(<font class="keyword">const</font> CVector &amp;viewCenter, CVegetableManager *vegeManager)
+00156 {
+00157 <font class="keywordtype">float</font> sqrDist= (viewCenter-<a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o0">_Center</a>).sqrnorm();
+00158
+00159 <font class="comment">// compute new distance type. Incremental mode.</font>
+00160 uint newDistType= <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o5">_CurDistType</a>;
+00161 <font class="keywordflow">while</font>(sqrDist&lt;CLVBSqrDistLUT::Array[newDistType])
+00162 {
+00163 newDistType--;
+00164 }
+00165 <font class="keywordflow">while</font>(newDistType&lt;NL3D_VEGETABLE_BLOCK_NUMDIST &amp;&amp; sqrDist&gt;CLVBSqrDistLUT::Array[newDistType+1])
+00166 {
+00167 newDistType++;
+00168 }
+00169 <font class="comment">/*</font>
+00170 <font class="comment"> NB: to test but may be better than </font>
+00171 <font class="comment"> newDistType= floor()(delta.norm() / NL3D_VEGETABLE_BLOCK_ELTDIST);</font>
+00172 <font class="comment"> */</font>
+00173
+00174
+00175 <font class="comment">// Change of distance type??</font>
+00176 <font class="keywordflow">if</font>(newDistType!=<a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o5">_CurDistType</a>)
+00177 {
+00178 <font class="comment">// Erase or create IGs.</font>
+00179 <font class="keywordflow">if</font>(newDistType&gt;<a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o5">_CurDistType</a>)
+00180 {
+00181 <font class="comment">// For all tiles</font>
+00182 <font class="keywordflow">for</font>(uint j=0;j&lt;<a class="code" href="tess__block_8h.html#a1">NL3D_TESSBLOCK_TILESIZE</a>;j++)
+00183 {
+00184 <font class="comment">// Erase no more needed Igs.</font>
+00185 <font class="keywordflow">for</font>(uint i=<a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o5">_CurDistType</a>; i&lt;newDistType; i++)
+00186 {
+00187 <font class="keywordflow">if</font>(<a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o7">_VegetableIG</a>[j][i])
+00188 {
+00189 vegeManager-&gt;deleteIg(<a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o7">_VegetableIG</a>[j][i]);
+00190 <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o7">_VegetableIG</a>[j][i]= NULL;
+00191 }
+00192 }
+00193
+00194 <font class="comment">// update the sort block for this tile</font>
+00195 <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o6">_VegetableSortBlock</a>[j]-&gt;updateSortBlock(*vegeManager);
+00196 }
+00197 }
+00198 <font class="keywordflow">else</font>
+00199 {
+00200 <font class="comment">// Create a context for creation.</font>
+00201 CLandscapeVegetableBlockCreateContext ctx;
+00202 ctx.init(<a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o2">_Patch</a>, <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o3">_Ts</a>, <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o4">_Tt</a>);
+00203
+00204 <font class="comment">// create new Igs, for all tiles</font>
+00205 <font class="keywordflow">for</font>(uint i=newDistType; i&lt;<a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o5">_CurDistType</a>; i++)
+00206 {
+00207 <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#c0">createVegetableIGForDistType</a>(i, vegeManager, ctx);
+00208 }
+00209
+00210 <font class="comment">// For all tiles</font>
+00211 <font class="keywordflow">for</font>(uint j=0;j&lt;<a class="code" href="tess__block_8h.html#a1">NL3D_TESSBLOCK_TILESIZE</a>;j++)
+00212 {
+00213 <font class="comment">// update the sort block for this tile</font>
+00214 <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o6">_VegetableSortBlock</a>[j]-&gt;updateSortBlock(*vegeManager);
+00215 }
+00216 }
+00217
+00218 <font class="comment">// copy new dist type.</font>
+00219 <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o5">_CurDistType</a>= newDistType;
+00220 }
+00221
+00222
+00223 }
+00224
+00225
+00226 <font class="comment">// ***************************************************************************</font>
+<a name="l00227"></a><a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#c0">00227</a> <font class="keywordtype">void</font> CLandscapeVegetableBlock::createVegetableIGForDistType(uint i, CVegetableManager *vegeManager,
+00228 CLandscapeVegetableBlockCreateContext &amp;vbCreateCtx)
+00229 {
+00230 <font class="comment">// check</font>
+00231 <a class="code" href="debug_8h.html#a6">nlassert</a>(<a class="code" href="tess__block_8h.html#a1">NL3D_TESSBLOCK_TILESIZE</a>==4);
+00232 <a class="code" href="debug_8h.html#a6">nlassert</a>(<a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o7">_VegetableIG</a>[0][i]==NULL);
+00233 <a class="code" href="debug_8h.html#a6">nlassert</a>(<a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o7">_VegetableIG</a>[1][i]==NULL);
+00234 <a class="code" href="debug_8h.html#a6">nlassert</a>(<a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o7">_VegetableIG</a>[2][i]==NULL);
+00235 <a class="code" href="debug_8h.html#a6">nlassert</a>(<a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o7">_VegetableIG</a>[3][i]==NULL);
+00236
+00237 <font class="comment">// Create vegetables instances per tile_material.</font>
+00238 sint tms,tmt;
+00239 <font class="comment">// for all tiles</font>
+00240 <a class="code" href="debug_8h.html#a6">nlassert</a>(<a class="code" href="tess__block_8h.html#a1">NL3D_TESSBLOCK_TILESIZE</a>==4);
+00241 <font class="keywordflow">for</font>(tmt= <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o4">_Tt</a>; tmt&lt;<a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o4">_Tt</a>+2; tmt++)
+00242 {
+00243 <font class="keywordflow">for</font>(tms= <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o3">_Ts</a>; tms&lt;<a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o3">_Ts</a>+2; tms++)
+00244 {
+00245 uint tileId= tms-<a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o3">_Ts</a> + (tmt-<a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o4">_Tt</a>)*2;
+00246
+00247 <font class="comment">// create the instance group in the good sortBlock</font>
+00248 CVegetableInstanceGroup *vegetIg= vegeManager-&gt;createIg(<a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o6">_VegetableSortBlock</a>[tileId]);
+00249 <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o7">_VegetableIG</a>[tileId][i]= vegetIg;
+00250
+00251 <font class="comment">// generate </font>
+00252 <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o2">_Patch</a>-&gt;generateTileVegetable(vegetIg, i, tms, tmt, vbCreateCtx);
+00253
+00254 <font class="comment">// If the ig is empty, delete him. This optimize rendering because no unusefull ig are </font>
+00255 <font class="comment">// tested for rendering. This speed up some 1/10 of ms...</font>
+00256 <font class="keywordflow">if</font>(vegetIg-&gt;isEmpty())
+00257 {
+00258 vegeManager-&gt;deleteIg(vegetIg);
+00259 <a class="code" href="classNL3D_1_1CLandscapeVegetableBlock.html#o7">_VegetableIG</a>[tileId][i]= NULL;
+00260 }
+00261
+00262 <font class="comment">// NB: vegtable SortBlock is updated in CLandscapeVegetableBlock::update() after</font>
+00263 }
+00264 }
+00265
+00266 }
+00267
+00268
+00269 <font class="comment">// ***************************************************************************</font>
+00270 <font class="comment">// ***************************************************************************</font>
+00271 <font class="comment">// CLandscapeVegetableIGCreateContext</font>
+00272 <font class="comment">// ***************************************************************************</font>
+00273 <font class="comment">// ***************************************************************************</font>
+00274
+00275
+00276 <font class="comment">// ***************************************************************************</font>
+<a name="l00277"></a><a class="code" href="classNL3D_1_1CLandscapeVegetableBlockCreateContext.html#a0">00277</a> CLandscapeVegetableBlockCreateContext::CLandscapeVegetableBlockCreateContext()
+00278 {
+00279 <a class="code" href="classNL3D_1_1CLandscapeVegetableBlockCreateContext.html#o1">_Patch</a>= NULL;
+00280 }
+00281
+00282
+00283 <font class="comment">// ***************************************************************************</font>
+<a name="l00284"></a><a class="code" href="classNL3D_1_1CLandscapeVegetableBlockCreateContext.html#a1">00284</a> <font class="keywordtype">void</font> CLandscapeVegetableBlockCreateContext::init(CPatch *patch, uint ts, uint tt)
+00285 {
+00286 <a class="code" href="debug_8h.html#a6">nlassert</a>(patch);
+00287 <a class="code" href="classNL3D_1_1CLandscapeVegetableBlockCreateContext.html#o0">_Empty</a>= <font class="keyword">true</font>;
+00288 <a class="code" href="classNL3D_1_1CLandscapeVegetableBlockCreateContext.html#o1">_Patch</a>= patch;
+00289 <a class="code" href="classNL3D_1_1CLandscapeVegetableBlockCreateContext.html#o2">_Ts</a>= ts;
+00290 <a class="code" href="classNL3D_1_1CLandscapeVegetableBlockCreateContext.html#o3">_Tt</a>= tt;
+00291 }
+00292
+00293
+00294 <font class="comment">// ***************************************************************************</font>
+<a name="l00295"></a><a class="code" href="classNL3D_1_1CLandscapeVegetableBlockCreateContext.html#a2">00295</a> <font class="keywordtype">void</font> CLandscapeVegetableBlockCreateContext::eval(uint ts, uint tt, <font class="keywordtype">float</font> <a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>, <font class="keywordtype">float</font> <a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>, CVector &amp;pos)
+00296 {
+00297 <a class="code" href="debug_8h.html#a6">nlassert</a>(<a class="code" href="tess__block_8h.html#a1">NL3D_TESSBLOCK_TILESIZE</a>==4);
+00298
+00299 <font class="comment">// If never created, do it now</font>
+00300 <font class="comment">// ==================</font>
+00301 <font class="keywordflow">if</font>(_Empty)
+00302 {
+00303 <font class="comment">// Eval Position and normals for the 9 vertices (around the 2x2 tiles)</font>
+00304 <font class="keywordflow">for</font>(uint j=0; j&lt;3;j++)
+00305 {
+00306 <font class="keywordtype">float</font> <a class="code" href="driver__opengl__extension__def_8h.html#a384">t</a>= (float)(<a class="code" href="classNL3D_1_1CLandscapeVegetableBlockCreateContext.html#o3">_Tt</a>+j)/<a class="code" href="classNL3D_1_1CLandscapeVegetableBlockCreateContext.html#o1">_Patch</a>-&gt;getOrderT();
+00307 <font class="keywordflow">for</font>(uint i=0; i&lt;3;i++)
+00308 {
+00309 <font class="keywordtype">float</font> <a class="code" href="driver__opengl__extension__def_8h.html#a383">s</a>= (float)(<a class="code" href="classNL3D_1_1CLandscapeVegetableBlockCreateContext.html#o2">_Ts</a>+i)/<a class="code" href="classNL3D_1_1CLandscapeVegetableBlockCreateContext.html#o1">_Patch</a>-&gt;getOrderS();
+00310 <font class="comment">// eval position.</font>
+00311 <font class="comment">// use computeVertex() and not bpatch-&gt;eval() because vegetables must follow the </font>
+00312 <font class="comment">// noise (at least at tile precision...). It is slower but necessary.</font>
+00313 <a class="code" href="classNL3D_1_1CLandscapeVegetableBlockCreateContext.html#o4">_Pos</a>[j*3+i]= <a class="code" href="classNL3D_1_1CLandscapeVegetableBlockCreateContext.html#o1">_Patch</a>-&gt;computeVertex(<a class="code" href="driver__opengl__extension__def_8h.html#a383">s</a>, <a class="code" href="driver__opengl__extension__def_8h.html#a384">t</a>);
+00314 }
+00315 }
+00316
+00317 <font class="comment">// Ok, it's done</font>
+00318 <a class="code" href="classNL3D_1_1CLandscapeVegetableBlockCreateContext.html#o0">_Empty</a>= <font class="keyword">false</font>;
+00319 }
+00320
+00321
+00322 <font class="comment">// Eval, with simple bilinear</font>
+00323 <font class="comment">// ==================</font>
+00324 <a class="code" href="debug_8h.html#a6">nlassert</a>(ts==<a class="code" href="classNL3D_1_1CLandscapeVegetableBlockCreateContext.html#o2">_Ts</a> || ts==<a class="code" href="classNL3D_1_1CLandscapeVegetableBlockCreateContext.html#o2">_Ts</a>+1);
+00325 <a class="code" href="debug_8h.html#a6">nlassert</a>(tt==<a class="code" href="classNL3D_1_1CLandscapeVegetableBlockCreateContext.html#o3">_Tt</a> || tt==<a class="code" href="classNL3D_1_1CLandscapeVegetableBlockCreateContext.html#o3">_Tt</a>+1);
+00326 uint ds= ts-<a class="code" href="classNL3D_1_1CLandscapeVegetableBlockCreateContext.html#o2">_Ts</a>;
+00327 uint dt= tt-<a class="code" href="classNL3D_1_1CLandscapeVegetableBlockCreateContext.html#o3">_Tt</a>;
+00328 <font class="comment">// Indices.</font>
+00329 uint v00= dt*3 + ds;
+00330 uint v10= v00 + 1;
+00331 uint v01= v00 + 3;
+00332 uint v11= v00 + 4;
+00333 <font class="comment">// BiLinearFactor.</font>
+00334 <font class="keywordtype">float</font> dxdy= (1-<a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>)*(1-<a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>);
+00335 <font class="keywordtype">float</font> dx2dy= <a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>*(1-<a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>);
+00336 <font class="keywordtype">float</font> dxdy2= (1-<a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>)*<a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>;
+00337 <font class="keywordtype">float</font> dx2dy2= <a class="code" href="driver__opengl__extension__def_8h.html#a364">x</a>*<a class="code" href="driver__opengl__extension__def_8h.html#a365">y</a>;
+00338
+00339 <font class="comment">// Compute Pos.</font>
+00340 pos = <a class="code" href="classNL3D_1_1CLandscapeVegetableBlockCreateContext.html#o4">_Pos</a>[v00] * dxdy;
+00341 pos+= <a class="code" href="classNL3D_1_1CLandscapeVegetableBlockCreateContext.html#o4">_Pos</a>[v10] * dx2dy;
+00342 pos+= <a class="code" href="classNL3D_1_1CLandscapeVegetableBlockCreateContext.html#o4">_Pos</a>[v01] * dxdy2;
+00343 pos+= <a class="code" href="classNL3D_1_1CLandscapeVegetableBlockCreateContext.html#o4">_Pos</a>[v11] * dx2dy2;
+00344 }
+00345
+00346
+00347 } <font class="comment">// NL3D</font>
+</pre></div>
+
+<!-- footer -->
+<BR><FONT Size=+5>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </FONT>
+</TD>
+<TD WIDTH=15><IMG SRC=http://www.nevrax.org/inc/img/pixel.gif WIDTH=15 HEIGHT=15 BORDER=0 ALT=""></TD>
+</TR>
+</TABLE>
+</BODY>
+</HTML>