diff options
author | neodarz <neodarz@neodarz.net> | 2018-08-11 20:21:34 +0200 |
---|---|---|
committer | neodarz <neodarz@neodarz.net> | 2018-08-11 20:21:34 +0200 |
commit | 0ea5fc66924303d1bf73ba283a383e2aadee02f2 (patch) | |
tree | 2568e71a7ccc44ec23b8bb3f0ff97fb6bf2ed709 /docs/doxygen/nel/lod__character__builder_8cpp-source.html | |
download | nevrax-website-self-hostable-0ea5fc66924303d1bf73ba283a383e2aadee02f2.tar.xz nevrax-website-self-hostable-0ea5fc66924303d1bf73ba283a383e2aadee02f2.zip |
Initial commit
Diffstat (limited to 'docs/doxygen/nel/lod__character__builder_8cpp-source.html')
-rw-r--r-- | docs/doxygen/nel/lod__character__builder_8cpp-source.html | 313 |
1 files changed, 313 insertions, 0 deletions
diff --git a/docs/doxygen/nel/lod__character__builder_8cpp-source.html b/docs/doxygen/nel/lod__character__builder_8cpp-source.html new file mode 100644 index 00000000..edc0e0dd --- /dev/null +++ b/docs/doxygen/nel/lod__character__builder_8cpp-source.html @@ -0,0 +1,313 @@ +<!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>lod_character_builder.cpp</h1><a href="lod__character__builder_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 +00007 <font class="comment">/* Copyright, 2000-2002 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="debug_8h.html">nel/misc/debug.h</a>"</font> +00029 <font class="preprocessor">#include "<a class="code" href="lod__character__builder_8h.html">3d/lod_character_builder.h</a>"</font> +00030 <font class="preprocessor">#include "<a class="code" href="scene_8h.html">3d/scene.h</a>"</font> +00031 <font class="preprocessor">#include "<a class="code" href="skeleton__shape_8h.html">3d/skeleton_shape.h</a>"</font> +00032 <font class="preprocessor">#include "<a class="code" href="mesh_8h.html">3d/mesh.h</a>"</font> +00033 <font class="preprocessor">#include "<a class="code" href="skeleton__model_8h.html">3d/skeleton_model.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> +<a name="l00045"></a><a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#a0">00045</a> CLodCharacterBuilder::CLodCharacterBuilder() +00046 { +00047 <a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o1">_SkeletonShape</a>= NULL; +00048 <a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o2">_LodBuild</a>= NULL; +00049 <a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o4">_TmpScene</a>= NULL; +00050 } +00051 <font class="comment">// ***************************************************************************</font> +<a name="l00052"></a><a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#a1">00052</a> CLodCharacterBuilder::~CLodCharacterBuilder() +00053 { +00054 <font class="comment">// release the scene</font> +00055 <font class="keywordflow">if</font>(_TmpScene) +00056 { +00057 <a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o4">_TmpScene</a>->release(); +00058 <font class="keyword">delete</font> <a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o4">_TmpScene</a>; +00059 <a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o4">_TmpScene</a>= NULL; +00060 } +00061 } +00062 +00063 <font class="comment">// ***************************************************************************</font> +<a name="l00064"></a><a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#a2">00064</a> <font class="keywordtype">void</font> CLodCharacterBuilder::setShape(<font class="keyword">const</font> std::string &name, CSkeletonShape *skeletonShape, CLodCharacterShapeBuild *lodBuild) +00065 { +00066 <a class="code" href="debug_8h.html#a6">nlassert</a>(skeletonShape); +00067 <a class="code" href="debug_8h.html#a6">nlassert</a>(lodBuild); +00068 +00069 <font class="comment">// SmartPtr the skeleton Shape (NB: important because skeletonModel use it)</font> +00070 <a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o1">_SkeletonShape</a>= skeletonShape; +00071 <font class="comment">// a std ptr.</font> +00072 <a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o2">_LodBuild</a>= lodBuild; +00073 +00074 <font class="comment">// Remap bone, with help of lodBuild and skeleton names.</font> +00075 <a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o3">_BoneRemap</a>.resize(lodBuild->BonesNames.size()); +00076 <font class="keywordflow">for</font>(uint i=0; i<<a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o3">_BoneRemap</a>.size(); i++) +00077 { +00078 <font class="keyword">const</font> std::string &boneName= lodBuild->BonesNames[i]; +00079 sint32 boneId= <a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o1">_SkeletonShape</a>->getBoneIdByName(boneName); +00080 <font class="comment">// If not found</font> +00081 <font class="keywordflow">if</font>(boneId<0) +00082 { +00083 <a class="code" href="debug_8h.html#a2">nlwarning</a>(<font class="stringliteral">"Not found a bone in the skeleton Shape: %s"</font>, boneName.c_str()); +00084 <font class="comment">// use root bone.</font> +00085 <a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o3">_BoneRemap</a>[i]= 0; +00086 } +00087 <font class="keywordflow">else</font> +00088 <font class="comment">// remap</font> +00089 <a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o3">_BoneRemap</a>[i]= boneId; +00090 } +00091 +00092 <font class="comment">// build basics</font> +00093 <a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o0">_LodCharacterShape</a>.buildMesh(name, *<a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o2">_LodBuild</a>); +00094 +00095 <font class="comment">// Build a scene, for addAnim purpose</font> +00096 <font class="keywordflow">if</font>(!<a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o4">_TmpScene</a>) +00097 { +00098 <a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o4">_TmpScene</a>= <font class="keyword">new</font> CScene; +00099 <font class="comment">// Must init Statics for scene (because use it in addAnim). NB: never mind if done twice.</font> +00100 CScene::registerBasics(); +00101 <font class="comment">// init scene travs</font> +00102 <a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o4">_TmpScene</a>->initDefaultTravs(); +00103 <font class="comment">// Don't add any user trav.</font> +00104 <font class="comment">// init default Roots.</font> +00105 <a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o4">_TmpScene</a>->initDefaultRoots(); +00106 <font class="comment">// Don't Set driver/viewport</font> +00107 <font class="comment">// Init the world instance group</font> +00108 <a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o4">_TmpScene</a>->initGlobalnstanceGroup(); +00109 <font class="comment">// Init coarse mesh manager</font> +00110 <a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o4">_TmpScene</a>->initCoarseMeshManager (); +00111 <font class="comment">// init QuadGridClipManager</font> +00112 <a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o4">_TmpScene</a>->initQuadGridClipManager (); +00113 } +00114 } +00115 +00116 +00117 <font class="comment">// ***************************************************************************</font> +<a name="l00118"></a><a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#a3">00118</a> <font class="keywordtype">void</font> CLodCharacterBuilder::addAnim(<font class="keyword">const</font> <font class="keywordtype">char</font> *animName, CAnimation *animation, <font class="keywordtype">float</font> frameRate) +00119 { +00120 <a class="code" href="debug_8h.html#a6">nlassert</a>(frameRate>0); +00121 <a class="code" href="debug_8h.html#a6">nlassert</a>(animation); +00122 +00123 <font class="comment">/* Create a Scene, a skeletonModel, an animation set, and a channel mixer to play the animation</font> +00124 <font class="comment"> NB: no render is made and no driver is created. The scene is just here for correct creation of the skeleton</font> +00125 <font class="comment"> Yoyo: This is a tricky way, but I found it the easier one...</font> +00126 <font class="comment"> */</font> +00127 +00128 <font class="comment">// Create Components necesssary to play the animation</font> +00129 <font class="comment">//==========================</font> +00130 +00131 <font class="comment">// create an animationSet, and a channelMixer.</font> +00132 <font class="comment">//--------------</font> +00133 <font class="comment">// build an animation set with the only one animation. This animation will be deleted with the animationSet</font> +00134 CAnimationSet *tmpAnimationSet= <font class="keyword">new</font> CAnimationSet; +00135 tmpAnimationSet->addAnimation(animName, animation); +00136 tmpAnimationSet->build(); +00137 <font class="comment">// Build a channelMixer.</font> +00138 CChannelMixer *tmpChannelMixer= <font class="keyword">new</font> CChannelMixer; +00139 tmpChannelMixer->setAnimationSet(tmpAnimationSet); +00140 +00141 +00142 <font class="comment">// create a skeleton Model for animation</font> +00143 <font class="comment">//---------------</font> +00144 CSkeletonModel *skeleton= (CSkeletonModel*)<a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o1">_SkeletonShape</a>->createInstance(*<a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o4">_TmpScene</a>); +00145 <font class="comment">// and skeleton it with animation</font> +00146 skeleton->registerToChannelMixer(tmpChannelMixer, <font class="stringliteral">""</font>); +00147 <font class="comment">// activate the anim</font> +00148 uint animID = tmpAnimationSet->getAnimationIdByName(animName); +00149 <a class="code" href="debug_8h.html#a6">nlassert</a>(animID != CAnimationSet::NotFound); +00150 tmpChannelMixer->setSlotAnimation(0, animID); +00151 +00152 +00153 <font class="comment">// Build Dst Animation basics.</font> +00154 <font class="comment">//--------------</font> +00155 CLodCharacterShape::CAnimBuild dstAnim; +00156 dstAnim.Name= animName; +00157 dstAnim.AnimLength= animation->getEndTime(); +00158 dstAnim.NumKeys= (uint)ceil(dstAnim.AnimLength * frameRate); +00159 dstAnim.NumKeys= max(1U, dstAnim.NumKeys); +00160 <font class="comment">// resize array.</font> +00161 dstAnim.Keys.resize(<a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o0">_LodCharacterShape</a>.getNumVertices() * dstAnim.NumKeys); +00162 +00163 +00164 <font class="comment">// Bake the animation</font> +00165 <font class="comment">//==========================</font> +00166 <font class="keywordtype">double</font> time=0; +00167 <font class="keywordtype">double</font> dt= 1.0/(double)frameRate; +00168 uint64 evalDetaiDate= 0; +00169 <font class="keywordflow">for</font>(uint i=0; i<dstAnim.NumKeys; i++, time+= dt) +00170 { +00171 <font class="comment">// clamp the time</font> +00172 time= <a class="code" href="bit__set_8cpp.html#a0">min</a>(time, (<font class="keywordtype">double</font>)dstAnim.AnimLength); +00173 +00174 <font class="comment">// setup the channelMixer time</font> +00175 tmpChannelMixer->setSlotTime(0, (<font class="keywordtype">float</font>)time); +00176 +00177 <font class="comment">// Eval the channelMixer, both global and detail</font> +00178 tmpChannelMixer->eval(<font class="keyword">false</font>); +00179 tmpChannelMixer->eval(<font class="keyword">true</font>, evalDetaiDate++); +00180 +00181 <font class="comment">// Use the skeleton model to compute bone skin matrix, supposing an identity skeleton worldMatrix</font> +00182 skeleton->computeAllBones(CMatrix::Identity); +00183 +00184 <font class="comment">// apply the skinning from the current skeleton state</font> +00185 <a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#c0">applySkin</a>(skeleton, &dstAnim.Keys[i*<a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o0">_LodCharacterShape</a>.getNumVertices()]); +00186 } +00187 +00188 +00189 <font class="comment">// Add the animation to the lod</font> +00190 <font class="comment">//==========================</font> +00191 <a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o0">_LodCharacterShape</a>.addAnim(dstAnim); +00192 +00193 +00194 <font class="comment">// Delete</font> +00195 <font class="comment">//==========================</font> +00196 <font class="comment">// release the skeleton</font> +00197 <a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o4">_TmpScene</a>->deleteModel(skeleton); +00198 <font class="comment">// delete the channelMixer</font> +00199 <font class="keyword">delete</font> tmpChannelMixer; +00200 <font class="comment">// delete the animationSet</font> +00201 <font class="keyword">delete</font> tmpAnimationSet; +00202 } +00203 +00204 +00205 <font class="comment">// ***************************************************************************</font> +<a name="l00206"></a><a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#c0">00206</a> <font class="keywordtype">void</font> CLodCharacterBuilder::applySkin(CSkeletonModel *skeleton, CVector *dstVertices) +00207 { +00208 uint numVerts= <a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o2">_LodBuild</a>->Vertices.size(); +00209 +00210 <font class="comment">// for all vertices.</font> +00211 <font class="keywordflow">for</font>(uint i=0; i<numVerts; i++) +00212 { +00213 CMesh::CSkinWeight &skinWgt= <a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o2">_LodBuild</a>->SkinWeights[i]; +00214 CVector &srcVert= <a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o2">_LodBuild</a>->Vertices[i]; +00215 CVector &dstVert= dstVertices[i]; +00216 dstVert= CVector::Null; +00217 <font class="comment">// parse all Weights, and add influence.</font> +00218 <font class="keywordflow">for</font>(uint j=0; j<<a class="code" href="mesh_8h.html#a0">NL3D_MESH_SKINNING_MAX_MATRIX</a>; j++) +00219 { +00220 <font class="keywordtype">float</font> wgt= skinWgt.Weights[j]; +00221 +00222 <font class="keywordflow">if</font>(wgt==0) +00223 { +00224 <font class="comment">// this should not happen, at least weight 0 should have an influence.</font> +00225 <font class="keywordflow">if</font>(j==0) +00226 dstVert= srcVert; +00227 <font class="comment">// no more influence for this vertex.</font> +00228 <font class="keywordflow">break</font>; +00229 } +00230 <font class="keywordflow">else</font> +00231 { +00232 <font class="comment">// Get the skeleton bone to read.</font> +00233 uint boneId= <a class="code" href="classNL3D_1_1CLodCharacterBuilder.html#o3">_BoneRemap</a>[skinWgt.MatrixId[j]]; +00234 <font class="comment">// Get the computed matrix from the skeleton.</font> +00235 <font class="keyword">const</font> CMatrix &boneMat= skeleton->Bones[boneId].getBoneSkinMatrix(); +00236 <font class="comment">// Add the influence of this bone.</font> +00237 dstVert+= (boneMat * srcVert) * wgt; +00238 } +00239 } +00240 } +00241 } +00242 +00243 +00244 } <font class="comment">// NL3D</font> +</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> |