Files
dl/document/html/dl__model__bone_8h_source.html
T
2026-09-16 14:07:40 +08:00

401 lines
80 KiB
HTML
Vendored
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.5"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>dl: dl/render/dl_model_bone.h 源文件</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">dl
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.9.5 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>首页</span></a></li>
<li><a href="pages.html"><span>相关页面</span></a></li>
<li><a href="namespaces.html"><span>命名空间</span></a></li>
<li><a href="annotated.html"><span></span></a></li>
<li class="current"><a href="files.html"><span>文件</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>文件列表</span></a></li>
<li><a href="globals.html"><span>文件成员</span></a></li>
</ul>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_17297ffb27ce571941f5fb5008f01a1f.html">dl</a></li><li class="navelem"><a class="el" href="dir_fb7736e1c74498e30aec54e277779486.html">render</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle"><div class="title">dl_model_bone.h</div></div>
</div><!--header-->
<div class="contents">
<a href="dl__model__bone_8h.html">浏览该文件的文档.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span> </div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#pragma once</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#include &quot;<a class="code" href="dl__stream__output_8h.html">memory/dl_stream_output.h</a>&quot;</span></div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#include &quot;<a class="code" href="dl__stream__input_8h.html">memory/dl_stream_input.h</a>&quot;</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#include &quot;<a class="code" href="dl__matrix_8h.html">math/dl_matrix.h</a>&quot;</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedl.html">dl</a></div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span>{</div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"><a class="line" href="structdl_1_1_bone_key_frame.html"> 24</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structdl_1_1_bone_key_frame.html">BoneKeyFrame</a></div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span>{</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"><a class="line" href="structdl_1_1_bone_key_frame.html#aa8fcaabd43e83a4786313744789781a3"> 26</a></span> <a class="code hl_function" href="structdl_1_1_bone_key_frame.html#aa8fcaabd43e83a4786313744789781a3">BoneKeyFrame</a>() :</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <a class="code hl_variable" href="structdl_1_1_bone_key_frame.html#a6ebf328db2659ee38d40e5c223a2d17d">_t</a>(-1.0f),<span class="comment">//负数代表无效</span></div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <a class="code hl_variable" href="structdl_1_1_bone_key_frame.html#a0223b91ac7a656073730d79fff499539">_translation</a>{},</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> <a class="code hl_variable" href="structdl_1_1_bone_key_frame.html#a34004b0331822f584c476aea35cddb37">_roationQuat</a>{ 1.0f, 0.0f, 0.0f, 0.0f },</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <a class="code hl_variable" href="structdl_1_1_bone_key_frame.html#aa6a284093b73e5d2ad26eccf09bc6c7e">_scaling</a>{ 1.0f, 1.0f, 1.0f }</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> {}</div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> </div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"><a class="line" href="structdl_1_1_bone_key_frame.html#a6ebf328db2659ee38d40e5c223a2d17d"> 33</a></span> <a class="code hl_typedef" href="namespacedl.html#ac6695b7cb8160d2c472d5b179d48edef">FloatTime</a> <a class="code hl_variable" href="structdl_1_1_bone_key_frame.html#a6ebf328db2659ee38d40e5c223a2d17d">_t</a>;</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"><a class="line" href="structdl_1_1_bone_key_frame.html#a0223b91ac7a656073730d79fff499539"> 34</a></span> <a class="code hl_typedef" href="namespacedl.html#a7d07deda01ae45d04f3323a4e6445e51">Position3</a> <a class="code hl_variable" href="structdl_1_1_bone_key_frame.html#a0223b91ac7a656073730d79fff499539">_translation</a>;</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="structdl_1_1_bone_key_frame.html#a34004b0331822f584c476aea35cddb37"> 35</a></span> <a class="code hl_typedef" href="namespacedl.html#aa36525eecbb6603a7ae4a63340c205f9">Position4</a> <a class="code hl_variable" href="structdl_1_1_bone_key_frame.html#a34004b0331822f584c476aea35cddb37">_roationQuat</a>;</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"><a class="line" href="structdl_1_1_bone_key_frame.html#aa6a284093b73e5d2ad26eccf09bc6c7e"> 36</a></span> <a class="code hl_typedef" href="namespacedl.html#a7d07deda01ae45d04f3323a4e6445e51">Position3</a> <a class="code hl_variable" href="structdl_1_1_bone_key_frame.html#aa6a284093b73e5d2ad26eccf09bc6c7e">_scaling</a>;</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span>};</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> </div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="structdl_1_1_bone_key_frame_multi.html"> 41</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structdl_1_1_bone_key_frame_multi.html">BoneKeyFrameMulti</a></div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span>{</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <span class="comment">//关键帧插值</span></div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="structdl_1_1_bone_key_frame_multi.html#a801246ec1817cdac700af5c2f2d7439b"> 44</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="structdl_1_1_bone_key_frame_multi.html#a801246ec1817cdac700af5c2f2d7439b">Interpolate</a>(<a class="code hl_typedef" href="namespacedl.html#ac6695b7cb8160d2c472d5b179d48edef">FloatTime</a> t, <a class="code hl_class" href="classdl_1_1_matrix.html">Matrix4</a>&amp; mat)</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> {</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="comment">//没有关键帧直接返回(保持不变)</span></div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="structdl_1_1_bone_key_frame_multi.html#aed1a920d3b0c7af65182fcb8471eaa01">_allKeyFrame</a>.empty())</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="comment">//变换顺序为SRT</span></div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> mat.<a class="code hl_function" href="classdl_1_1_matrix.html#af7f569fd33da93293d982663e0b319b4">Identity</a>();</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">if</span> (t &lt;= <a class="code hl_variable" href="structdl_1_1_bone_key_frame_multi.html#aed1a920d3b0c7af65182fcb8471eaa01">_allKeyFrame</a>.front()._t)</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> {</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <a class="code hl_struct" href="structdl_1_1_bone_key_frame.html">BoneKeyFrame</a>&amp; key_frame = <a class="code hl_variable" href="structdl_1_1_bone_key_frame_multi.html#aed1a920d3b0c7af65182fcb8471eaa01">_allKeyFrame</a>.front();</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <a class="code hl_class" href="classdl_1_1_matrix.html">Matrix4</a> mat_t = <a class="code hl_function" href="namespacedl_1_1_mat.html#a518b7d5cabf8a0cd7a04c2ed49c706cf">Mat::CreateTranslation</a>(key_frame.<a class="code hl_variable" href="structdl_1_1_bone_key_frame.html#a0223b91ac7a656073730d79fff499539">_translation</a>);</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <a class="code hl_class" href="classdl_1_1_matrix.html">Matrix4</a> mat_r = <a class="code hl_function" href="namespacedl_1_1_mat.html#a11f384dbeee6ee2c282d8eaab3e74873">Mat::CreateRotation</a>(key_frame.<a class="code hl_variable" href="structdl_1_1_bone_key_frame.html#a34004b0331822f584c476aea35cddb37">_roationQuat</a>);</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <a class="code hl_class" href="classdl_1_1_matrix.html">Matrix4</a> mat_s = <a class="code hl_function" href="namespacedl_1_1_mat.html#aaf966c66eaa955411ca63f74be079c87">Mat::CreateScaling</a>(key_frame.<a class="code hl_variable" href="structdl_1_1_bone_key_frame.html#aa6a284093b73e5d2ad26eccf09bc6c7e">_scaling</a>);</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> mat = mat_t * mat_r * mat_s;</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> }</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (t &gt;= <a class="code hl_variable" href="structdl_1_1_bone_key_frame_multi.html#aed1a920d3b0c7af65182fcb8471eaa01">_allKeyFrame</a>.back()._t)</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> {</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <a class="code hl_struct" href="structdl_1_1_bone_key_frame.html">BoneKeyFrame</a>&amp; key_frame = <a class="code hl_variable" href="structdl_1_1_bone_key_frame_multi.html#aed1a920d3b0c7af65182fcb8471eaa01">_allKeyFrame</a>.back();</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <a class="code hl_class" href="classdl_1_1_matrix.html">Matrix4</a> mat_t = <a class="code hl_function" href="namespacedl_1_1_mat.html#a518b7d5cabf8a0cd7a04c2ed49c706cf">Mat::CreateTranslation</a>(key_frame.<a class="code hl_variable" href="structdl_1_1_bone_key_frame.html#a0223b91ac7a656073730d79fff499539">_translation</a>);</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <a class="code hl_class" href="classdl_1_1_matrix.html">Matrix4</a> mat_r = <a class="code hl_function" href="namespacedl_1_1_mat.html#a11f384dbeee6ee2c282d8eaab3e74873">Mat::CreateRotation</a>(key_frame.<a class="code hl_variable" href="structdl_1_1_bone_key_frame.html#a34004b0331822f584c476aea35cddb37">_roationQuat</a>);</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <a class="code hl_class" href="classdl_1_1_matrix.html">Matrix4</a> mat_s = <a class="code hl_function" href="namespacedl_1_1_mat.html#aaf966c66eaa955411ca63f74be079c87">Mat::CreateScaling</a>(key_frame.<a class="code hl_variable" href="structdl_1_1_bone_key_frame.html#aa6a284093b73e5d2ad26eccf09bc6c7e">_scaling</a>);</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> mat = mat_t * mat_r * mat_s;</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> }</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> {</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; <a class="code hl_variable" href="structdl_1_1_bone_key_frame_multi.html#aed1a920d3b0c7af65182fcb8471eaa01">_allKeyFrame</a>.size() - 1; ++i)</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> {<span class="comment">//[0, n-1)</span></div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <a class="code hl_struct" href="structdl_1_1_bone_key_frame.html">BoneKeyFrame</a>&amp; kf_0 = <a class="code hl_variable" href="structdl_1_1_bone_key_frame_multi.html#aed1a920d3b0c7af65182fcb8471eaa01">_allKeyFrame</a>[i];</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <a class="code hl_struct" href="structdl_1_1_bone_key_frame.html">BoneKeyFrame</a>&amp; kf_1 = <a class="code hl_variable" href="structdl_1_1_bone_key_frame_multi.html#aed1a920d3b0c7af65182fcb8471eaa01">_allKeyFrame</a>[i + 1];</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="comment">//找到时间范围内</span></div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">if</span> (t &gt;= kf_0.<a class="code hl_variable" href="structdl_1_1_bone_key_frame.html#a6ebf328db2659ee38d40e5c223a2d17d">_t</a> &amp;&amp; t &lt;= kf_1.<a class="code hl_variable" href="structdl_1_1_bone_key_frame.html#a6ebf328db2659ee38d40e5c223a2d17d">_t</a>)</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> {</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <a class="code hl_typedef" href="namespacedl.html#ac6695b7cb8160d2c472d5b179d48edef">FloatTime</a> percent = (t - kf_0.<a class="code hl_variable" href="structdl_1_1_bone_key_frame.html#a6ebf328db2659ee38d40e5c223a2d17d">_t</a>) / (kf_1.<a class="code hl_variable" href="structdl_1_1_bone_key_frame.html#a6ebf328db2659ee38d40e5c223a2d17d">_t</a> - kf_0.<a class="code hl_variable" href="structdl_1_1_bone_key_frame.html#a6ebf328db2659ee38d40e5c223a2d17d">_t</a>);</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> </div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <a class="code hl_typedef" href="namespacedl.html#a7d07deda01ae45d04f3323a4e6445e51">Position3</a> t = <a class="code hl_function" href="namespacedl_1_1_each.html#a70ebcccd1d7b1c9f14c2b4628a7c388c">Each::Lerp</a>(kf_0.<a class="code hl_variable" href="structdl_1_1_bone_key_frame.html#a0223b91ac7a656073730d79fff499539">_translation</a>, kf_1.<a class="code hl_variable" href="structdl_1_1_bone_key_frame.html#a0223b91ac7a656073730d79fff499539">_translation</a>, percent);</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <a class="code hl_typedef" href="namespacedl.html#aa36525eecbb6603a7ae4a63340c205f9">Position4</a> r = <a class="code hl_function" href="namespacedl_1_1_math.html#a6b4a57c034f58c7ba26105da97b21d22">Math::Slerp</a>(kf_0.<a class="code hl_variable" href="structdl_1_1_bone_key_frame.html#a34004b0331822f584c476aea35cddb37">_roationQuat</a>, kf_1.<a class="code hl_variable" href="structdl_1_1_bone_key_frame.html#a34004b0331822f584c476aea35cddb37">_roationQuat</a>, percent);</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <a class="code hl_typedef" href="namespacedl.html#a7d07deda01ae45d04f3323a4e6445e51">Position3</a> s = <a class="code hl_function" href="namespacedl_1_1_each.html#a70ebcccd1d7b1c9f14c2b4628a7c388c">Each::Lerp</a>(kf_0.<a class="code hl_variable" href="structdl_1_1_bone_key_frame.html#aa6a284093b73e5d2ad26eccf09bc6c7e">_scaling</a>, kf_1.<a class="code hl_variable" href="structdl_1_1_bone_key_frame.html#aa6a284093b73e5d2ad26eccf09bc6c7e">_scaling</a>, percent);</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <a class="code hl_class" href="classdl_1_1_matrix.html">Matrix4</a> mat_t = <a class="code hl_function" href="namespacedl_1_1_mat.html#a518b7d5cabf8a0cd7a04c2ed49c706cf">Mat::CreateTranslation</a>(t);</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <a class="code hl_class" href="classdl_1_1_matrix.html">Matrix4</a> mat_r = <a class="code hl_function" href="namespacedl_1_1_mat.html#a11f384dbeee6ee2c282d8eaab3e74873">Mat::CreateRotation</a>(r);</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <a class="code hl_class" href="classdl_1_1_matrix.html">Matrix4</a> mat_s = <a class="code hl_function" href="namespacedl_1_1_mat.html#aaf966c66eaa955411ca63f74be079c87">Mat::CreateScaling</a>(s);</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> mat = mat_t * mat_r * mat_s;</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> }</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> }</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> }</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> }</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> </div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"><a class="line" href="structdl_1_1_bone_key_frame_multi.html#aed1a920d3b0c7af65182fcb8471eaa01"> 93</a></span> std::vector&lt;BoneKeyFrame&gt; <a class="code hl_variable" href="structdl_1_1_bone_key_frame_multi.html#aed1a920d3b0c7af65182fcb8471eaa01">_allKeyFrame</a>;</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span>};</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"><a class="line" href="structdl_1_1_animation_clip.html"> 96</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structdl_1_1_animation_clip.html">AnimationClip</a></div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span>{</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"><a class="line" href="structdl_1_1_animation_clip.html#a7c02850896940e32292373ce6929db9c"> 98</a></span> <a class="code hl_typedef" href="namespacedl.html#ac6695b7cb8160d2c472d5b179d48edef">FloatTime</a> <a class="code hl_variable" href="structdl_1_1_animation_clip.html#a7c02850896940e32292373ce6929db9c">_t0</a>;</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"><a class="line" href="structdl_1_1_animation_clip.html#a2dd82cacacb157a1ea804b85d665afbc"> 99</a></span> <a class="code hl_typedef" href="namespacedl.html#ac6695b7cb8160d2c472d5b179d48edef">FloatTime</a> <a class="code hl_variable" href="structdl_1_1_animation_clip.html#a2dd82cacacb157a1ea804b85d665afbc">_t1</a>;</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"><a class="line" href="structdl_1_1_animation_clip.html#a7ec6e2919f7ea3882678f635e26b2d81"> 100</a></span> std::vector&lt;BoneKeyFrameMulti&gt; <a class="code hl_variable" href="structdl_1_1_animation_clip.html#a7ec6e2919f7ea3882678f635e26b2d81">_allBoneKeyFrameMulti</a>;</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"><a class="line" href="structdl_1_1_animation_clip.html#ad3fc7b60d84211960584820a4500433d"> 102</a></span> <a class="code hl_typedef" href="namespacedl.html#ac6695b7cb8160d2c472d5b179d48edef">FloatTime</a> <a class="code hl_function" href="structdl_1_1_animation_clip.html#ad3fc7b60d84211960584820a4500433d">GetClipEndTime</a>()</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> {</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="structdl_1_1_animation_clip.html#a2dd82cacacb157a1ea804b85d665afbc">_t1</a>;</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> }</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="comment">//插值</span></div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"><a class="line" href="structdl_1_1_animation_clip.html#a99fc3cd88921da8766228f5a8215cba7"> 107</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="structdl_1_1_animation_clip.html#a99fc3cd88921da8766228f5a8215cba7">Interpolate</a>(<a class="code hl_typedef" href="namespacedl.html#ac6695b7cb8160d2c472d5b179d48edef">FloatTime</a> t, std::vector&lt;Matrix4&gt;&amp; bone_trans)</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> {</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; <a class="code hl_variable" href="structdl_1_1_animation_clip.html#a7ec6e2919f7ea3882678f635e26b2d81">_allBoneKeyFrameMulti</a>.size(); ++i)</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> {</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <a class="code hl_variable" href="structdl_1_1_animation_clip.html#a7ec6e2919f7ea3882678f635e26b2d81">_allBoneKeyFrameMulti</a>[i].Interpolate(t, bone_trans[i]);</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> }</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> }</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span>};</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> </div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"><a class="line" href="classdl_1_1_bone_data.html"> 117</a></span><span class="keyword">class </span><a class="code hl_class" href="classdl_1_1_bone_data.html">BoneData</a></div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span>{</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"><a class="line" href="classdl_1_1_bone_data.html#ac22dade55c1e8f81ea3e0892cd321190"> 119</a></span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_class" href="classdl_1_1_model_loader.html">ModelLoader</a>;</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"><a class="line" href="classdl_1_1_bone_data.html#aaa5a5a1296341d5d91f60f4d9fde2d1c"> 120</a></span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_class" href="classdl_1_1_factory_imp.html">FactoryImp</a>;</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"><a class="line" href="classdl_1_1_bone_data.html#a13aa30a584ab529661b4f1c2227f6b29"> 121</a></span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_class" href="classdl_1_1_bone_animation.html">BoneAnimation</a>;</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"><a class="line" href="classdl_1_1_bone_data.html#ae4af50bf1743d112cb2c2c784bea21c8"> 122</a></span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_class" href="classdl_1_1_actor.html">Actor</a>;</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="comment">//偏移矩阵先初始化</span></div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"><a class="line" href="classdl_1_1_bone_data.html#a1d9d699da21fb5ecb74d9e2ba0a68b6f"> 125</a></span> <span class="keywordtype">size_t</span> <a class="code hl_function" href="classdl_1_1_bone_data.html#a1d9d699da21fb5ecb74d9e2ba0a68b6f">GetBoneSize</a>() { <span class="keywordflow">return</span> _allBoneOffset.size(); }</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"><a class="line" href="classdl_1_1_bone_data.html#a190ded21078de0629145e66eb1f12df4"> 126</a></span> <a class="code hl_typedef" href="namespacedl.html#ac6695b7cb8160d2c472d5b179d48edef">FloatTime</a> <a class="code hl_function" href="classdl_1_1_bone_data.html#a190ded21078de0629145e66eb1f12df4">GetClipEndTime</a>(std::string_view cilp_name)</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> {</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="keyword">auto</span> clip = _allAnimation.find(std::string{ cilp_name });</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">return</span> clip-&gt;second.GetClipEndTime();</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> }</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="comment">//返回偏移矩阵(单位矩阵才是静止状态)</span></div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"><a class="line" href="classdl_1_1_bone_data.html#a69abda4bd9bcbb81d2f3e1ec74d6d3b3"> 132</a></span> std::vector&lt;Matrix4&gt; <a class="code hl_function" href="classdl_1_1_bone_data.html#a69abda4bd9bcbb81d2f3e1ec74d6d3b3">GetBoneOffset</a>()</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> {</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">return</span> _allBoneOffset;</div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> }</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> </div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="comment">//或许可以缓存常用时刻的变换</span></div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"><a class="line" href="classdl_1_1_bone_data.html#a0ef9a733a03e03899ae33f6491b55150"> 138</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classdl_1_1_bone_data.html#a0ef9a733a03e03899ae33f6491b55150">GetFinalTrans</a>(std::string_view clip_name, <a class="code hl_typedef" href="namespacedl.html#ac6695b7cb8160d2c472d5b179d48edef">FloatTime</a> t,</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> std::vector&lt;Matrix4&gt;&amp; final_trans)</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> {</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="comment">//偏移矩阵数量(骨骼数量)</span></div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keywordtype">size_t</span> num_bone = _allBoneOffset.size();</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="comment">//变换到父骨骼的矩阵</span></div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> std::vector&lt;Matrix4&gt; trans_to_parent = _allNodeTrans2Parent;</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> </div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="comment">//对指定动画进行插值</span></div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="keyword">auto</span> clip = _allAnimation.find(std::string{ clip_name });</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> clip-&gt;second.Interpolate(t, trans_to_parent);</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> </div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <span class="comment">//将骨骼变换到根空间</span></div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> std::vector&lt;Matrix4&gt; trans_to_root(num_bone);</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> </div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="comment">//计算trans_to_root</span></div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; num_bone; ++i)</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> {</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="comment">//父骨骼下标</span></div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="keywordtype">int</span> index_parent = _allNodeParent[i];</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">if</span>(index_parent == -1)<span class="comment">//指向-1为根骨骼,无需计算</span></div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> trans_to_root[i] = trans_to_parent[i];</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> {</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="comment">//自己到父</span></div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <a class="code hl_class" href="classdl_1_1_matrix.html">Matrix4</a>&amp; mat_to_parent = trans_to_parent[i];</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="comment">//父骨骼 到 根 的矩阵</span></div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <a class="code hl_class" href="classdl_1_1_matrix.html">Matrix4</a>&amp; parent_to_root = trans_to_root[index_parent];</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <span class="comment">//自己到根的矩阵 = 自己到父,再父到根</span></div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> trans_to_root[i] = parent_to_root * mat_to_parent;</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> }</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> }</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> </div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> <span class="comment">//计算最终矩阵</span></div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; num_bone; ++i)</div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> {</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <a class="code hl_class" href="classdl_1_1_matrix.html">Matrix4</a>&amp; mat_offset = _allBoneOffset[i];</div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <a class="code hl_class" href="classdl_1_1_matrix.html">Matrix4</a>&amp; mat_to_root = trans_to_root[i];</div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> final_trans[i] = mat_to_root * mat_offset;</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> }</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> }</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> </div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"><a class="line" href="classdl_1_1_bone_data.html#a15fcf236294d9f6b50c7914daa23aec5"> 180</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classdl_1_1_bone_data.html#a15fcf236294d9f6b50c7914daa23aec5">Save</a>(<a class="code hl_class" href="classdl_1_1_stream_output.html">StreamOutput</a>&amp; s)</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> {</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> s.<a class="code hl_function" href="classdl_1_1_stream_output.html#ad9ad1a7301369bbb69a9682034e84a88">Write</a>(&amp;_allNodeParent);</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> s.<a class="code hl_function" href="classdl_1_1_stream_output.html#ad9ad1a7301369bbb69a9682034e84a88">Write</a>(&amp;_allNodeTrans2Parent);</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> s.<a class="code hl_function" href="classdl_1_1_stream_output.html#ad9ad1a7301369bbb69a9682034e84a88">Write</a>(&amp;_allBoneOffset);</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> </div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="keywordtype">size_t</span> size = _allAnimation.size();</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> s.<a class="code hl_function" href="classdl_1_1_stream_output.html#ad9ad1a7301369bbb69a9682034e84a88">Write</a>(&amp;size);</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; iter : _allAnimation)</div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> {</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keyword">const</span> std::string&amp; name = iter.first;</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> <span class="keyword">const</span> <a class="code hl_struct" href="structdl_1_1_animation_clip.html">AnimationClip</a>&amp; clip = iter.second;</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> s.<a class="code hl_function" href="classdl_1_1_stream_output.html#ad9ad1a7301369bbb69a9682034e84a88">Write</a>(&amp;name);</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> s.<a class="code hl_function" href="classdl_1_1_stream_output.html#ad9ad1a7301369bbb69a9682034e84a88">Write</a>(&amp;clip.<a class="code hl_variable" href="structdl_1_1_animation_clip.html#a7c02850896940e32292373ce6929db9c">_t0</a>);</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> s.<a class="code hl_function" href="classdl_1_1_stream_output.html#ad9ad1a7301369bbb69a9682034e84a88">Write</a>(&amp;clip.<a class="code hl_variable" href="structdl_1_1_animation_clip.html#a2dd82cacacb157a1ea804b85d665afbc">_t1</a>);</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <span class="keywordtype">size_t</span> size1 = clip.<a class="code hl_variable" href="structdl_1_1_animation_clip.html#a7ec6e2919f7ea3882678f635e26b2d81">_allBoneKeyFrameMulti</a>.size();</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> s.<a class="code hl_function" href="classdl_1_1_stream_output.html#ad9ad1a7301369bbb69a9682034e84a88">Write</a>(&amp;size1);</div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; size1; ++i)</div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> {</div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keyword">const</span> <a class="code hl_struct" href="structdl_1_1_bone_key_frame_multi.html">BoneKeyFrameMulti</a>&amp; kf_mul = clip.<a class="code hl_variable" href="structdl_1_1_animation_clip.html#a7ec6e2919f7ea3882678f635e26b2d81">_allBoneKeyFrameMulti</a>[i];</div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="keywordtype">size_t</span> size2 = kf_mul.<a class="code hl_variable" href="structdl_1_1_bone_key_frame_multi.html#aed1a920d3b0c7af65182fcb8471eaa01">_allKeyFrame</a>.size();</div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> s.<a class="code hl_function" href="classdl_1_1_stream_output.html#ad9ad1a7301369bbb69a9682034e84a88">Write</a>(&amp;size2);</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = 0; j &lt; size2; ++j)</div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> {</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="keyword">const</span> <a class="code hl_struct" href="structdl_1_1_bone_key_frame.html">BoneKeyFrame</a>&amp; kf = kf_mul.<a class="code hl_variable" href="structdl_1_1_bone_key_frame_multi.html#aed1a920d3b0c7af65182fcb8471eaa01">_allKeyFrame</a>[j];</div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> s.<a class="code hl_function" href="classdl_1_1_stream_output.html#ad9ad1a7301369bbb69a9682034e84a88">Write</a>(&amp;kf);</div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> }</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> }</div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> }</div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> }</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"><a class="line" href="classdl_1_1_bone_data.html#aa44fb5c70757f9abadce29546bd6729b"> 210</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classdl_1_1_bone_data.html#aa44fb5c70757f9abadce29546bd6729b">Load</a>(<a class="code hl_class" href="classdl_1_1_stream_input.html">StreamInput</a>&amp; s)</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> {</div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> s.<a class="code hl_function" href="classdl_1_1_stream_input.html#a45078239838139420b8d25dcf412f642">Read</a>(&amp;_allNodeParent);</div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> s.<a class="code hl_function" href="classdl_1_1_stream_input.html#a45078239838139420b8d25dcf412f642">Read</a>(&amp;_allNodeTrans2Parent);</div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> s.<a class="code hl_function" href="classdl_1_1_stream_input.html#a45078239838139420b8d25dcf412f642">Read</a>(&amp;_allBoneOffset);</div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> </div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <span class="keywordtype">size_t</span> size;</div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> s.<a class="code hl_function" href="classdl_1_1_stream_input.html#a45078239838139420b8d25dcf412f642">Read</a>(&amp;size);</div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> k = 0; k &lt; size; ++k)</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> {</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> std::string name;</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> s.<a class="code hl_function" href="classdl_1_1_stream_input.html#a45078239838139420b8d25dcf412f642">Read</a>(&amp;name);</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <a class="code hl_struct" href="structdl_1_1_animation_clip.html">AnimationClip</a>&amp; clip = _allAnimation[name];</div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> s.<a class="code hl_function" href="classdl_1_1_stream_input.html#a45078239838139420b8d25dcf412f642">Read</a>(&amp;clip.<a class="code hl_variable" href="structdl_1_1_animation_clip.html#a7c02850896940e32292373ce6929db9c">_t0</a>);</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> s.<a class="code hl_function" href="classdl_1_1_stream_input.html#a45078239838139420b8d25dcf412f642">Read</a>(&amp;clip.<a class="code hl_variable" href="structdl_1_1_animation_clip.html#a2dd82cacacb157a1ea804b85d665afbc">_t1</a>);</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="keywordtype">size_t</span> size1;</div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> s.<a class="code hl_function" href="classdl_1_1_stream_input.html#a45078239838139420b8d25dcf412f642">Read</a>(&amp;size1);</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> clip.<a class="code hl_variable" href="structdl_1_1_animation_clip.html#a7ec6e2919f7ea3882678f635e26b2d81">_allBoneKeyFrameMulti</a>.resize(size1);</div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; size1; ++i)</div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> {</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> <a class="code hl_struct" href="structdl_1_1_bone_key_frame_multi.html">BoneKeyFrameMulti</a>&amp; kf_mul = clip.<a class="code hl_variable" href="structdl_1_1_animation_clip.html#a7ec6e2919f7ea3882678f635e26b2d81">_allBoneKeyFrameMulti</a>[i];</div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> <span class="keywordtype">size_t</span> size2;</div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> s.<a class="code hl_function" href="classdl_1_1_stream_input.html#a45078239838139420b8d25dcf412f642">Read</a>(&amp;size2);</div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> kf_mul.<a class="code hl_variable" href="structdl_1_1_bone_key_frame_multi.html#aed1a920d3b0c7af65182fcb8471eaa01">_allKeyFrame</a>.resize(size2);</div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = 0; j &lt; size2; ++j)</div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> {</div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> s.<a class="code hl_function" href="classdl_1_1_stream_input.html#a45078239838139420b8d25dcf412f642">Read</a>(&amp;kf_mul.<a class="code hl_variable" href="structdl_1_1_bone_key_frame_multi.html#aed1a920d3b0c7af65182fcb8471eaa01">_allKeyFrame</a>[j]);</div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> }</div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> }</div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> }</div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> }</div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span><span class="keyword">private</span>:</div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> std::vector&lt;int&gt; _allNodeParent;<span class="comment">//Node的父Node,下标为node_id</span></div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> std::vector&lt;Matrix4&gt; _allNodeTrans2Parent;<span class="comment">//Node到父Node的矩阵</span></div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> std::vector&lt;Matrix4&gt; _allBoneOffset;<span class="comment">//偏移矩阵</span></div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> std::unordered_map&lt;std::string, AnimationClip&gt; _allAnimation;<span class="comment">//动画片段</span></div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span>};</div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> </div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"><a class="line" href="classdl_1_1_bone_animation.html"> 249</a></span><span class="keyword">class </span><a class="code hl_class" href="classdl_1_1_bone_animation.html">BoneAnimation</a></div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span>{</div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"><a class="line" href="classdl_1_1_bone_animation.html#a861421ea53bb7fd831f55255bab52d1a"> 252</a></span> <a class="code hl_class" href="classdl_1_1_bone_data.html">BoneData</a>* <a class="code hl_variable" href="classdl_1_1_bone_animation.html#a861421ea53bb7fd831f55255bab52d1a">_skinndeData</a>;<span class="comment">//弱引用</span></div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"><a class="line" href="classdl_1_1_bone_animation.html#aadfa623a575148643682709eff3fdf61"> 253</a></span> std::vector&lt;Matrix4&gt; <a class="code hl_variable" href="classdl_1_1_bone_animation.html#aadfa623a575148643682709eff3fdf61">_finalTrans</a>;<span class="comment">//某时间点的最终变换</span></div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"><a class="line" href="classdl_1_1_bone_animation.html#ad9a429741098cfed4d37728f9075b92a"> 254</a></span> std::string <a class="code hl_variable" href="classdl_1_1_bone_animation.html#ad9a429741098cfed4d37728f9075b92a">_clipName</a>;<span class="comment">//当前动画名称</span></div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"><a class="line" href="classdl_1_1_bone_animation.html#a35099e8d4629d5ad12c7b31475df27e9"> 255</a></span> <a class="code hl_typedef" href="namespacedl.html#ac6695b7cb8160d2c472d5b179d48edef">FloatTime</a> <a class="code hl_variable" href="classdl_1_1_bone_animation.html#a35099e8d4629d5ad12c7b31475df27e9">_t</a>;<span class="comment">//时间点</span></div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"><a class="line" href="classdl_1_1_bone_animation.html#a642e84583945618f0714fb08ed98206a"> 256</a></span> <span class="keywordtype">size_t</span> <a class="code hl_variable" href="classdl_1_1_bone_animation.html#a642e84583945618f0714fb08ed98206a">_id</a>;<span class="comment">//骨骼实例下标(不是ub下标)</span></div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> </div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"><a class="line" href="classdl_1_1_bone_animation.html#a32cd45d77c9257d0f63f7f27e5270f99"> 258</a></span> <a class="code hl_function" href="classdl_1_1_bone_animation.html#a32cd45d77c9257d0f63f7f27e5270f99">BoneAnimation</a>() :</div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> <a class="code hl_variable" href="classdl_1_1_bone_animation.html#a861421ea53bb7fd831f55255bab52d1a">_skinndeData</a>{ nullptr },</div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> <a class="code hl_variable" href="classdl_1_1_bone_animation.html#a35099e8d4629d5ad12c7b31475df27e9">_t</a>{},</div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> <a class="code hl_variable" href="classdl_1_1_bone_animation.html#a642e84583945618f0714fb08ed98206a">_id</a>{(size_t)-1}</div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> {}</div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> </div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> <span class="comment">//t为-1代表 设为起始</span></div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"><a class="line" href="classdl_1_1_bone_animation.html#a722f5217acf68f7eb7a659e74520d71c"> 265</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classdl_1_1_bone_animation.html#a722f5217acf68f7eb7a659e74520d71c">Set</a>(std::string_view name, <a class="code hl_typedef" href="namespacedl.html#ac6695b7cb8160d2c472d5b179d48edef">FloatTime</a> t)</div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> {</div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> <span class="keyword">auto</span> iter = <a class="code hl_variable" href="classdl_1_1_bone_animation.html#a861421ea53bb7fd831f55255bab52d1a">_skinndeData</a>-&gt;_allAnimation.find(std::string{ name });</div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> <span class="keywordflow">if</span> (iter == <a class="code hl_variable" href="classdl_1_1_bone_animation.html#a861421ea53bb7fd831f55255bab52d1a">_skinndeData</a>-&gt;_allAnimation.end())</div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> {</div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> <a class="code hl_define" href="dl__log_8h.html#abc86a6b34614cb6484cdf935d9350abd">log_err</a>(<span class="stringliteral">&quot;指定动画不存在:{}&quot;</span>, name);</div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> }</div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> <a class="code hl_variable" href="classdl_1_1_bone_animation.html#ad9a429741098cfed4d37728f9075b92a">_clipName</a> = std::string{ name };</div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> <a class="code hl_struct" href="structdl_1_1_animation_clip.html">AnimationClip</a>&amp; clip = iter-&gt;second;</div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> <span class="keywordflow">if</span> (t &lt; 0)</div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <a class="code hl_variable" href="classdl_1_1_bone_animation.html#a35099e8d4629d5ad12c7b31475df27e9">_t</a> = clip.<a class="code hl_variable" href="structdl_1_1_animation_clip.html#a7c02850896940e32292373ce6929db9c">_t0</a>;</div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespacedl_1_1_math.html#a179e7cdae2c5e2721dcce18f539ba1dc">Math::IsOutRange</a>(t, clip.<a class="code hl_variable" href="structdl_1_1_animation_clip.html#a7c02850896940e32292373ce6929db9c">_t0</a>, clip.<a class="code hl_variable" href="structdl_1_1_animation_clip.html#a2dd82cacacb157a1ea804b85d665afbc">_t1</a>))</div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> {</div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> <a class="code hl_define" href="dl__log_8h.html#abc86a6b34614cb6484cdf935d9350abd">log_err</a>(<span class="stringliteral">&quot;设置动画时间越界:{}{}-&gt;{}&quot;</span>, t, clip.<a class="code hl_variable" href="structdl_1_1_animation_clip.html#a7c02850896940e32292373ce6929db9c">_t0</a>, clip.<a class="code hl_variable" href="structdl_1_1_animation_clip.html#a2dd82cacacb157a1ea804b85d665afbc">_t1</a>);</div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> <a class="code hl_variable" href="classdl_1_1_bone_animation.html#a35099e8d4629d5ad12c7b31475df27e9">_t</a> = clip.<a class="code hl_variable" href="structdl_1_1_animation_clip.html#a7c02850896940e32292373ce6929db9c">_t0</a>;</div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> }</div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> <a class="code hl_variable" href="classdl_1_1_bone_animation.html#a35099e8d4629d5ad12c7b31475df27e9">_t</a> = t;</div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> }</div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> </div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"><a class="line" href="classdl_1_1_bone_animation.html#a5c9b63224b807fc15b7a90d68095ed9b"> 287</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classdl_1_1_bone_animation.html#a5c9b63224b807fc15b7a90d68095ed9b">Update</a>(<a class="code hl_typedef" href="namespacedl.html#ac6695b7cb8160d2c472d5b179d48edef">FloatTime</a> dt)</div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> {</div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> <a class="code hl_variable" href="classdl_1_1_bone_animation.html#a35099e8d4629d5ad12c7b31475df27e9">_t</a> += dt;</div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classdl_1_1_bone_animation.html#a35099e8d4629d5ad12c7b31475df27e9">_t</a> &gt; <a class="code hl_variable" href="classdl_1_1_bone_animation.html#a861421ea53bb7fd831f55255bab52d1a">_skinndeData</a>-&gt;<a class="code hl_function" href="classdl_1_1_bone_data.html#a190ded21078de0629145e66eb1f12df4">GetClipEndTime</a>(<a class="code hl_variable" href="classdl_1_1_bone_animation.html#ad9a429741098cfed4d37728f9075b92a">_clipName</a>))</div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> <a class="code hl_variable" href="classdl_1_1_bone_animation.html#a35099e8d4629d5ad12c7b31475df27e9">_t</a> = 0;</div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> <span class="keywordflow">if</span>(<span class="keyword">true</span>)</div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> <a class="code hl_variable" href="classdl_1_1_bone_animation.html#a861421ea53bb7fd831f55255bab52d1a">_skinndeData</a>-&gt;<a class="code hl_function" href="classdl_1_1_bone_data.html#a0ef9a733a03e03899ae33f6491b55150">GetFinalTrans</a>(<a class="code hl_variable" href="classdl_1_1_bone_animation.html#ad9a429741098cfed4d37728f9075b92a">_clipName</a>, <a class="code hl_variable" href="classdl_1_1_bone_animation.html#a35099e8d4629d5ad12c7b31475df27e9">_t</a>, <a class="code hl_variable" href="classdl_1_1_bone_animation.html#aadfa623a575148643682709eff3fdf61">_finalTrans</a>);</div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> {</div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; iter : <a class="code hl_variable" href="classdl_1_1_bone_animation.html#aadfa623a575148643682709eff3fdf61">_finalTrans</a>)</div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> iter.Identity();</div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> }</div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> }</div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span>};</div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> </div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span>}</div>
<div class="ttc" id="aclassdl_1_1_actor_html"><div class="ttname"><a href="classdl_1_1_actor.html">dl::Actor</a></div><div class="ttdoc">3D绘图对象</div><div class="ttdef"><b>Definition:</b> <a href="dl__actor_8h_source.html#l00028">dl_actor.h:29</a></div></div>
<div class="ttc" id="aclassdl_1_1_bone_animation_html"><div class="ttname"><a href="classdl_1_1_bone_animation.html">dl::BoneAnimation</a></div><div class="ttdoc">骨骼动画实例</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00249">dl_model_bone.h:250</a></div></div>
<div class="ttc" id="aclassdl_1_1_bone_animation_html_a32cd45d77c9257d0f63f7f27e5270f99"><div class="ttname"><a href="classdl_1_1_bone_animation.html#a32cd45d77c9257d0f63f7f27e5270f99">dl::BoneAnimation::BoneAnimation</a></div><div class="ttdeci">BoneAnimation()</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00258">dl_model_bone.h:258</a></div></div>
<div class="ttc" id="aclassdl_1_1_bone_animation_html_a35099e8d4629d5ad12c7b31475df27e9"><div class="ttname"><a href="classdl_1_1_bone_animation.html#a35099e8d4629d5ad12c7b31475df27e9">dl::BoneAnimation::_t</a></div><div class="ttdeci">FloatTime _t</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00255">dl_model_bone.h:255</a></div></div>
<div class="ttc" id="aclassdl_1_1_bone_animation_html_a5c9b63224b807fc15b7a90d68095ed9b"><div class="ttname"><a href="classdl_1_1_bone_animation.html#a5c9b63224b807fc15b7a90d68095ed9b">dl::BoneAnimation::Update</a></div><div class="ttdeci">void Update(FloatTime dt)</div><div class="ttdoc">每帧调用,推进时间点进行插值</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00287">dl_model_bone.h:287</a></div></div>
<div class="ttc" id="aclassdl_1_1_bone_animation_html_a642e84583945618f0714fb08ed98206a"><div class="ttname"><a href="classdl_1_1_bone_animation.html#a642e84583945618f0714fb08ed98206a">dl::BoneAnimation::_id</a></div><div class="ttdeci">size_t _id</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00256">dl_model_bone.h:256</a></div></div>
<div class="ttc" id="aclassdl_1_1_bone_animation_html_a722f5217acf68f7eb7a659e74520d71c"><div class="ttname"><a href="classdl_1_1_bone_animation.html#a722f5217acf68f7eb7a659e74520d71c">dl::BoneAnimation::Set</a></div><div class="ttdeci">void Set(std::string_view name, FloatTime t)</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00265">dl_model_bone.h:265</a></div></div>
<div class="ttc" id="aclassdl_1_1_bone_animation_html_a861421ea53bb7fd831f55255bab52d1a"><div class="ttname"><a href="classdl_1_1_bone_animation.html#a861421ea53bb7fd831f55255bab52d1a">dl::BoneAnimation::_skinndeData</a></div><div class="ttdeci">BoneData * _skinndeData</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00252">dl_model_bone.h:252</a></div></div>
<div class="ttc" id="aclassdl_1_1_bone_animation_html_aadfa623a575148643682709eff3fdf61"><div class="ttname"><a href="classdl_1_1_bone_animation.html#aadfa623a575148643682709eff3fdf61">dl::BoneAnimation::_finalTrans</a></div><div class="ttdeci">std::vector&lt; Matrix4 &gt; _finalTrans</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00253">dl_model_bone.h:253</a></div></div>
<div class="ttc" id="aclassdl_1_1_bone_animation_html_ad9a429741098cfed4d37728f9075b92a"><div class="ttname"><a href="classdl_1_1_bone_animation.html#ad9a429741098cfed4d37728f9075b92a">dl::BoneAnimation::_clipName</a></div><div class="ttdeci">std::string _clipName</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00254">dl_model_bone.h:254</a></div></div>
<div class="ttc" id="aclassdl_1_1_bone_data_html"><div class="ttname"><a href="classdl_1_1_bone_data.html">dl::BoneData</a></div><div class="ttdoc">骨骼数据(多个骨骼)</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00117">dl_model_bone.h:118</a></div></div>
<div class="ttc" id="aclassdl_1_1_bone_data_html_a0ef9a733a03e03899ae33f6491b55150"><div class="ttname"><a href="classdl_1_1_bone_data.html#a0ef9a733a03e03899ae33f6491b55150">dl::BoneData::GetFinalTrans</a></div><div class="ttdeci">void GetFinalTrans(std::string_view clip_name, FloatTime t, std::vector&lt; Matrix4 &gt; &amp;final_trans)</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00138">dl_model_bone.h:138</a></div></div>
<div class="ttc" id="aclassdl_1_1_bone_data_html_a15fcf236294d9f6b50c7914daa23aec5"><div class="ttname"><a href="classdl_1_1_bone_data.html#a15fcf236294d9f6b50c7914daa23aec5">dl::BoneData::Save</a></div><div class="ttdeci">void Save(StreamOutput &amp;s)</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00180">dl_model_bone.h:180</a></div></div>
<div class="ttc" id="aclassdl_1_1_bone_data_html_a190ded21078de0629145e66eb1f12df4"><div class="ttname"><a href="classdl_1_1_bone_data.html#a190ded21078de0629145e66eb1f12df4">dl::BoneData::GetClipEndTime</a></div><div class="ttdeci">FloatTime GetClipEndTime(std::string_view cilp_name)</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00126">dl_model_bone.h:126</a></div></div>
<div class="ttc" id="aclassdl_1_1_bone_data_html_a1d9d699da21fb5ecb74d9e2ba0a68b6f"><div class="ttname"><a href="classdl_1_1_bone_data.html#a1d9d699da21fb5ecb74d9e2ba0a68b6f">dl::BoneData::GetBoneSize</a></div><div class="ttdeci">size_t GetBoneSize()</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00125">dl_model_bone.h:125</a></div></div>
<div class="ttc" id="aclassdl_1_1_bone_data_html_a69abda4bd9bcbb81d2f3e1ec74d6d3b3"><div class="ttname"><a href="classdl_1_1_bone_data.html#a69abda4bd9bcbb81d2f3e1ec74d6d3b3">dl::BoneData::GetBoneOffset</a></div><div class="ttdeci">std::vector&lt; Matrix4 &gt; GetBoneOffset()</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00132">dl_model_bone.h:132</a></div></div>
<div class="ttc" id="aclassdl_1_1_bone_data_html_aa44fb5c70757f9abadce29546bd6729b"><div class="ttname"><a href="classdl_1_1_bone_data.html#aa44fb5c70757f9abadce29546bd6729b">dl::BoneData::Load</a></div><div class="ttdeci">void Load(StreamInput &amp;s)</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00210">dl_model_bone.h:210</a></div></div>
<div class="ttc" id="aclassdl_1_1_factory_imp_html"><div class="ttname"><a href="classdl_1_1_factory_imp.html">dl::FactoryImp</a></div><div class="ttdef"><b>Definition:</b> <a href="dl__factory__imp_8h_source.html#l00025">dl_factory_imp.h:26</a></div></div>
<div class="ttc" id="aclassdl_1_1_matrix_html"><div class="ttname"><a href="classdl_1_1_matrix.html">dl::Matrix&lt; Float, 4, 4 &gt;</a></div></div>
<div class="ttc" id="aclassdl_1_1_matrix_html_af7f569fd33da93293d982663e0b319b4"><div class="ttname"><a href="classdl_1_1_matrix.html#af7f569fd33da93293d982663e0b319b4">dl::Matrix::Identity</a></div><div class="ttdeci">void Identity()</div><div class="ttdoc">获得行列式的值,Determinant(A)</div><div class="ttdef"><b>Definition:</b> <a href="dl__matrix_8h_source.html#l00160">dl_matrix.h:160</a></div></div>
<div class="ttc" id="aclassdl_1_1_model_loader_html"><div class="ttname"><a href="classdl_1_1_model_loader.html">dl::ModelLoader</a></div><div class="ttdef"><b>Definition:</b> <a href="dl__model__loader_8h_source.html#l00064">dl_model_loader.h:65</a></div></div>
<div class="ttc" id="aclassdl_1_1_stream_input_html"><div class="ttname"><a href="classdl_1_1_stream_input.html">dl::StreamInput</a></div><div class="ttdoc">注释参考StreamOutput</div><div class="ttdef"><b>Definition:</b> <a href="dl__stream__input_8h_source.html#l00031">dl_stream_input.h:32</a></div></div>
<div class="ttc" id="aclassdl_1_1_stream_input_html_a45078239838139420b8d25dcf412f642"><div class="ttname"><a href="classdl_1_1_stream_input.html#a45078239838139420b8d25dcf412f642">dl::StreamInput::Read</a></div><div class="ttdeci">void Read(T *data)</div><div class="ttdef"><b>Definition:</b> <a href="dl__stream__input_8h_source.html#l00041">dl_stream_input.h:41</a></div></div>
<div class="ttc" id="aclassdl_1_1_stream_output_html"><div class="ttname"><a href="classdl_1_1_stream_output.html">dl::StreamOutput</a></div><div class="ttdef"><b>Definition:</b> <a href="dl__stream__output_8h_source.html#l00028">dl_stream_output.h:29</a></div></div>
<div class="ttc" id="aclassdl_1_1_stream_output_html_ad9ad1a7301369bbb69a9682034e84a88"><div class="ttname"><a href="classdl_1_1_stream_output.html#ad9ad1a7301369bbb69a9682034e84a88">dl::StreamOutput::Write</a></div><div class="ttdeci">void Write(const T *data)</div><div class="ttdoc">写入一个对象</div><div class="ttdef"><b>Definition:</b> <a href="dl__stream__output_8h_source.html#l00043">dl_stream_output.h:43</a></div></div>
<div class="ttc" id="adl__log_8h_html_abc86a6b34614cb6484cdf935d9350abd"><div class="ttname"><a href="dl__log_8h.html#abc86a6b34614cb6484cdf935d9350abd">log_err</a></div><div class="ttdeci">#define log_err(...)</div><div class="ttdef"><b>Definition:</b> <a href="dl__log_8h_source.html#l00243">dl_log.h:243</a></div></div>
<div class="ttc" id="adl__matrix_8h_html"><div class="ttname"><a href="dl__matrix_8h.html">dl_matrix.h</a></div><div class="ttdoc">矩阵(列存储)</div></div>
<div class="ttc" id="adl__stream__input_8h_html"><div class="ttname"><a href="dl__stream__input_8h.html">dl_stream_input.h</a></div></div>
<div class="ttc" id="adl__stream__output_8h_html"><div class="ttname"><a href="dl__stream__output_8h.html">dl_stream_output.h</a></div><div class="ttdoc">输出流</div></div>
<div class="ttc" id="anamespacedl_1_1_each_html_a70ebcccd1d7b1c9f14c2b4628a7c388c"><div class="ttname"><a href="namespacedl_1_1_each.html#a70ebcccd1d7b1c9f14c2b4628a7c388c">dl::Each::Lerp</a></div><div class="ttdeci">std::array&lt; T, N &gt; Lerp(const std::array&lt; T, N &gt; &amp;a, const std::array&lt; T, N &gt; &amp;b, T t)</div><div class="ttdoc">线性插值</div><div class="ttdef"><b>Definition:</b> <a href="dl__range__each_8h_source.html#l00074">dl_range_each.h:74</a></div></div>
<div class="ttc" id="anamespacedl_1_1_mat_html_a11f384dbeee6ee2c282d8eaab3e74873"><div class="ttname"><a href="namespacedl_1_1_mat.html#a11f384dbeee6ee2c282d8eaab3e74873">dl::Mat::CreateRotation</a></div><div class="ttdeci">Matrix4 CreateRotation(const Position3 &amp;axis, Float angle)</div><div class="ttdoc">创建旋转矩阵</div></div>
<div class="ttc" id="anamespacedl_1_1_mat_html_a518b7d5cabf8a0cd7a04c2ed49c706cf"><div class="ttname"><a href="namespacedl_1_1_mat.html#a518b7d5cabf8a0cd7a04c2ed49c706cf">dl::Mat::CreateTranslation</a></div><div class="ttdeci">Matrix4 CreateTranslation(const Position3 &amp;t)</div><div class="ttdoc">创建平移矩阵</div></div>
<div class="ttc" id="anamespacedl_1_1_mat_html_aaf966c66eaa955411ca63f74be079c87"><div class="ttname"><a href="namespacedl_1_1_mat.html#aaf966c66eaa955411ca63f74be079c87">dl::Mat::CreateScaling</a></div><div class="ttdeci">Matrix4 CreateScaling(const Position3 &amp;s)</div><div class="ttdoc">创建缩放矩阵</div></div>
<div class="ttc" id="anamespacedl_1_1_math_html_a179e7cdae2c5e2721dcce18f539ba1dc"><div class="ttname"><a href="namespacedl_1_1_math.html#a179e7cdae2c5e2721dcce18f539ba1dc">dl::Math::IsOutRange</a></div><div class="ttdeci">constexpr bool IsOutRange(T x, T a, T b)</div><div class="ttdoc">判断数值是否越界(前闭后开)</div><div class="ttdef"><b>Definition:</b> <a href="dl__math_8h_source.html#l00090">dl_math.h:90</a></div></div>
<div class="ttc" id="anamespacedl_1_1_math_html_a6b4a57c034f58c7ba26105da97b21d22"><div class="ttname"><a href="namespacedl_1_1_math.html#a6b4a57c034f58c7ba26105da97b21d22">dl::Math::Slerp</a></div><div class="ttdeci">Position4 Slerp(const Position4 &amp;q0, const Position4 &amp;q1, const Float &amp;t)</div><div class="ttdoc">球面线性插值</div></div>
<div class="ttc" id="anamespacedl_html"><div class="ttname"><a href="namespacedl.html">dl</a></div><div class="ttdef"><b>Definition:</b> <a href="dl__array2_8h_source.html#l00017">dl_array2.h:18</a></div></div>
<div class="ttc" id="anamespacedl_html_a7d07deda01ae45d04f3323a4e6445e51"><div class="ttname"><a href="namespacedl.html#a7d07deda01ae45d04f3323a4e6445e51">dl::Position3</a></div><div class="ttdeci">std::array&lt; Float, 3 &gt; Position3</div><div class="ttdef"><b>Definition:</b> <a href="dl__type__def_8h_source.html#l00041">dl_type_def.h:41</a></div></div>
<div class="ttc" id="anamespacedl_html_aa36525eecbb6603a7ae4a63340c205f9"><div class="ttname"><a href="namespacedl.html#aa36525eecbb6603a7ae4a63340c205f9">dl::Position4</a></div><div class="ttdeci">std::array&lt; Float, 4 &gt; Position4</div><div class="ttdef"><b>Definition:</b> <a href="dl__type__def_8h_source.html#l00042">dl_type_def.h:42</a></div></div>
<div class="ttc" id="anamespacedl_html_ac6695b7cb8160d2c472d5b179d48edef"><div class="ttname"><a href="namespacedl.html#ac6695b7cb8160d2c472d5b179d48edef">dl::FloatTime</a></div><div class="ttdeci">float FloatTime</div><div class="ttdef"><b>Definition:</b> <a href="dl__type__def_8h_source.html#l00048">dl_type_def.h:48</a></div></div>
<div class="ttc" id="astructdl_1_1_animation_clip_html"><div class="ttname"><a href="structdl_1_1_animation_clip.html">dl::AnimationClip</a></div><div class="ttdoc">动画片段,包含多个骨骼</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00096">dl_model_bone.h:97</a></div></div>
<div class="ttc" id="astructdl_1_1_animation_clip_html_a2dd82cacacb157a1ea804b85d665afbc"><div class="ttname"><a href="structdl_1_1_animation_clip.html#a2dd82cacacb157a1ea804b85d665afbc">dl::AnimationClip::_t1</a></div><div class="ttdeci">FloatTime _t1</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00099">dl_model_bone.h:99</a></div></div>
<div class="ttc" id="astructdl_1_1_animation_clip_html_a7c02850896940e32292373ce6929db9c"><div class="ttname"><a href="structdl_1_1_animation_clip.html#a7c02850896940e32292373ce6929db9c">dl::AnimationClip::_t0</a></div><div class="ttdeci">FloatTime _t0</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00098">dl_model_bone.h:98</a></div></div>
<div class="ttc" id="astructdl_1_1_animation_clip_html_a7ec6e2919f7ea3882678f635e26b2d81"><div class="ttname"><a href="structdl_1_1_animation_clip.html#a7ec6e2919f7ea3882678f635e26b2d81">dl::AnimationClip::_allBoneKeyFrameMulti</a></div><div class="ttdeci">std::vector&lt; BoneKeyFrameMulti &gt; _allBoneKeyFrameMulti</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00100">dl_model_bone.h:100</a></div></div>
<div class="ttc" id="astructdl_1_1_animation_clip_html_a99fc3cd88921da8766228f5a8215cba7"><div class="ttname"><a href="structdl_1_1_animation_clip.html#a99fc3cd88921da8766228f5a8215cba7">dl::AnimationClip::Interpolate</a></div><div class="ttdeci">void Interpolate(FloatTime t, std::vector&lt; Matrix4 &gt; &amp;bone_trans)</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00107">dl_model_bone.h:107</a></div></div>
<div class="ttc" id="astructdl_1_1_animation_clip_html_ad3fc7b60d84211960584820a4500433d"><div class="ttname"><a href="structdl_1_1_animation_clip.html#ad3fc7b60d84211960584820a4500433d">dl::AnimationClip::GetClipEndTime</a></div><div class="ttdeci">FloatTime GetClipEndTime()</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00102">dl_model_bone.h:102</a></div></div>
<div class="ttc" id="astructdl_1_1_bone_key_frame_html"><div class="ttname"><a href="structdl_1_1_bone_key_frame.html">dl::BoneKeyFrame</a></div><div class="ttdoc">骨骼关键帧(不变量)</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00024">dl_model_bone.h:25</a></div></div>
<div class="ttc" id="astructdl_1_1_bone_key_frame_html_a0223b91ac7a656073730d79fff499539"><div class="ttname"><a href="structdl_1_1_bone_key_frame.html#a0223b91ac7a656073730d79fff499539">dl::BoneKeyFrame::_translation</a></div><div class="ttdeci">Position3 _translation</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00034">dl_model_bone.h:34</a></div></div>
<div class="ttc" id="astructdl_1_1_bone_key_frame_html_a34004b0331822f584c476aea35cddb37"><div class="ttname"><a href="structdl_1_1_bone_key_frame.html#a34004b0331822f584c476aea35cddb37">dl::BoneKeyFrame::_roationQuat</a></div><div class="ttdeci">Position4 _roationQuat</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00035">dl_model_bone.h:35</a></div></div>
<div class="ttc" id="astructdl_1_1_bone_key_frame_html_a6ebf328db2659ee38d40e5c223a2d17d"><div class="ttname"><a href="structdl_1_1_bone_key_frame.html#a6ebf328db2659ee38d40e5c223a2d17d">dl::BoneKeyFrame::_t</a></div><div class="ttdeci">FloatTime _t</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00033">dl_model_bone.h:33</a></div></div>
<div class="ttc" id="astructdl_1_1_bone_key_frame_html_aa6a284093b73e5d2ad26eccf09bc6c7e"><div class="ttname"><a href="structdl_1_1_bone_key_frame.html#aa6a284093b73e5d2ad26eccf09bc6c7e">dl::BoneKeyFrame::_scaling</a></div><div class="ttdeci">Position3 _scaling</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00036">dl_model_bone.h:36</a></div></div>
<div class="ttc" id="astructdl_1_1_bone_key_frame_html_aa8fcaabd43e83a4786313744789781a3"><div class="ttname"><a href="structdl_1_1_bone_key_frame.html#aa8fcaabd43e83a4786313744789781a3">dl::BoneKeyFrame::BoneKeyFrame</a></div><div class="ttdeci">BoneKeyFrame()</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00026">dl_model_bone.h:26</a></div></div>
<div class="ttc" id="astructdl_1_1_bone_key_frame_multi_html"><div class="ttname"><a href="structdl_1_1_bone_key_frame_multi.html">dl::BoneKeyFrameMulti</a></div><div class="ttdoc">多个节点关键帧组成的一个骨架</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00041">dl_model_bone.h:42</a></div></div>
<div class="ttc" id="astructdl_1_1_bone_key_frame_multi_html_a801246ec1817cdac700af5c2f2d7439b"><div class="ttname"><a href="structdl_1_1_bone_key_frame_multi.html#a801246ec1817cdac700af5c2f2d7439b">dl::BoneKeyFrameMulti::Interpolate</a></div><div class="ttdeci">void Interpolate(FloatTime t, Matrix4 &amp;mat)</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00044">dl_model_bone.h:44</a></div></div>
<div class="ttc" id="astructdl_1_1_bone_key_frame_multi_html_aed1a920d3b0c7af65182fcb8471eaa01"><div class="ttname"><a href="structdl_1_1_bone_key_frame_multi.html#aed1a920d3b0c7af65182fcb8471eaa01">dl::BoneKeyFrameMulti::_allKeyFrame</a></div><div class="ttdeci">std::vector&lt; BoneKeyFrame &gt; _allKeyFrame</div><div class="ttdef"><b>Definition:</b> <a href="dl__model__bone_8h_source.html#l00093">dl_model_bone.h:93</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
制作者&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.5
</small></address>
</body>
</html>