diff options
Diffstat (limited to 'docs/doxygen/nel/ps__particle__basic_8cpp-source.html')
-rw-r--r-- | docs/doxygen/nel/ps__particle__basic_8cpp-source.html | 963 |
1 files changed, 963 insertions, 0 deletions
diff --git a/docs/doxygen/nel/ps__particle__basic_8cpp-source.html b/docs/doxygen/nel/ps__particle__basic_8cpp-source.html new file mode 100644 index 00000000..d8938e15 --- /dev/null +++ b/docs/doxygen/nel/ps__particle__basic_8cpp-source.html @@ -0,0 +1,963 @@ +<!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> <A CLASS=uplinks HREF=http://www.nevrax.org><b>Home</B></FONT></A> </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> <A CLASS=uplinks HREF=http://www.nevrax.com><b>nevrax.com</B></FONT></A> </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> + + +<!-- 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> </td> +</tr></table> +<!-- Generated by Doxygen 1.2.14 --> +<center> +<a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="namespaces.html">Namespace List</a> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="classes.html">Alphabetical List</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="namespacemembers.html">Namespace Members</a> <a class="qindex" href="functions.html">Compound Members</a> <a class="qindex" href="globals.html">File Members</a> <a class="qindex" href="pages.html">Related Pages</a> <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> </center> +<hr><h1>ps_particle_basic.cpp</h1><a href="ps__particle__basic_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="ps__particle__basic_8h.html">3d/ps_particle_basic.h</a>"</font> +00029 <font class="preprocessor">#include "<a class="code" href="ps__macro_8h.html">3d/ps_macro.h</a>"</font> +00030 <font class="preprocessor">#include "<a class="code" href="driver_8h.html">3d/driver.h</a>"</font> +00031 <font class="preprocessor">#include "<a class="code" href="texture__grouped_8h.html">3d/texture_grouped.h</a>"</font> +00032 <font class="preprocessor">#include "<a class="code" href="texture__bump_8h.html">3d/texture_bump.h</a>"</font> +00033 <font class="preprocessor">#include "<a class="code" href="texture__mem_8h.html">3d/texture_mem.h</a>"</font> +00034 <font class="preprocessor">#include "<a class="code" href="particle__system_8h.html">3d/particle_system.h</a>"</font> +00035 +00036 +00037 +00038 <font class="keyword">namespace </font>NL3D +00039 { +00040 +00041 +00042 +00044 <font class="comment">// CPSParticle implementation //</font> +00046 <font class="comment"></font> +00047 <font class="comment">//=======================================</font> +<a name="l00048"></a><a class="code" href="classNL3D_1_1CPSParticle.html#a0">00048</a> CPSParticle::CPSParticle() : _DisableAutoLOD(false) +00049 { +00050 +00051 } +00052 +00053 <font class="comment">//=======================================</font> +<a name="l00054"></a><a class="code" href="classNL3D_1_1CPSParticle.html#a8">00054</a> <font class="keywordtype">void</font> CPSParticle::showTool() +00055 { +00056 PARTICLES_CHECK_MEM; +00057 +00058 CVector I = CVector::I; +00059 CVector J = CVector::J; +00060 +00061 <font class="keyword">const</font> CVector tab[] = { 2 * J, I + J +00062 , I + J, 2 * I + J +00063 , 2 * I + J, I +00064 , I, 2 * I - J +00065 , 2 * I - J, - .5f * J +00066 , - .5f * J, -2 * I - J +00067 , -2 * I - J, - I +00068 , - I, -2 * I + J +00069 , -2 * I + J, - I + J +00070 , - I + J, 2 * J +00071 }; +00072 <font class="keyword">const</font> uint tabSize = <font class="keyword">sizeof</font>(tab) / (2 * <font class="keyword">sizeof</font>(CVector)); +00073 +00074 <font class="keyword">const</font> <font class="keywordtype">float</font> sSize = 0.1f; +00075 <a class="code" href="classNL3D_1_1CPSLocatedBindable.html#b4">displayIcon2d</a>(tab, tabSize, sSize); +00076 +00077 PARTICLES_CHECK_MEM; +00078 } +00079 +00080 <font class="comment">//=======================================</font> +<a name="l00081"></a><a class="code" href="classNL3D_1_1CPSParticle.html#b4">00081</a> <font class="keywordtype">void</font> CPSParticle::computeSrcStep(uint32 &step, uint &numToProcess) +00082 { +00083 <a class="code" href="debug_8h.html#a6">nlassert</a>(<a class="code" href="classNL3D_1_1CPSLocatedBindable.html#n0">_Owner</a> && <a class="code" href="classNL3D_1_1CPSLocatedBindable.html#n0">_Owner</a>->getOwner()); +00084 <font class="keyword">const</font> CParticleSystem &ps = *(<a class="code" href="classNL3D_1_1CPSLocatedBindable.html#n0">_Owner</a>->getOwner()); +00085 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CPSParticle.html#o0">_DisableAutoLOD</a> || !ps.isAutoLODEnabled() || <a class="code" href="classNL3D_1_1CPSLocatedBindable.html#n0">_Owner</a>->getSize() == 0) <font class="comment">// Should Auto-LOD be used ?</font> +00086 { +00087 <a class="code" href="classNL3D_1_1CPSParticle.html#a4">step</a> = (1 << 16); +00088 numToProcess = <a class="code" href="classNL3D_1_1CPSLocatedBindable.html#n0">_Owner</a>->getSize(); +00089 } +00090 <font class="keywordflow">else</font> +00091 { +00092 <font class="keywordtype">float</font> oneMinusLODRatio = ps.getOneMinusCurrentLODRatio(); +00093 <font class="keywordtype">float</font> LODRatio = 1.f - oneMinusLODRatio; +00094 <font class="keywordflow">if</font> (LODRatio > ps.getAutoLODStartDistPercent()) +00095 { +00096 <font class="keywordtype">float</font> factor = (LODRatio - 1.f) / (ps.getAutoLODStartDistPercent() - 1.f); +00097 <a class="code" href="namespaceNLMISC.html#a215">NLMISC::clamp</a>(factor, 0.f, 1.f); +00098 <font class="keywordtype">float</font> <a class="code" href="driver__opengl__extension__def_8h.html#a385">r</a> = factor; +00099 <font class="keywordflow">for</font> (uint k = 0; k < ps.getAutoLODDegradationExponent(); ++k) +00100 { +00101 <a class="code" href="driver__opengl__extension__def_8h.html#a385">r</a> *= factor; +00102 } +00103 numToProcess = (uint) (<a class="code" href="classNL3D_1_1CPSLocatedBindable.html#n0">_Owner</a>->getSize() * <a class="code" href="driver__opengl__extension__def_8h.html#a385">r</a>); +00104 <font class="keywordflow">if</font> (numToProcess < 1) { numToProcess = 1; } +00105 +00106 <a class="code" href="classNL3D_1_1CPSParticle.html#a4">step</a> = ps.getAutoLODMode() ? <font class="comment">// skip or limit number, depending on the mode</font> +00107 (<a class="code" href="classNL3D_1_1CPSLocatedBindable.html#n0">_Owner</a>->getSize() << 16) / numToProcess : <font class="comment">// skip particles</font> +00108 (1<<16); <font class="comment">// just display less particles</font> +00109 } +00110 <font class="keywordflow">else</font> +00111 { +00112 <a class="code" href="classNL3D_1_1CPSParticle.html#a4">step</a> = (1 << 16); +00113 numToProcess = <a class="code" href="classNL3D_1_1CPSLocatedBindable.html#n0">_Owner</a>->getSize(); +00114 } +00115 } +00116 +00117 } +00118 +00120 <font class="comment">// coloured particle implementation //</font> +00122 <font class="comment"></font> +00123 <font class="comment">//=======================================</font> +<a name="l00124"></a><a class="code" href="classNL3D_1_1CPSColoredParticle.html#a0">00124</a> <font class="keywordtype">void</font> CPSColoredParticle::setColorScheme(CPSAttribMaker<CRGBA> *col) +00125 { +00126 <a class="code" href="debug_8h.html#a6">nlassert</a>(col); +00127 <font class="keyword">delete</font> <a class="code" href="classNL3D_1_1CPSColoredParticle.html#n1">_ColorScheme</a>; +00128 <a class="code" href="classNL3D_1_1CPSColoredParticle.html#n1">_ColorScheme</a> = col; +00129 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CPSColoredParticle.html#b0">getColorOwner</a>() && col->hasMemory()) col->resize(<a class="code" href="classNL3D_1_1CPSColoredParticle.html#b0">getColorOwner</a>()->getMaxSize(), <a class="code" href="classNL3D_1_1CPSColoredParticle.html#b0">getColorOwner</a>()->getSize()); +00130 <a class="code" href="classNL3D_1_1CPSColoredParticle.html#b1">updateMatAndVbForColor</a>(); +00131 } +00132 +00133 <font class="comment">//=======================================</font> +<a name="l00134"></a><a class="code" href="classNL3D_1_1CPSColoredParticle.html#a3">00134</a> <font class="keywordtype">void</font> CPSColoredParticle::setColor(<a class="code" href="classNLMISC_1_1CRGBA.html">NLMISC::CRGBA</a> col) +00135 { +00136 <font class="keyword">delete</font> <a class="code" href="classNL3D_1_1CPSColoredParticle.html#n1">_ColorScheme</a>; +00137 <a class="code" href="classNL3D_1_1CPSColoredParticle.html#n1">_ColorScheme</a> = NULL; +00138 <a class="code" href="classNL3D_1_1CPSColoredParticle.html#n0">_Color</a> = col; +00139 <a class="code" href="classNL3D_1_1CPSColoredParticle.html#b1">updateMatAndVbForColor</a>(); +00140 } +00141 +00142 <font class="comment">//=======================================</font> +<a name="l00143"></a><a class="code" href="classNL3D_1_1CPSColoredParticle.html#a5">00143</a> CPSColoredParticle::CPSColoredParticle() : _Color(CRGBA(255, 255, 255)), _ColorScheme(NULL) +00144 { +00145 } +00146 +00147 <font class="comment">//=======================================</font> +<a name="l00148"></a><a class="code" href="classNL3D_1_1CPSColoredParticle.html#a6">00148</a> CPSColoredParticle::~CPSColoredParticle() +00149 { +00150 <font class="keyword">delete</font> <a class="code" href="classNL3D_1_1CPSColoredParticle.html#n1">_ColorScheme</a>; +00151 } +00152 +00153 <font class="comment">//=======================================</font> +<a name="l00154"></a><a class="code" href="classNL3D_1_1CPSColoredParticle.html#a7">00154</a> <font class="keywordtype">void</font> CPSColoredParticle::serialColorScheme(<a class="code" href="classNLMISC_1_1IStream.html">NLMISC::IStream</a> &f) <font class="keywordflow">throw</font>(NLMISC::EStream) +00155 { +00156 f.serialVersion(1); +00157 <font class="keywordflow">if</font> (f.isReading()) +00158 { +00159 <font class="keywordflow">if</font> (_ColorScheme) +00160 { +00161 <font class="keyword">delete</font> _ColorScheme; +00162 _ColorScheme = NULL; +00163 } +00164 } +00165 <font class="keywordtype">bool</font> useColorScheme = _ColorScheme != NULL; +00166 f.serial(useColorScheme); +00167 <font class="keywordflow">if</font> (useColorScheme) +00168 { +00169 f.serialPolyPtr(_ColorScheme); +00170 } +00171 <font class="keywordflow">else</font> +00172 { +00173 f.serial(_Color); +00174 } +00175 } +00176 +00178 <font class="comment">// sized particle implementation //</font> +00180 <font class="comment"></font> +00181 <font class="comment">//=======================================</font> +<a name="l00182"></a><a class="code" href="classNL3D_1_1CPSSizedParticle.html#a0">00182</a> <font class="keywordtype">void</font> CPSSizedParticle::setSizeScheme(CPSAttribMaker<float> *size) +00183 { +00184 <a class="code" href="debug_8h.html#a6">nlassert</a>(size != NULL); +00185 <font class="keyword">delete</font> <a class="code" href="classNL3D_1_1CPSSizedParticle.html#n1">_SizeScheme</a>; +00186 <a class="code" href="classNL3D_1_1CPSSizedParticle.html#n1">_SizeScheme</a> = size; +00187 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CPSSizedParticle.html#b0">getSizeOwner</a>() && size->hasMemory()) size->resize(<a class="code" href="classNL3D_1_1CPSSizedParticle.html#b0">getSizeOwner</a>()->getMaxSize(), <a class="code" href="classNL3D_1_1CPSSizedParticle.html#b0">getSizeOwner</a>()-><a class="code" href="classNL3D_1_1CPSSizedParticle.html#a4">getSize</a>()); +00188 } +00189 +00190 <font class="comment">//=======================================</font> +<a name="l00191"></a><a class="code" href="classNL3D_1_1CPSSizedParticle.html#a3">00191</a> <font class="keywordtype">void</font> CPSSizedParticle::setSize(<font class="keywordtype">float</font> size) +00192 { +00193 <font class="keyword">delete</font> <a class="code" href="classNL3D_1_1CPSSizedParticle.html#n1">_SizeScheme</a>; +00194 <a class="code" href="classNL3D_1_1CPSSizedParticle.html#n1">_SizeScheme</a> = NULL; +00195 <a class="code" href="classNL3D_1_1CPSSizedParticle.html#n0">_ParticleSize</a> = size; +00196 } +00197 +00198 <font class="comment">//=======================================</font> +<a name="l00199"></a><a class="code" href="classNL3D_1_1CPSSizedParticle.html#a5">00199</a> CPSSizedParticle::CPSSizedParticle() : _ParticleSize(0.3f), _SizeScheme(NULL) +00200 { +00201 } +00202 +00203 <font class="comment">//=======================================</font> +<a name="l00204"></a><a class="code" href="classNL3D_1_1CPSSizedParticle.html#a6">00204</a> CPSSizedParticle::~CPSSizedParticle() +00205 { +00206 <font class="keyword">delete</font> <a class="code" href="classNL3D_1_1CPSSizedParticle.html#n1">_SizeScheme</a>; +00207 } +00208 +00209 <font class="comment">//=======================================</font> +<a name="l00210"></a><a class="code" href="classNL3D_1_1CPSSizedParticle.html#a7">00210</a> <font class="keywordtype">void</font> CPSSizedParticle::serialSizeScheme(<a class="code" href="classNLMISC_1_1IStream.html">NLMISC::IStream</a> &f) <font class="keywordflow">throw</font>(NLMISC::EStream) +00211 { +00212 f.serialVersion(1); +00213 <font class="keywordflow">if</font> (f.isReading()) +00214 { +00215 <font class="keywordflow">if</font> (_SizeScheme) +00216 { +00217 <font class="keyword">delete</font> _SizeScheme; +00218 _SizeScheme = NULL; +00219 } +00220 } +00221 <font class="keywordtype">bool</font> useSizeScheme = _SizeScheme != NULL; +00222 f.serial(useSizeScheme); +00223 <font class="keywordflow">if</font> (useSizeScheme) +00224 { +00225 f.serialPolyPtr(_SizeScheme); +00226 } +00227 <font class="keywordflow">else</font> +00228 { +00229 f.serial(_ParticleSize); +00230 } +00231 }; +00232 +00234 <font class="comment">// rotated particle implementation //</font> +00236 <font class="comment"></font> +<a name="l00237"></a><a class="code" href="classNL3D_1_1CPSRotated2DParticle.html#q0">00237</a> <font class="keywordtype">float</font> CPSRotated2DParticle::_RotTable[256 * 4]; +<a name="l00238"></a><a class="code" href="classNL3D_1_1CPSRotated2DParticle.html#q1">00238</a> <font class="keywordtype">bool</font> CPSRotated2DParticle::_InitializedRotTab = <font class="keyword">false</font>; +00239 +<a name="l00241"></a><a class="code" href="classNL3D_1_1CPSRotated2DParticle.html#a0">00241</a> <font class="keywordtype">void</font> CPSRotated2DParticle::setAngle2DScheme(CPSAttribMaker<float> *angle2DScheme) +00242 { +00243 <a class="code" href="debug_8h.html#a6">nlassert</a>(angle2DScheme); +00244 <font class="keyword">delete</font> <a class="code" href="classNL3D_1_1CPSRotated2DParticle.html#n1">_Angle2DScheme</a>; +00245 <a class="code" href="classNL3D_1_1CPSRotated2DParticle.html#n1">_Angle2DScheme</a> = angle2DScheme; +00246 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CPSRotated2DParticle.html#b0">getAngle2DOwner</a>() && angle2DScheme->hasMemory()) angle2DScheme->resize(<a class="code" href="classNL3D_1_1CPSRotated2DParticle.html#b0">getAngle2DOwner</a>()->getMaxSize(), <a class="code" href="classNL3D_1_1CPSRotated2DParticle.html#b0">getAngle2DOwner</a>()->getSize()); +00247 } +00248 +<a name="l00250"></a><a class="code" href="classNL3D_1_1CPSRotated2DParticle.html#a3">00250</a> <font class="keywordtype">void</font> CPSRotated2DParticle::setAngle2D(<font class="keywordtype">float</font> angle2DScheme) +00251 { +00252 <font class="keyword">delete</font> <a class="code" href="classNL3D_1_1CPSRotated2DParticle.html#n1">_Angle2DScheme</a>; +00253 <a class="code" href="classNL3D_1_1CPSRotated2DParticle.html#n1">_Angle2DScheme</a> = NULL; +00254 <a class="code" href="classNL3D_1_1CPSRotated2DParticle.html#n0">_Angle2D</a> = angle2DScheme; +00255 } +00256 +<a name="l00258"></a><a class="code" href="classNL3D_1_1CPSRotated2DParticle.html#a5">00258</a> CPSRotated2DParticle::CPSRotated2DParticle() : _Angle2D(0), _Angle2DScheme(NULL) +00259 { +00260 } +00261 +<a name="l00263"></a><a class="code" href="classNL3D_1_1CPSRotated2DParticle.html#a6">00263</a> CPSRotated2DParticle::~CPSRotated2DParticle() +00264 { +00265 <font class="keyword">delete</font> <a class="code" href="classNL3D_1_1CPSRotated2DParticle.html#n1">_Angle2DScheme</a>; +00266 } +00267 +<a name="l00269"></a><a class="code" href="classNL3D_1_1CPSRotated2DParticle.html#a7">00269</a> <font class="keywordtype">void</font> CPSRotated2DParticle::serialAngle2DScheme(<a class="code" href="classNLMISC_1_1IStream.html">NLMISC::IStream</a> &f) <font class="keywordflow">throw</font>(NLMISC::EStream) +00270 { +00271 f.serialVersion(1); +00272 <font class="keywordflow">if</font> (f.isReading()) +00273 { +00274 <font class="keywordflow">if</font> (_Angle2DScheme) +00275 { +00276 <font class="keyword">delete</font> _Angle2DScheme; +00277 _Angle2DScheme = NULL; +00278 } +00279 } +00280 <font class="keywordtype">bool</font> useAngle2DScheme = _Angle2DScheme != NULL; +00281 f.serial(useAngle2DScheme); +00282 <font class="keywordflow">if</font> (useAngle2DScheme) +00283 { +00284 f.serialPolyPtr(_Angle2DScheme); +00285 } +00286 <font class="keywordflow">else</font> +00287 { +00288 f.serial(_Angle2D); +00289 } +00290 } +00291 +<a name="l00293"></a><a class="code" href="classNL3D_1_1CPSRotated2DParticle.html#d1">00293</a> <font class="keywordtype">void</font> CPSRotated2DParticle::initRotTable(<font class="keywordtype">void</font>) +00294 { +00295 <font class="keywordtype">float</font> *ptFloat = <a class="code" href="classNL3D_1_1CPSRotated2DParticle.html#q0">_RotTable</a>; +00296 <font class="keywordflow">for</font> (uint32 k = 0; k < 256; ++k) +00297 { +00298 <font class="keyword">const</font> <font class="keywordtype">float</font> ca = (float) cos(k * (1.0f / 256.0f) * 2.0f * NLMISC::Pi); +00299 <font class="keyword">const</font> <font class="keywordtype">float</font> sa = (float) sin(k * (1.0f / 256.0f) * 2.0f * NLMISC::Pi); +00300 +00301 *ptFloat++ = -ca - sa; +00302 *ptFloat++ = -sa + ca; +00303 +00304 *ptFloat++ = ca - sa; +00305 *ptFloat++ = sa + ca; +00306 } +00307 <a class="code" href="classNL3D_1_1CPSRotated2DParticle.html#q1">_InitializedRotTab</a> = <font class="keyword">true</font>; +00308 } +00309 +00311 <font class="comment">// textured particle implementation //</font> +00313 <font class="comment"></font> +<a name="l00315"></a><a class="code" href="classNL3D_1_1CPSTexturedParticle.html#a0">00315</a> <font class="comment">void CPSTexturedParticle::setTextureIndexScheme(CPSAttribMaker<sint32> *animOrder)</font> +00316 { +00317 <a class="code" href="debug_8h.html#a6">nlassert</a>(animOrder); +00318 <a class="code" href="debug_8h.html#a6">nlassert</a>(_TexGroup); <font class="comment">// setTextureGroup must have been called before this </font> +00319 <font class="keyword">delete</font> _TextureIndexScheme; +00320 _TextureIndexScheme = animOrder; +00321 <font class="keywordflow">if</font> (getTextureIndexOwner() && animOrder->hasMemory()) animOrder->resize(getTextureIndexOwner()->getMaxSize(), getTextureIndexOwner()->getSize()); +00322 +00323 +00324 updateMatAndVbForTexture(); +00325 } +00326 +<a name="l00328"></a><a class="code" href="classNL3D_1_1CPSTexturedParticle.html#a3">00328</a> <font class="keywordtype">void</font> CPSTexturedParticle::setTextureIndex(sint32 <a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a>) +00329 { +00330 <font class="keyword">delete</font> <a class="code" href="classNL3D_1_1CPSTexturedParticle.html#n2">_TextureIndexScheme</a>; +00331 <a class="code" href="classNL3D_1_1CPSTexturedParticle.html#n2">_TextureIndexScheme</a> = NULL; +00332 <a class="code" href="classNL3D_1_1CPSTexturedParticle.html#n3">_TextureIndex</a> = <a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a>; +00333 } +00334 +<a name="l00336"></a><a class="code" href="classNL3D_1_1CPSTexturedParticle.html#a5">00336</a> <font class="keywordtype">void</font> CPSTexturedParticle::setTextureGroup(<a class="code" href="classNLMISC_1_1CSmartPtr.html">NLMISC::CSmartPtr<CTextureGrouped></a> texGroup) +00337 { +00338 <a class="code" href="debug_8h.html#a6">nlassert</a>(texGroup); +00339 <font class="keywordflow">if</font> (_Tex) +00340 { +00341 <a class="code" href="classNL3D_1_1CPSTexturedParticle.html#n0">_Tex</a> = NULL; +00342 } +00343 <a class="code" href="classNL3D_1_1CPSTexturedParticle.html#n1">_TexGroup</a> = texGroup; +00344 } +00345 +<a name="l00347"></a><a class="code" href="classNL3D_1_1CPSTexturedParticle.html#a8">00347</a> <font class="keywordtype">void</font> CPSTexturedParticle::setTexture(CSmartPtr<ITexture> tex) +00348 { +00349 <font class="keyword">delete</font> <a class="code" href="classNL3D_1_1CPSTexturedParticle.html#n2">_TextureIndexScheme</a>; +00350 <a class="code" href="classNL3D_1_1CPSTexturedParticle.html#n2">_TextureIndexScheme</a> = NULL; +00351 <a class="code" href="classNL3D_1_1CPSTexturedParticle.html#n0">_Tex</a> = tex; +00352 <a class="code" href="classNL3D_1_1CPSTexturedParticle.html#n1">_TexGroup</a> = NULL; <font class="comment">// release any grouped texture if one was set before</font> +00353 <a class="code" href="classNL3D_1_1CPSTexturedParticle.html#b1">updateMatAndVbForTexture</a>(); +00354 } +00355 +<a name="l00357"></a><a class="code" href="classNL3D_1_1CPSTexturedParticle.html#a11">00357</a> CPSTexturedParticle::CPSTexturedParticle() : _TexGroup(NULL), +00358 _TextureIndexScheme(NULL), +00359 _TextureIndex(0) +00360 { +00361 } +00362 +<a name="l00364"></a><a class="code" href="classNL3D_1_1CPSTexturedParticle.html#a12">00364</a> CPSTexturedParticle::~CPSTexturedParticle() +00365 { +00366 <font class="keyword">delete</font> <a class="code" href="classNL3D_1_1CPSTexturedParticle.html#n2">_TextureIndexScheme</a>; +00367 } +00368 +<a name="l00370"></a><a class="code" href="classNL3D_1_1CPSTexturedParticle.html#a13">00370</a> <font class="keywordtype">void</font> CPSTexturedParticle::serialTextureScheme(<a class="code" href="classNLMISC_1_1IStream.html">NLMISC::IStream</a> &f) <font class="keywordflow">throw</font>(NLMISC::EStream) +00371 { +00372 f.serialVersion(1); +00373 <font class="keywordflow">if</font> (f.isReading()) +00374 { +00375 <font class="keywordflow">if</font> (_TextureIndexScheme) +00376 { +00377 <font class="keyword">delete</font> _TextureIndexScheme; +00378 _TextureIndexScheme = NULL; +00379 _Tex = NULL; +00380 _TexGroup = NULL; +00381 } +00382 } +00383 +00384 <font class="keywordtype">bool</font> useAnimatedTexture; +00385 <font class="keywordflow">if</font> (!f.isReading()) +00386 { +00387 useAnimatedTexture = (_TexGroup != NULL); +00388 } +00389 f.serial(useAnimatedTexture); +00390 <font class="keywordflow">if</font> (useAnimatedTexture) +00391 { +00392 <font class="keywordflow">if</font> (f.isReading()) +00393 { +00394 CTextureGrouped *ptTex = NULL; +00395 f.serialPolyPtr(ptTex); +00396 _TexGroup = ptTex; +00397 } +00398 <font class="keywordflow">else</font> +00399 { +00400 CTextureGrouped *ptTex = _TexGroup; +00401 f.serialPolyPtr(ptTex); +00402 } +00403 +00404 <font class="keywordtype">bool</font> useTextureIndexScheme = _TextureIndexScheme != NULL; +00405 f.serial(useTextureIndexScheme); +00406 <font class="keywordflow">if</font> (useTextureIndexScheme) +00407 { +00408 f.serialPolyPtr(_TextureIndexScheme); +00409 _TextureIndex = 0; +00410 } +00411 <font class="keywordflow">else</font> +00412 { +00413 f.serial(_TextureIndex); +00414 } +00415 } +00416 <font class="keywordflow">else</font> +00417 { +00418 <font class="keywordflow">if</font> (f.isReading()) +00419 { +00420 ITexture *ptTex = NULL; +00421 f.serialPolyPtr(ptTex); +00422 _Tex = ptTex; +00423 } +00424 <font class="keywordflow">else</font> +00425 { +00426 ITexture *ptTex = _Tex; +00427 f.serialPolyPtr(ptTex); +00428 } +00429 } +00430 } +00431 +00433 <font class="comment">// CPSRotated3DPlaneParticle implementation //</font> +00435 <font class="comment"></font> +<a name="l00437"></a><a class="code" href="classNL3D_1_1CPSRotated3DPlaneParticle.html#a0">00437</a> <font class="comment">void CPSRotated3DPlaneParticle::setPlaneBasisScheme(CPSAttribMaker<CPlaneBasis> *basisMaker)</font> +00438 { +00439 <a class="code" href="debug_8h.html#a6">nlassert</a>(basisMaker); +00440 <font class="keyword">delete</font> _PlaneBasisScheme; +00441 _PlaneBasisScheme = basisMaker; +00442 <font class="keywordflow">if</font> (getPlaneBasisOwner() && basisMaker->hasMemory()) basisMaker->resize(getPlaneBasisOwner()->getMaxSize(), getPlaneBasisOwner()->getSize()); +00443 } +00444 +<a name="l00446"></a><a class="code" href="classNL3D_1_1CPSRotated3DPlaneParticle.html#a3">00446</a> <font class="keywordtype">void</font> CPSRotated3DPlaneParticle::setPlaneBasis(<font class="keyword">const</font> CPlaneBasis &basis) +00447 { +00448 <font class="keyword">delete</font> <a class="code" href="classNL3D_1_1CPSRotated3DPlaneParticle.html#n0">_PlaneBasisScheme</a>; +00449 <a class="code" href="classNL3D_1_1CPSRotated3DPlaneParticle.html#n0">_PlaneBasisScheme</a> = NULL; +00450 <a class="code" href="classNL3D_1_1CPSRotated3DPlaneParticle.html#n1">_PlaneBasis</a> = basis; +00451 } +00452 +<a name="l00454"></a><a class="code" href="classNL3D_1_1CPSRotated3DPlaneParticle.html#a5">00454</a> CPSRotated3DPlaneParticle::CPSRotated3DPlaneParticle() : _PlaneBasisScheme(NULL) +00455 { +00456 <a class="code" href="classNL3D_1_1CPSRotated3DPlaneParticle.html#n1">_PlaneBasis</a>.X = CVector::I; +00457 <a class="code" href="classNL3D_1_1CPSRotated3DPlaneParticle.html#n1">_PlaneBasis</a>.Y = CVector::J; +00458 } +00459 +<a name="l00461"></a><a class="code" href="classNL3D_1_1CPSRotated3DPlaneParticle.html#a6">00461</a> CPSRotated3DPlaneParticle::~CPSRotated3DPlaneParticle() +00462 { +00463 <font class="keyword">delete</font> <a class="code" href="classNL3D_1_1CPSRotated3DPlaneParticle.html#n0">_PlaneBasisScheme</a>; +00464 } +00465 +<a name="l00467"></a><a class="code" href="classNL3D_1_1CPSRotated3DPlaneParticle.html#a7">00467</a> <font class="keywordtype">void</font> CPSRotated3DPlaneParticle::serialPlaneBasisScheme(<a class="code" href="classNLMISC_1_1IStream.html">NLMISC::IStream</a> &f) <font class="keywordflow">throw</font>(NLMISC::EStream) +00468 { +00469 f.serialVersion(1); +00470 f.serialPolyPtr(_PlaneBasisScheme); +00471 <font class="keywordtype">bool</font> usePlaneBasisScheme = _PlaneBasisScheme != NULL; +00472 <font class="keywordflow">if</font> (!usePlaneBasisScheme) +00473 { +00474 f.serial(_PlaneBasis); +00475 } +00476 } +00477 +00479 <font class="comment">// CPSMaterial implementation //</font> +00481 <font class="comment"></font> +<a name="l00483"></a><a class="code" href="classNL3D_1_1CPSMaterial.html#a0">00483</a> <font class="comment">CPSMaterial::CPSMaterial()</font> +00484 { +00485 _Mat.setBlend(<font class="keyword">true</font>); +00486 _Mat.setBlendFunc(CMaterial::one, CMaterial::one); +00487 _Mat.setZWrite(<font class="keyword">false</font>); +00488 } +00489 +<a name="l00491"></a><a class="code" href="classNL3D_1_1CPSMaterial.html#a1">00491</a> <font class="keywordtype">void</font> CPSMaterial::serialMaterial(<a class="code" href="classNLMISC_1_1IStream.html">NLMISC::IStream</a> &f) <font class="keywordflow">throw</font>(NLMISC::EStream) +00492 { +00493 f.serialVersion(1); +00494 TBlendingMode m = getBlendingMode(); +00495 f.serialEnum(m); +00496 setBlendingMode(m); +00497 } +00498 +<a name="l00500"></a><a class="code" href="classNL3D_1_1CPSMaterial.html#a2">00500</a> <font class="keywordtype">void</font> CPSMaterial::setBlendingMode(CPSMaterial::TBlendingMode mode) +00501 { +00502 <font class="keywordflow">switch</font> (mode) +00503 { +00504 <font class="keywordflow">case</font> <a class="code" href="classNL3D_1_1CPSMaterial.html#s4s0">add</a>: +00505 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.setBlend(<font class="keyword">true</font>); +00506 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.setBlendFunc(CMaterial::one, CMaterial::one); +00507 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.setZWrite(<font class="keyword">false</font>); +00508 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.setAlphaTest(<font class="keyword">false</font>); +00509 <font class="keywordflow">break</font>; +00510 <font class="keywordflow">case</font> <a class="code" href="classNL3D_1_1CPSMaterial.html#s4s1">modulate</a>: +00511 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.setBlend(<font class="keyword">true</font>); +00512 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.setBlendFunc(CMaterial::zero, CMaterial::srccolor); +00513 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.setZWrite(<font class="keyword">false</font>); +00514 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.setAlphaTest(<font class="keyword">false</font>); +00515 <font class="keywordflow">break</font>; +00516 <font class="keywordflow">case</font> <a class="code" href="classNL3D_1_1CPSMaterial.html#s4s2">alphaBlend</a>: +00517 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.setBlend(<font class="keyword">true</font>); +00518 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.setBlendFunc(CMaterial::srcalpha, CMaterial::invsrcalpha); +00519 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.setZWrite(<font class="keyword">false</font>); +00520 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.setAlphaTest(<font class="keyword">false</font>); +00521 <font class="keywordflow">break</font>; +00522 <font class="keywordflow">case</font> <a class="code" href="classNL3D_1_1CPSMaterial.html#s4s3">alphaTest</a>: +00523 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.setBlend(<font class="keyword">false</font>); +00524 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.setZWrite(<font class="keyword">true</font>); +00525 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.setAlphaTest(<font class="keyword">true</font>); +00526 <font class="keywordflow">break</font>; +00527 } +00528 } +00529 +<a name="l00531"></a><a class="code" href="classNL3D_1_1CPSMaterial.html#a3">00531</a> CPSMaterial::TBlendingMode CPSMaterial::getBlendingMode(<font class="keywordtype">void</font>)<font class="keyword"> const</font> +00532 <font class="keyword"></font>{ +00533 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.getBlend()) +00534 { +00535 CMaterial::TBlend srcBlend = <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.getSrcBlend(); +00536 CMaterial::TBlend destBlend = <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.getDstBlend(); +00537 +00538 <font class="keywordflow">if</font> (srcBlend == CMaterial::one && destBlend == CMaterial::one) <font class="keywordflow">return</font> <a class="code" href="classNL3D_1_1CPSMaterial.html#s4s0">add</a>; +00539 <font class="keywordflow">if</font> (srcBlend == CMaterial::zero && destBlend == CMaterial::srccolor) <font class="keywordflow">return</font> <a class="code" href="classNL3D_1_1CPSMaterial.html#s4s1">modulate</a>; +00540 <font class="keywordflow">if</font> (srcBlend == CMaterial::srcalpha && destBlend == CMaterial::invsrcalpha) <font class="keywordflow">return</font> <a class="code" href="classNL3D_1_1CPSMaterial.html#s4s2">alphaBlend</a>; +00541 +00542 <font class="comment">// unrecognized mode</font> +00543 <a class="code" href="debug_8h.html#a6">nlassert</a>(0); +00544 <font class="keywordflow">return</font> <a class="code" href="classNL3D_1_1CPSMaterial.html#s4s3">alphaTest</a>; <font class="comment">// to avoid a warning only ...</font> +00545 } +00546 <font class="keywordflow">else</font> +00547 { +00548 <font class="keywordflow">return</font> <a class="code" href="classNL3D_1_1CPSMaterial.html#s4s3">alphaTest</a>; +00549 } +00550 } +00551 +<a name="l00553"></a><a class="code" href="classNL3D_1_1CPSMaterial.html#a4">00553</a> <font class="keywordtype">void</font> CPSMaterial::forceModulateConstantColor(<font class="keywordtype">bool</font> force, <font class="keyword">const</font> <a class="code" href="classNLMISC_1_1CRGBA.html">NLMISC::CRGBA</a> &col) +00554 { +00555 <font class="keywordflow">if</font> (force) +00556 { +00558 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.texConstantColor(1, col); +00559 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.texEnvOpRGB(1, CMaterial::Modulate); +00560 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.texEnvOpAlpha(1, CMaterial::Modulate); +00561 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.texEnvArg0RGB(1, CMaterial::Previous, CMaterial::SrcColor); +00562 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.texEnvArg1RGB(1, CMaterial::Constant, CMaterial::SrcColor); +00563 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.texEnvArg0Alpha(1, CMaterial::Previous, CMaterial::SrcAlpha); +00564 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.texEnvArg1Alpha(1, CMaterial::Constant, CMaterial::SrcAlpha); +00565 <a class="code" href="classNL3D_1_1CPSMaterial.html#a5">forceTexturedMaterialStages</a>(2); +00566 } +00567 <font class="keywordflow">else</font> +00568 { +00569 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.getTexture(1) != NULL) +00570 { +00571 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.setTexture(1, NULL); +00572 } +00573 } +00574 } +00575 +00576 +<a name="l00578"></a><a class="code" href="classNL3D_1_1CPSMaterial.html#a5">00578</a> <font class="keywordtype">void</font> CPSMaterial::forceTexturedMaterialStages(uint numStages) +00579 { +00580 ITexture *blankTex = NULL; +00581 uint k; +00582 <font class="keywordflow">for</font> (k = 0; k < numStages; ++k) +00583 { +00584 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.getTexture(k) == NULL) +00585 { +00586 <font class="keywordflow">if</font> (!blankTex) +00587 { +00588 blankTex = CTextureMem::Create1x1WhiteTex(); +00589 } +00590 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.setTexture(k, blankTex); +00591 } +00592 } +00593 <font class="keywordflow">for</font> (; k < <a class="code" href="namespaceNL3D.html#a94">IDRV_MAT_MAXTEXTURES</a>; ++k) +00594 { +00595 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.getTexture(k) != NULL) +00596 { +00597 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.setTexture(k, NULL); +00598 } +00599 } +00600 } +00601 +00602 +00604 <font class="comment">// CPSMultiTexturedParticle implementation //</font> +00606 <font class="comment"></font> +00607 <font class="comment">//=======================================</font> +<a name="l00608"></a><a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#q0">00608</a> <font class="keywordtype">bool</font> CPSMultiTexturedParticle::_ForceBasicCaps = <font class="keyword">false</font>; +00609 +00610 <font class="comment">//=======================================</font> +<a name="l00611"></a><a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#a0">00611</a> CPSMultiTexturedParticle::CPSMultiTexturedParticle() : _MultiTexState(TouchFlag), _BumpFactor(1.f) +00612 { +00613 } +00614 +00615 <font class="comment">//=======================================</font> +<a name="l00616"></a><a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#a1">00616</a> <font class="keywordtype">void</font> CPSMultiTexturedParticle::enableMultiTexture(<font class="keywordtype">bool</font> enabled <font class="comment">/*= true*/</font>) +00617 { +00618 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#a2">isMultiTextureEnabled</a>() == enabled) <font class="keywordflow">return</font>; +00619 <font class="keywordflow">if</font> (!enabled) +00620 { +00621 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n2">_Texture2</a> = NULL; +00622 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n3">_AlternateTexture2</a> = NULL; +00623 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n6">_MultiTexState</a> = 0; +00624 } +00625 <font class="keywordflow">else</font> +00626 { +00627 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n0">_MainOp</a> = <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#s5s1">Modulate</a>; +00628 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n4">_TexScroll</a>[0].<a class="code" href="classNLMISC_1_1CVector2f.html#z340_0">set</a>(0, 0); +00629 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n4">_TexScroll</a>[1].<a class="code" href="classNLMISC_1_1CVector2f.html#z340_0">set</a>(0, 0); +00630 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n6">_MultiTexState</a> = (uint8) <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#t8t1">MultiTextureEnabled</a>; +00631 } +00632 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#b3">touch</a>(); +00633 } +00634 +00635 <font class="comment">//=======================================</font> +<a name="l00636"></a><a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#a8">00636</a> <font class="keywordtype">void</font> CPSMultiTexturedParticle::enableAlternateTex(<font class="keywordtype">bool</font> enabled <font class="comment">/*= true*/</font>) +00637 { +00638 <a class="code" href="debug_8h.html#a6">nlassert</a>(<a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#a2">isMultiTextureEnabled</a>()); <font class="comment">// multitexturing must have been enabled first</font> +00639 <font class="keywordflow">if</font> (enabled == <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#a9">isAlternateTexEnabled</a>()) <font class="keywordflow">return</font>; +00640 +00641 <font class="keywordflow">if</font> (enabled) +00642 { +00643 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n5">_TexScrollAlternate</a>[0].<a class="code" href="classNLMISC_1_1CVector2f.html#z340_0">set</a>(0, 0); +00644 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n5">_TexScrollAlternate</a>[1].<a class="code" href="classNLMISC_1_1CVector2f.html#z340_0">set</a>(0, 0); +00645 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n1">_AlternateOp</a> = <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#s5s1">Modulate</a>; +00646 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n6">_MultiTexState</a> |= (uint8) <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#t8t2">AlternateTextureEnabled</a>; +00647 } +00648 <font class="keywordflow">else</font> +00649 { +00650 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n2">_Texture2</a> = NULL; +00651 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n6">_MultiTexState</a> &= ~(uint8) <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#t8t2">AlternateTextureEnabled</a>; +00652 } +00653 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#b3">touch</a>(); +00654 } +00655 +00656 <font class="comment">//=======================================</font> +<a name="l00657"></a><a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#a19">00657</a> <font class="keywordtype">void</font> CPSMultiTexturedParticle::serialMultiTex(<a class="code" href="classNLMISC_1_1IStream.html">NLMISC::IStream</a> &f) <font class="keywordflow">throw</font>(NLMISC::EStream) +00658 { +00660 sint ver = f.serialVersion(1); +00661 f.serial(_MultiTexState); +00662 <font class="keywordflow">if</font> (isMultiTextureEnabled()) +00663 { +00664 f.serialEnum(_MainOp); +00665 <font class="keywordflow">if</font> (_MainOp == EnvBumpMap && ver >= 1) +00666 { +00667 f.serial(_BumpFactor); +00668 } +00669 ITexture *tex = NULL; +00670 <font class="keywordflow">if</font> (f.isReading()) +00671 { +00672 f.serialPolyPtr(tex); +00673 _Texture2 = tex; +00674 } +00675 <font class="keywordflow">else</font> +00676 { +00677 tex = _Texture2; +00678 f.serialPolyPtr(tex); +00679 } +00680 f.serial(_TexScroll[0], _TexScroll[1]); +00681 +00682 <font class="keywordflow">if</font> (isAlternateTexEnabled()) +00683 { +00684 f.serialEnum(_AlternateOp); +00685 <font class="keywordflow">if</font> (f.isReading()) +00686 { +00687 f.serialPolyPtr(tex); +00688 _AlternateTexture2 = tex; +00689 } +00690 <font class="keywordflow">else</font> +00691 { +00692 tex = _AlternateTexture2; +00693 f.serialPolyPtr(tex); +00694 } +00695 f.serial(_TexScrollAlternate[0], _TexScrollAlternate[1]); +00696 } +00697 <font class="keywordflow">else</font> +00698 { +00699 _AlternateTexture2 = NULL; +00700 } +00701 } +00702 <font class="keywordflow">else</font> +00703 { +00704 <font class="keywordflow">if</font> (f.isReading()) +00705 { +00706 _Texture2 = NULL; +00707 _AlternateTexture2 = NULL; +00708 } +00709 } +00710 } +00711 +00712 <font class="comment">//=======================================</font> +<a name="l00713"></a><a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#a20">00713</a> <font class="keywordtype">void</font> CPSMultiTexturedParticle::setupMaterial(ITexture *primary, IDriver *driver, CMaterial &mat) +00714 { +00716 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#a2">isMultiTextureEnabled</a>() && <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n0">_MainOp</a> == <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#s5s3">EnvBumpMap</a> && driver->isTextureAddrModeSupported(CMaterial::OffsetTexture)) +00717 { +00718 CTextureBump *tb = dynamic_cast<CTextureBump *>((ITexture *) <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n2">_Texture2</a>); +00719 <font class="keywordflow">if</font> (tb != NULL) +00720 { +00721 <font class="keywordtype">float</font> normFactor = tb->getNormalizationFactor(); +00722 <font class="keywordflow">if</font> (normFactor == 0.f) <font class="comment">// have we computed the normalization factor ?</font> +00723 { +00725 tb->generate(); +00726 normFactor = tb->getNormalizationFactor(); +00727 tb->release(); +00728 } +00729 <font class="keyword">const</font> <font class="keywordtype">float</font> bMat[] = { <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n7">_BumpFactor</a> * normFactor, 0.f, 0.f, <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n7">_BumpFactor</a> * normFactor}; +00730 driver->setMatrix2DForTextureOffsetAddrMode(1, bMat); +00731 } +00732 } +00733 +00734 <font class="keywordflow">if</font> (!<a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#b5">isTouched</a>() && <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#b6">areBasicCapsForcedLocal</a>() == <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#d1">areBasicCapsForced</a>()) <font class="keywordflow">return</font>; +00735 <font class="keywordflow">if</font> (!<a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#a2">isMultiTextureEnabled</a>()) +00736 { +00737 mat.setTexture(0, primary); +00738 mat.texEnvOpRGB(0, CMaterial::Modulate); +00739 mat.setTexture(1, NULL); +00740 } +00741 <font class="keywordflow">else</font> +00742 { +00743 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n0">_MainOp</a> != <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#s5s3">EnvBumpMap</a>) +00744 { +00745 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#b0">setupMultiTexEnv</a>(<a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n0">_MainOp</a>, primary, <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n2">_Texture2</a>, mat); +00746 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n6">_MultiTexState</a> &= ~(uint8) <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#t8t4">EnvBumpMapUsed</a>; +00747 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n6">_MultiTexState</a> &= ~(uint8) <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#t8t3">AlternateTextureUsed</a>; +00748 } +00749 <font class="keywordflow">else</font> +00750 { +00751 <font class="keywordflow">if</font> (!<a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#q0">_ForceBasicCaps</a> && driver->isTextureAddrModeSupported(CMaterial::OffsetTexture)) <font class="comment">// envbumpmap supported ?</font> +00752 { +00753 CTextureBump *tb = dynamic_cast<CTextureBump *>((ITexture *) <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n2">_Texture2</a>); +00754 <font class="keywordflow">if</font> (tb != NULL) +00755 { +00756 <font class="keywordtype">float</font> normFactor = tb->getNormalizationFactor(); +00757 <font class="keywordflow">if</font> (normFactor == 0.f) <font class="comment">// have we computed the normalization factor ?</font> +00758 { +00760 tb->generate(); +00761 normFactor = tb->getNormalizationFactor(); +00762 tb->release(); +00763 } +00764 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#b0">setupMultiTexEnv</a>(<a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n0">_MainOp</a>, primary, <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n2">_Texture2</a>, mat); +00765 } +00766 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n6">_MultiTexState</a> &= ~(uint8) <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#t8t3">AlternateTextureUsed</a>; +00767 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n6">_MultiTexState</a> |= (uint8) <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#t8t4">EnvBumpMapUsed</a>; +00768 } +00769 <font class="keywordflow">else</font> <font class="comment">// switch to alternate</font> +00770 { +00771 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#a9">isAlternateTexEnabled</a>()) +00772 { +00773 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n6">_MultiTexState</a> |= (uint8) <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#t8t3">AlternateTextureUsed</a>; +00774 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#b0">setupMultiTexEnv</a>(<a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n1">_AlternateOp</a>, primary, <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n3">_AlternateTexture2</a>, mat); +00775 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n6">_MultiTexState</a> &= ~(uint8) <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#t8t4">EnvBumpMapUsed</a>; +00776 } +00777 <font class="keywordflow">else</font> <font class="comment">// display the texture as it</font> +00778 { +00779 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#b0">setupMultiTexEnv</a>(<a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#s5s2">Decal</a>, primary, NULL, mat); +00780 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n6">_MultiTexState</a> &= ~(uint8) <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#t8t3">AlternateTextureUsed</a>; +00781 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n6">_MultiTexState</a> &= ~(uint8) <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#t8t4">EnvBumpMapUsed</a>; +00782 } +00783 } +00784 } +00785 } +00786 +00787 (<a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#d1">areBasicCapsForced</a>()); +00788 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#b4">unTouch</a>(); +00789 } +00790 +00791 <font class="comment">//=======================================</font> +<a name="l00792"></a><a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#b0">00792</a> <font class="keywordtype">void</font> CPSMultiTexturedParticle::setupMultiTexEnv(TOperator op, ITexture *tex1, ITexture *tex2, CMaterial &mat) +00793 { +00794 <font class="keywordflow">switch</font> (op) +00795 { +00796 <font class="keywordflow">case</font> <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#s5s0">Add</a>: +00797 mat.setTexture(0, tex1); +00798 mat.setTexture(1, tex2); +00799 mat.texEnvOpRGB(0, CMaterial::Modulate); +00800 mat.texEnvOpRGB(1, CMaterial::Add); +00801 mat.enableTexAddrMode(<font class="keyword">false</font>); +00802 <font class="keywordflow">break</font>; +00803 <font class="keywordflow">case</font> <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#s5s1">Modulate</a>: +00804 mat.setTexture(0, tex1); +00805 mat.setTexture(1, tex2); +00806 mat.texEnvOpRGB(0, CMaterial::Modulate); +00807 mat.texEnvOpRGB(1, CMaterial::Modulate); +00808 mat.enableTexAddrMode(<font class="keyword">false</font>); +00809 <font class="keywordflow">break</font>; +00810 <font class="keywordflow">case</font> <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#s5s3">EnvBumpMap</a>: +00811 mat.setTexture(0, tex2); +00812 mat.setTexture(1, tex1); +00813 mat.texEnvOpRGB(0, CMaterial::Replace); +00814 mat.texEnvOpRGB(1, CMaterial::Modulate); +00815 mat.enableTexAddrMode(<font class="keyword">true</font>); +00816 mat.setTexAddressingMode(0, CMaterial::FetchTexture); +00817 mat.setTexAddressingMode(1, CMaterial::OffsetTexture); +00818 <font class="keywordflow">break</font>; +00819 <font class="keywordflow">case</font> <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#s5s2">Decal</a>: +00820 mat.setTexture(0, tex1); +00821 mat.texEnvOpRGB(0, CMaterial::Replace); +00822 mat.setTexture(1, NULL); +00823 mat.enableTexAddrMode(<font class="keyword">false</font>); +00824 <font class="keywordflow">break</font>; +00825 <font class="keywordflow">default</font>: <font class="keywordflow">break</font>; +00826 } +00827 } +00828 +00829 <font class="comment">//=====static func to convert a texture to a bumpmap</font> +00830 <font class="keyword">static</font> <font class="keywordtype">void</font> <a class="code" href="namespaceNL3D.html#a437">ConvertToBumpMap</a>(<a class="code" href="classNLMISC_1_1CSmartPtr.html">NLMISC::CSmartPtr<ITexture></a> &ptr) +00831 { +00832 <font class="keywordflow">if</font> (!dynamic_cast<CTextureBump *>( (ITexture *) ptr)) +00833 { +00834 <font class="comment">// convert to a bumpmap</font> +00835 CTextureBump *tb = <font class="keyword">new</font> CTextureBump; +00836 tb->setAbsoluteOffsets(); +00837 tb->setHeightMap((ITexture *) ptr); +00838 ptr = tb; +00839 } +00840 } +00841 +00842 <font class="comment">//=====static func to convert a bumpmap to a texture (its heightmap)</font> +00843 <font class="keyword">static</font> <font class="keywordtype">void</font> <a class="code" href="namespaceNL3D.html#a438">ConvertFromBumpMap</a>(<a class="code" href="classNLMISC_1_1CSmartPtr.html">NLMISC::CSmartPtr<ITexture></a> &ptr) +00844 { +00845 CTextureBump *bm = dynamic_cast<CTextureBump *>( (ITexture *) ptr); +00846 <font class="keywordflow">if</font> (bm) +00847 { +00848 <font class="comment">// retrieve the heightmap from the bumpmap</font> +00849 <a class="code" href="classNLMISC_1_1CSmartPtr.html">NLMISC::CSmartPtr<ITexture></a> hm = bm->getHeightMap(); +00850 ptr = hm; +00851 } +00852 } +00853 +00854 <font class="comment">//=========================================</font> +<a name="l00855"></a><a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#a10">00855</a> <font class="keywordtype">void</font> CPSMultiTexturedParticle::setTexture2Alternate(ITexture *tex) +00856 { +00857 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n3">_AlternateTexture2</a> = tex; +00858 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n1">_AlternateOp</a> != <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#s5s3">EnvBumpMap</a>) +00859 { +00860 <a class="code" href="namespaceNL3D.html#a438">ConvertFromBumpMap</a>(<a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n3">_AlternateTexture2</a>); +00861 } +00862 <font class="keywordflow">else</font> +00863 { +00864 <a class="code" href="namespaceNL3D.html#a437">ConvertToBumpMap</a>(<a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n3">_AlternateTexture2</a>); +00865 } +00866 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#b3">touch</a>(); +00867 } +00868 +00869 <font class="comment">//==========================================</font> +<a name="l00870"></a><a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#a3">00870</a> <font class="keywordtype">void</font> CPSMultiTexturedParticle::setTexture2(ITexture *tex) +00871 { +00872 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n2">_Texture2</a> = tex; +00873 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n0">_MainOp</a> != <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#s5s3">EnvBumpMap</a>) +00874 { +00875 <a class="code" href="namespaceNL3D.html#a438">ConvertFromBumpMap</a>(<a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n2">_Texture2</a>); +00876 } +00877 <font class="keywordflow">else</font> +00878 { +00879 <font class="keywordflow">if</font> (!dynamic_cast<NL3D::CTextureBump *>((ITexture *) <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n2">_Texture2</a>)) +00880 { +00881 <a class="code" href="namespaceNL3D.html#a437">ConvertToBumpMap</a>(<a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n2">_Texture2</a>); +00882 } +00883 } +00884 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#b3">touch</a>(); +00885 } +00886 +00887 <font class="comment">//==========================================</font> +<a name="l00888"></a><a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#a6">00888</a> <font class="keywordtype">void</font> CPSMultiTexturedParticle::setMainTexOp(TOperator op) +00889 { +00890 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n0">_MainOp</a> = op; +00891 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n0">_MainOp</a> == <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#s5s3">EnvBumpMap</a>) +00892 { +00893 <a class="code" href="namespaceNL3D.html#a437">ConvertToBumpMap</a>(<a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n2">_Texture2</a>); +00894 } +00895 <font class="keywordflow">else</font> +00896 { +00897 <a class="code" href="namespaceNL3D.html#a438">ConvertFromBumpMap</a>(<a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n2">_Texture2</a>); +00898 } +00899 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#b3">touch</a>(); +00900 } +00901 +00902 <font class="comment">//==========================================</font> +<a name="l00903"></a><a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#a13">00903</a> <font class="keywordtype">void</font> CPSMultiTexturedParticle::setAlternateTexOp(TOperator op) +00904 { +00905 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n1">_AlternateOp</a> = op; +00906 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n1">_AlternateOp</a> == <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#s5s3">EnvBumpMap</a>) +00907 { +00908 <a class="code" href="namespaceNL3D.html#a437">ConvertToBumpMap</a>(<a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n3">_AlternateTexture2</a>); +00909 } +00910 <font class="keywordflow">else</font> +00911 { +00912 <a class="code" href="namespaceNL3D.html#a438">ConvertFromBumpMap</a>(<a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n3">_AlternateTexture2</a>); +00913 } +00914 <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#b3">touch</a>(); +00915 } +00916 +00917 +00918 +00919 <font class="comment">//==========================================</font> +<a name="l00920"></a><a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#a21">00920</a> <font class="keywordtype">void</font> CPSMultiTexturedParticle::setUseLocalDate(<font class="keywordtype">bool</font> use) +00921 { +00922 <font class="keywordflow">if</font> (use) <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n6">_MultiTexState</a> |= <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#t8t6">ScrollUseLocalDate</a>; +00923 <font class="keywordflow">else</font> <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n6">_MultiTexState</a> &= ~ ScrollUseLocalDate; +00924 } +00925 +00926 +00927 <font class="comment">//==========================================</font> +<a name="l00928"></a><a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#a23">00928</a> <font class="keywordtype">void</font> CPSMultiTexturedParticle::setUseLocalDateAlt(<font class="keywordtype">bool</font> use) +00929 { +00930 <font class="keywordflow">if</font> (use) <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n6">_MultiTexState</a> |= <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#t8t7">ScrollUseLocalDateAlternate</a>; +00931 <font class="keywordflow">else</font> <a class="code" href="classNL3D_1_1CPSMultiTexturedParticle.html#n6">_MultiTexState</a> &= ~ ScrollUseLocalDateAlternate; +00932 } +00933 +00934 } <font class="comment">// NL3D</font> +00935 +00936 +00937 +00938 +00939 +</pre></div> + +<!-- footer --> +<BR><FONT Size=+5> </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> |