| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697 |
- <!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="en-US">
- <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.12.0"/>
- <meta name="viewport" content="width=device-width, initial-scale=1"/>
- <title>Jolt Physics: Jolt/Geometry/EPAPenetrationDepth.h Source File</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>
- <script type="text/javascript" src="clipboard.js"></script>
- <link href="navtree.css" rel="stylesheet" type="text/css"/>
- <script type="text/javascript" src="navtreedata.js"></script>
- <script type="text/javascript" src="navtree.js"></script>
- <script type="text/javascript" src="resize.js"></script>
- <script type="text/javascript" src="cookie.js"></script>
- <link href="search/search.css" rel="stylesheet" type="text/css"/>
- <script type="text/javascript" src="search/searchdata.js"></script>
- <script type="text/javascript" src="search/search.js"></script>
- <script type="text/x-mathjax-config">
- MathJax.Hub.Config({
- extensions: ["tex2jax.js"],
- jax: ["input/TeX","output/HTML-CSS"],
- });
- </script>
- <script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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="projectlogo"><img alt="Logo" src="LogoSmall.png"/></td>
- <td id="projectalign">
- <div id="projectname">Jolt Physics
- </div>
- <div id="projectbrief">A multi core friendly Game Physics Engine</div>
- </td>
- </tr>
- </tbody>
- </table>
- </div>
- <!-- end header part -->
- <!-- Generated by Doxygen 1.12.0 -->
- <script type="text/javascript">
- /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
- var searchBox = new SearchBox("searchBox", "search/",'.html');
- /* @license-end */
- </script>
- <script type="text/javascript">
- /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
- $(function() { codefold.init(0); });
- /* @license-end */
- </script>
- <script type="text/javascript" src="menudata.js"></script>
- <script type="text/javascript" src="menu.js"></script>
- <script type="text/javascript">
- /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
- $(function() {
- initMenu('',true,false,'search.php','Search',true);
- $(function() { init_search(); });
- });
- /* @license-end */
- </script>
- <div id="main-nav"></div>
- </div><!-- top -->
- <div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
- </div>
- <script type="text/javascript">
- /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
- $(function(){initNavTree('_e_p_a_penetration_depth_8h_source.html',''); initResizable(true); });
- /* @license-end */
- </script>
- <div id="doc-content">
- <!-- window showing the filter options -->
- <div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
- </div>
- <!-- iframe showing the search results (closed by default) -->
- <div id="MSearchResultsWindow">
- <div id="MSearchResults">
- <div class="SRPage">
- <div id="SRIndex">
- <div id="SRResults"></div>
- <div class="SRStatus" id="Loading">Loading...</div>
- <div class="SRStatus" id="Searching">Searching...</div>
- <div class="SRStatus" id="NoMatches">No Matches</div>
- </div>
- </div>
- </div>
- </div>
- <div class="header">
- <div class="headertitle"><div class="title">EPAPenetrationDepth.h</div></div>
- </div><!--header-->
- <div class="contents">
- <a href="_e_p_a_penetration_depth_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)</span></div>
- <div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// SPDX-FileCopyrightText: 2021 Jorrit Rouwe</span></div>
- <div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// SPDX-License-Identifier: MIT</span></div>
- <div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span> </div>
- <div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#pragma once</span></div>
- <div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> </div>
- <div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#include <<a class="code" href="_static_array_8h.html">Jolt/Core/StaticArray.h</a>></span></div>
- <div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include <<a class="code" href="_profiler_8h.html">Jolt/Core/Profiler.h</a>></span></div>
- <div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include <<a class="code" href="_g_j_k_closest_point_8h.html">Jolt/Geometry/GJKClosestPoint.h</a>></span></div>
- <div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include <<a class="code" href="_e_p_a_convex_hull_builder_8h.html">Jolt/Geometry/EPAConvexHullBuilder.h</a>></span></div>
- <div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> </div>
- <div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment">//#define JPH_EPA_PENETRATION_DEPTH_DEBUG</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><a class="code hl_define" href="_core_8h.html#ad14098b68b8c44ea6112601031268405">JPH_NAMESPACE_BEGIN</a></div>
- <div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
- <div class="foldopen" id="foldopen00036" data-start="{" data-end="};">
- <div class="line"><a id="l00036" name="l00036"></a><span class="lineno"><a class="line" href="class_e_p_a_penetration_depth.html"> 36</a></span><span class="keyword">class </span><a class="code hl_class" href="class_e_p_a_penetration_depth.html">EPAPenetrationDepth</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><span class="keyword">private</span>:</div>
- <div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="comment">// Typedefs</span></div>
- <div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="keywordtype">int</span> cMaxPoints = <a class="code hl_variable" href="class_e_p_a_convex_hull_builder.html#a6968898ef16408b14c1000bebf2f2576">EPAConvexHullBuilder::cMaxPoints</a>;</div>
- <div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="keywordtype">int</span> cMaxPointsToIncludeOriginInHull = 32;</div>
- <div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">static_assert</span>(cMaxPointsToIncludeOriginInHull < cMaxPoints);</div>
- <div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
- <div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="keyword">using </span><a class="code hl_class" href="class_e_p_a_convex_hull_builder_1_1_triangle.html">Triangle</a> = <a class="code hl_class" href="class_e_p_a_convex_hull_builder_1_1_triangle.html">EPAConvexHullBuilder::Triangle</a>;</div>
- <div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">using </span><a class="code hl_class" href="class_e_p_a_convex_hull_builder_1_1_points.html">Points</a> = <a class="code hl_class" href="class_e_p_a_convex_hull_builder_1_1_points.html">EPAConvexHullBuilder::Points</a>;</div>
- <div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> </div>
- <div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <a class="code hl_class" href="class_g_j_k_closest_point.html">GJKClosestPoint</a> mGJK;</div>
- <div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> </div>
- <div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="preprocessor">#ifdef JPH_ENABLE_ASSERTS</span></div>
- <div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keywordtype">float</span> mGJKTolerance = 0.0f;</div>
- <div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="preprocessor">#endif </span><span class="comment">// JPH_ENABLE_ASSERTS</span></div>
- <div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div>
- <div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keyword">class </span>SupportPoints</div>
- <div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> {</div>
- <div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="keyword">public</span>:</div>
- <div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <a class="code hl_class" href="class_e_p_a_convex_hull_builder_1_1_points.html">Points</a> mY;</div>
- <div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <a class="code hl_class" href="class_vec3.html">Vec3</a> mP[cMaxPoints];</div>
- <div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <a class="code hl_class" href="class_vec3.html">Vec3</a> mQ[cMaxPoints];</div>
- <div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> </div>
- <div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keyword">template</span> <<span class="keyword">typename</span> A, <span class="keyword">typename</span> B></div>
- <div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <a class="code hl_class" href="class_vec3.html">Vec3</a> Add(<span class="keyword">const</span> A &inA, <span class="keyword">const</span> B &inB, <a class="code hl_class" href="class_vec3.html">Vec3Arg</a> inDirection, <span class="keywordtype">int</span> &outIndex)</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="comment">// Get support point of the minkowski sum A - B</span></div>
- <div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <a class="code hl_class" href="class_vec3.html">Vec3</a> p = inA.GetSupport(inDirection);</div>
- <div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <a class="code hl_class" href="class_vec3.html">Vec3</a> q = inB.GetSupport(-inDirection);</div>
- <div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <a class="code hl_class" href="class_vec3.html">Vec3</a> w = p - q;</div>
- <div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> </div>
- <div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="comment">// Store new point</span></div>
- <div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> outIndex = mY.<a class="code hl_function" href="class_static_array.html#aea449055e7dab910eca1a4af05d53b6f">size</a>();</div>
- <div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> mY.<a class="code hl_function" href="class_static_array.html#a1117d7fa5ecfe22248396f1632d842cb">push_back</a>(w);</div>
- <div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> mP[outIndex] = p;</div>
- <div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> mQ[outIndex] = q;</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> <span class="keywordflow">return</span> w;</div>
- <div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> }</div>
- <div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> };</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><span class="keyword">public</span>:</div>
- <div class="foldopen" id="foldopen00085" data-start="{" data-end="};">
- <div class="line"><a id="l00085" name="l00085"></a><span class="lineno"><a class="line" href="class_e_p_a_penetration_depth.html#aab59ecfbbefc06c5ac96f9cdc24252d0"> 85</a></span> <span class="keyword">enum class</span> <a class="code hl_enumeration" href="class_e_p_a_penetration_depth.html#aab59ecfbbefc06c5ac96f9cdc24252d0">EStatus</a></div>
- <div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> {</div>
- <div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <a class="code hl_enumvalue" href="class_e_p_a_penetration_depth.html#aab59ecfbbefc06c5ac96f9cdc24252d0a0497a652be066f6f966a97fa6c67c9c0">NotColliding</a>, </div>
- <div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <a class="code hl_enumvalue" href="class_e_p_a_penetration_depth.html#aab59ecfbbefc06c5ac96f9cdc24252d0ae0f4d0dafbcf08dd28d80154056ad0d8">Colliding</a>, </div>
- <div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <a class="code hl_enumvalue" href="class_e_p_a_penetration_depth.html#aab59ecfbbefc06c5ac96f9cdc24252d0aa2d00c353d1f9a5f07852650030dbd53">Indeterminate</a> </div>
- <div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> };</div>
- </div>
- <div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> </div>
- <div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="keyword">template</span> <<span class="keyword">typename</span> AE, <span class="keyword">typename</span> BE></div>
- <div class="foldopen" id="foldopen00104" data-start="{" data-end="}">
- <div class="line"><a id="l00104" name="l00104"></a><span class="lineno"><a class="line" href="class_e_p_a_penetration_depth.html#a903dc39955aae9b4e9eced5a396eb5a7"> 104</a></span> <a class="code hl_enumeration" href="class_e_p_a_penetration_depth.html#aab59ecfbbefc06c5ac96f9cdc24252d0">EStatus</a> <a class="code hl_function" href="class_e_p_a_penetration_depth.html#a903dc39955aae9b4e9eced5a396eb5a7">GetPenetrationDepthStepGJK</a>(<span class="keyword">const</span> AE &inAExcludingConvexRadius, <span class="keywordtype">float</span> inConvexRadiusA, <span class="keyword">const</span> BE &inBExcludingConvexRadius, <span class="keywordtype">float</span> inConvexRadiusB, <span class="keywordtype">float</span> inTolerance, <a class="code hl_class" href="class_vec3.html">Vec3</a> &ioV, <a class="code hl_class" href="class_vec3.html">Vec3</a> &outPointA, <a class="code hl_class" href="class_vec3.html">Vec3</a> &outPointB)</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> <a class="code hl_define" href="_issue_reporting_8h.html#a9189784257d6995aa3ecbafbf8bc5bd5">JPH_IF_ENABLE_ASSERTS</a>(mGJKTolerance = inTolerance;)</div>
- <div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> </div>
- <div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="comment">// Don't supply a zero ioV, we only want to get points on the hull of the Minkowsky sum and not internal points.</span></div>
- <div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="comment">//</span></div>
- <div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="comment">// Note that if the assert below triggers, it is very likely that you have a MeshShape that contains a degenerate triangle (e.g. a sliver).</span></div>
- <div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="comment">// Go up a couple of levels in the call stack to see if we're indeed testing a triangle and if it is degenerate.</span></div>
- <div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="comment">// If this is the case then fix the triangles you supply to the MeshShape.</span></div>
- <div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <a class="code hl_define" href="_issue_reporting_8h.html#aaf6b1df827e11b7ca5f6f8778bd8f8cd">JPH_ASSERT</a>(!ioV.<a class="code hl_function" href="class_vec3.html#acee93ea875b86bc0f63edebe2b592dbc">IsNearZero</a>());</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> <span class="comment">// Get closest points</span></div>
- <div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keywordtype">float</span> combined_radius = inConvexRadiusA + inConvexRadiusB;</div>
- <div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keywordtype">float</span> combined_radius_sq = combined_radius * combined_radius;</div>
- <div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <span class="keywordtype">float</span> closest_points_dist_sq = mGJK.<a class="code hl_function" href="class_g_j_k_closest_point.html#abb7cfdd49d708007d75b4c2e9b90ebb9">GetClosestPoints</a>(inAExcludingConvexRadius, inBExcludingConvexRadius, inTolerance, combined_radius_sq, ioV, outPointA, outPointB);</div>
- <div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="keywordflow">if</span> (closest_points_dist_sq > combined_radius_sq)</div>
- <div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> {</div>
- <div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="comment">// No collision</span></div>
- <div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="class_e_p_a_penetration_depth.html#aab59ecfbbefc06c5ac96f9cdc24252d0a0497a652be066f6f966a97fa6c67c9c0">EStatus::NotColliding</a>;</div>
- <div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> }</div>
- <div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">if</span> (closest_points_dist_sq > 0.0f)</div>
- <div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> {</div>
- <div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="comment">// Collision within convex radius, adjust points for convex radius</span></div>
- <div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keywordtype">float</span> v_len = sqrt(closest_points_dist_sq); <span class="comment">// GetClosestPoints function returns |ioV|^2 when return value < FLT_MAX</span></div>
- <div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> outPointA += ioV * (inConvexRadiusA / v_len);</div>
- <div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> outPointB -= ioV * (inConvexRadiusB / v_len);</div>
- <div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="class_e_p_a_penetration_depth.html#aab59ecfbbefc06c5ac96f9cdc24252d0ae0f4d0dafbcf08dd28d80154056ad0d8">EStatus::Colliding</a>;</div>
- <div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> }</div>
- <div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> </div>
- <div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="class_e_p_a_penetration_depth.html#aab59ecfbbefc06c5ac96f9cdc24252d0aa2d00c353d1f9a5f07852650030dbd53">EStatus::Indeterminate</a>;</div>
- <div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> }</div>
- </div>
- <div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> </div>
- <div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keyword">template</span> <<span class="keyword">typename</span> AI, <span class="keyword">typename</span> BI></div>
- <div class="foldopen" id="foldopen00149" data-start="{" data-end="}">
- <div class="line"><a id="l00149" name="l00149"></a><span class="lineno"><a class="line" href="class_e_p_a_penetration_depth.html#acff8a6121c0896e3aabbe3a18019f201"> 149</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="class_e_p_a_penetration_depth.html#acff8a6121c0896e3aabbe3a18019f201">GetPenetrationDepthStepEPA</a>(<span class="keyword">const</span> AI &inAIncludingConvexRadius, <span class="keyword">const</span> BI &inBIncludingConvexRadius, <span class="keywordtype">float</span> inTolerance, <a class="code hl_class" href="class_vec3.html">Vec3</a> &outV, <a class="code hl_class" href="class_vec3.html">Vec3</a> &outPointA, <a class="code hl_class" href="class_vec3.html">Vec3</a> &outPointB)</div>
- <div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> {</div>
- <div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <a class="code hl_define" href="_profiler_8h.html#a9d22d20c7f03e2ec7bf058811b12cb4e">JPH_PROFILE_FUNCTION</a>();</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">// Check that the tolerance makes sense (smaller value than this will just result in needless iterations)</span></div>
- <div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <a class="code hl_define" href="_issue_reporting_8h.html#aaf6b1df827e11b7ca5f6f8778bd8f8cd">JPH_ASSERT</a>(inTolerance >= FLT_EPSILON);</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">// Fetch the simplex from GJK algorithm</span></div>
- <div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> SupportPoints support_points;</div>
- <div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> mGJK.<a class="code hl_function" href="class_g_j_k_closest_point.html#a73d6f276fb275026a0126ca7361fb2bf">GetClosestPointsSimplex</a>(support_points.mY.<a class="code hl_function" href="class_static_array.html#a7698b4e3e7cf608eeba5a48f25c284d9">data</a>(), support_points.mP, support_points.mQ, support_points.mY.<a class="code hl_function" href="class_e_p_a_convex_hull_builder_1_1_points.html#a5b85570fd72e9b7e9575981fe7464383">GetSizeRef</a>());</div>
- <div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> </div>
- <div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="comment">// Fill up the amount of support points to 4</span></div>
- <div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <span class="keywordflow">switch</span> (support_points.mY.<a class="code hl_function" href="class_static_array.html#aea449055e7dab910eca1a4af05d53b6f">size</a>())</div>
- <div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> {</div>
- <div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">case</span> 1:</div>
- <div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> {</div>
- <div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="comment">// 1 vertex, which must be at the origin, which is useless for our purpose</span></div>
- <div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <a class="code hl_define" href="_issue_reporting_8h.html#aaf6b1df827e11b7ca5f6f8778bd8f8cd">JPH_ASSERT</a>(support_points.mY[0].IsNearZero(<a class="code hl_function" href="_math_8h.html#a61379b8b743a16fe823daeebc1482570">Square</a>(mGJKTolerance)));</div>
- <div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> support_points.mY.<a class="code hl_function" href="class_static_array.html#aed109d7f64345b6e7e956bd80de27387">pop_back</a>();</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> <span class="comment">// Add support points in 4 directions to form a tetrahedron around the origin</span></div>
- <div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="keywordtype">int</span> p1, p2, p3, p4;</div>
- <div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> (void)support_points.Add(inAIncludingConvexRadius, inBIncludingConvexRadius, <a class="code hl_class" href="class_vec3.html">Vec3</a>(0, 1, 0), p1);</div>
- <div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> (void)support_points.Add(inAIncludingConvexRadius, inBIncludingConvexRadius, <a class="code hl_class" href="class_vec3.html">Vec3</a>(-1, -1, -1), p2);</div>
- <div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> (void)support_points.Add(inAIncludingConvexRadius, inBIncludingConvexRadius, <a class="code hl_class" href="class_vec3.html">Vec3</a>(1, -1, -1), p3);</div>
- <div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> (void)support_points.Add(inAIncludingConvexRadius, inBIncludingConvexRadius, <a class="code hl_class" href="class_vec3.html">Vec3</a>(0, -1, 1), p4);</div>
- <div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <a class="code hl_define" href="_issue_reporting_8h.html#aaf6b1df827e11b7ca5f6f8778bd8f8cd">JPH_ASSERT</a>(p1 == 0);</div>
- <div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <a class="code hl_define" href="_issue_reporting_8h.html#aaf6b1df827e11b7ca5f6f8778bd8f8cd">JPH_ASSERT</a>(p2 == 1);</div>
- <div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <a class="code hl_define" href="_issue_reporting_8h.html#aaf6b1df827e11b7ca5f6f8778bd8f8cd">JPH_ASSERT</a>(p3 == 2);</div>
- <div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <a class="code hl_define" href="_issue_reporting_8h.html#aaf6b1df827e11b7ca5f6f8778bd8f8cd">JPH_ASSERT</a>(p4 == 3);</div>
- <div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> <span class="keywordflow">break</span>;</div>
- <div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> }</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> <span class="keywordflow">case</span> 2:</div>
- <div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> {</div>
- <div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <span class="comment">// Two vertices, create 3 extra by taking perpendicular axis and rotating it around in 120 degree increments</span></div>
- <div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <a class="code hl_class" href="class_vec3.html">Vec3</a> axis = (support_points.mY[1] - support_points.mY[0]).Normalized();</div>
- <div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <a class="code hl_class" href="class_mat44.html">Mat44</a> rotation = <a class="code hl_function" href="class_mat44.html#ac3109f2d950061c0b4de57e76a132634">Mat44::sRotation</a>(axis, <a class="code hl_function" href="_math_8h.html#a636689581f2a6ce1d3030dc4dd83b2f5">DegreesToRadians</a>(120.0f));</div>
- <div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <a class="code hl_class" href="class_vec3.html">Vec3</a> dir1 = axis.<a class="code hl_function" href="class_vec3.html#a24a96972fdbe04ae9a3e340fd4c39b81">GetNormalizedPerpendicular</a>();</div>
- <div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> <a class="code hl_class" href="class_vec3.html">Vec3</a> dir2 = rotation * dir1;</div>
- <div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <a class="code hl_class" href="class_vec3.html">Vec3</a> dir3 = rotation * dir2;</div>
- <div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keywordtype">int</span> p1, p2, p3;</div>
- <div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> (void)support_points.Add(inAIncludingConvexRadius, inBIncludingConvexRadius, dir1, p1);</div>
- <div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> (void)support_points.Add(inAIncludingConvexRadius, inBIncludingConvexRadius, dir2, p2);</div>
- <div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> (void)support_points.Add(inAIncludingConvexRadius, inBIncludingConvexRadius, dir3, p3);</div>
- <div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <a class="code hl_define" href="_issue_reporting_8h.html#aaf6b1df827e11b7ca5f6f8778bd8f8cd">JPH_ASSERT</a>(p1 == 2);</div>
- <div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <a class="code hl_define" href="_issue_reporting_8h.html#aaf6b1df827e11b7ca5f6f8778bd8f8cd">JPH_ASSERT</a>(p2 == 3);</div>
- <div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> <a class="code hl_define" href="_issue_reporting_8h.html#aaf6b1df827e11b7ca5f6f8778bd8f8cd">JPH_ASSERT</a>(p3 == 4);</div>
- <div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">break</span>;</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> </div>
- <div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">case</span> 3:</div>
- <div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">case</span> 4:</div>
- <div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="comment">// We already have enough points</span></div>
- <div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">break</span>;</div>
- <div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> }</div>
- <div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> </div>
- <div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="comment">// Create hull out of the initial points</span></div>
- <div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> <a class="code hl_define" href="_issue_reporting_8h.html#aaf6b1df827e11b7ca5f6f8778bd8f8cd">JPH_ASSERT</a>(support_points.mY.<a class="code hl_function" href="class_static_array.html#aea449055e7dab910eca1a4af05d53b6f">size</a>() >= 3);</div>
- <div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <a class="code hl_class" href="class_e_p_a_convex_hull_builder.html">EPAConvexHullBuilder</a> hull(support_points.mY);</div>
- <div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span><span class="preprocessor">#ifdef JPH_EPA_CONVEX_BUILDER_DRAW</span></div>
- <div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> hull.DrawLabel(<span class="stringliteral">"Build initial hull"</span>);</div>
- <div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span><span class="preprocessor">#endif</span></div>
- <div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span><span class="preprocessor">#ifdef JPH_EPA_PENETRATION_DEPTH_DEBUG</span></div>
- <div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <a class="code hl_variable" href="_issue_reporting_8cpp.html#a5b9da8153a0850dccf744d526486ebd2">Trace</a>(<span class="stringliteral">"Init: num_points = %u"</span>, (<a class="code hl_typedef" href="_core_8h.html#a69aa29b598b851b0640aa225a9e5d61d">uint</a>)support_points.mY.<a class="code hl_function" href="class_static_array.html#aea449055e7dab910eca1a4af05d53b6f">size</a>());</div>
- <div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span><span class="preprocessor">#endif</span></div>
- <div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> hull.<a class="code hl_function" href="class_e_p_a_convex_hull_builder.html#ac6b69723ed9d2c1b815769f9953ef8e7">Initialize</a>(0, 1, 2);</div>
- <div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <span class="keywordflow">for</span> (<span class="keyword">typename</span> <a class="code hl_typedef" href="class_static_array.html#a69859b5a0e6cd32048fc1f3188982f3b">Points::size_type</a> i = 3; i < support_points.mY.<a class="code hl_function" href="class_static_array.html#aea449055e7dab910eca1a4af05d53b6f">size</a>(); ++i)</div>
- <div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> {</div>
- <div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> <span class="keywordtype">float</span> dist_sq;</div>
- <div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <a class="code hl_class" href="class_e_p_a_convex_hull_builder_1_1_triangle.html">Triangle</a> *t = hull.<a class="code hl_function" href="class_e_p_a_convex_hull_builder.html#aba8a5ac94c67e4c96e5eb533dfca3a83">FindFacingTriangle</a>(support_points.mY[i], dist_sq);</div>
- <div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">if</span> (t != <span class="keyword">nullptr</span>)</div>
- <div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> {</div>
- <div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <a class="code hl_class" href="class_static_array.html">EPAConvexHullBuilder::NewTriangles</a> new_triangles;</div>
- <div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">if</span> (!hull.<a class="code hl_function" href="class_e_p_a_convex_hull_builder.html#ae1b6e6eb12d8723eeab4265f9510b7c2">AddPoint</a>(t, i, FLT_MAX, new_triangles))</div>
- <div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> {</div>
- <div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="comment">// We can't recover from a failure to add a point to the hull because the old triangles have been unlinked already.</span></div>
- <div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <span class="comment">// Assume no collision. This can happen if the shapes touch in 1 point (or plane) in which case the hull is degenerate.</span></div>
- <div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
- <div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> }</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> }</div>
- <div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> </div>
- <div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span><span class="preprocessor">#ifdef JPH_EPA_CONVEX_BUILDER_DRAW</span></div>
- <div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> hull.DrawLabel(<span class="stringliteral">"Complete hull"</span>);</div>
- <div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> </div>
- <div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> <span class="comment">// Generate the hull of the Minkowski difference for visualization</span></div>
- <div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> <a class="code hl_struct" href="struct_minkowski_difference.html">MinkowskiDifference</a> diff(inAIncludingConvexRadius, inBIncludingConvexRadius);</div>
- <div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <a class="code hl_class" href="class_ref.html">DebugRenderer::GeometryRef</a> geometry = <a class="code hl_variable" href="class_debug_renderer.html#ab03458cbd419bc22da1d176b27ce74ea">DebugRenderer::sInstance</a>-><a class="code hl_function" href="class_debug_renderer.html#a10539e59c9323113348a85744d1ca054">CreateTriangleGeometryForConvex</a>([&diff](<a class="code hl_class" href="class_vec3.html">Vec3Arg</a> inDirection) { <span class="keywordflow">return</span> diff.<a class="code hl_function" href="struct_minkowski_difference.html#ad9e15e934b19be1df6e09a926a1e26dd">GetSupport</a>(inDirection); });</div>
- <div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> hull.DrawGeometry(geometry, <a class="code hl_variable" href="class_color.html#afbce637a66704fc3e3cf7d26819d4ab5">Color::sYellow</a>);</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> hull.DrawLabel(<span class="stringliteral">"Ensure origin in hull"</span>);</div>
- <div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span><span class="preprocessor">#endif</span></div>
- <div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> </div>
- <div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> <span class="comment">// Loop until we are sure that the origin is inside the hull</span></div>
- <div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> <span class="keywordflow">for</span> (;;)</div>
- <div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> {</div>
- <div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> <span class="comment">// Get the next closest triangle</span></div>
- <div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> <a class="code hl_class" href="class_e_p_a_convex_hull_builder_1_1_triangle.html">Triangle</a> *t = hull.<a class="code hl_function" href="class_e_p_a_convex_hull_builder.html#a0b52c132a7365cd272f3ca14a8f25145">PeekClosestTriangleInQueue</a>();</div>
- <div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> </div>
- <div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> <span class="comment">// Don't process removed triangles, just free them (because they're in a heap we don't remove them earlier since we would have to rebuild the sorted heap)</span></div>
- <div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> <span class="keywordflow">if</span> (t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#aec2b4eeafa28ea5ea8a04789e944ae4d">mRemoved</a>)</div>
- <div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> {</div>
- <div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> hull.<a class="code hl_function" href="class_e_p_a_convex_hull_builder.html#a7095af90fda9266b9ae7258025623499">PopClosestTriangleFromQueue</a>();</div>
- <div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> </div>
- <div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> <span class="comment">// If we run out of triangles, we couldn't include the origin in the hull so there must be very little penetration and we report no collision.</span></div>
- <div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> <span class="keywordflow">if</span> (!hull.<a class="code hl_function" href="class_e_p_a_convex_hull_builder.html#a233403c7274da823fb6b96b539dc5f95">HasNextTriangle</a>())</div>
- <div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> <span class="keywordflow">return</span> <span class="keyword">false</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"> 258</span> hull.<a class="code hl_function" href="class_e_p_a_convex_hull_builder.html#a8a5be413b034888eeb3ccc384e1ca9ec">FreeTriangle</a>(t);</div>
- <div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> <span class="keywordflow">continue</span>;</div>
- <div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> }</div>
- <div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> </div>
- <div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> <span class="comment">// If the closest to the triangle is zero or positive, the origin is in the hull and we can proceed to the main algorithm</span></div>
- <div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> <span class="keywordflow">if</span> (t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a89216110b3cac04a274376acaf28d7ae">mClosestLenSq</a> >= 0.0f)</div>
- <div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> <span class="keywordflow">break</span>;</div>
- <div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> </div>
- <div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span><span class="preprocessor">#ifdef JPH_EPA_CONVEX_BUILDER_DRAW</span></div>
- <div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> hull.DrawLabel(<span class="stringliteral">"Next iteration"</span>);</div>
- <div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span><span class="preprocessor">#endif</span></div>
- <div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span><span class="preprocessor">#ifdef JPH_EPA_PENETRATION_DEPTH_DEBUG</span></div>
- <div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> <a class="code hl_variable" href="_issue_reporting_8cpp.html#a5b9da8153a0850dccf744d526486ebd2">Trace</a>(<span class="stringliteral">"EncapsulateOrigin: verts = (%d, %d, %d), closest_dist_sq = %g, centroid = (%g, %g, %g), normal = (%g, %g, %g)"</span>,</div>
- <div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a73f39336e0cda2338ca31459de675f4f">mEdge</a>[0].<a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_edge.html#a3198dfe7323ed3f875dca4e00821a53c">mStartIdx</a>, t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a73f39336e0cda2338ca31459de675f4f">mEdge</a>[1].<a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_edge.html#a3198dfe7323ed3f875dca4e00821a53c">mStartIdx</a>, t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a73f39336e0cda2338ca31459de675f4f">mEdge</a>[2].<a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_edge.html#a3198dfe7323ed3f875dca4e00821a53c">mStartIdx</a>,</div>
- <div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a89216110b3cac04a274376acaf28d7ae">mClosestLenSq</a>,</div>
- <div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a0452b1c401d15dcc561dad66766d45a9">mCentroid</a>.<a class="code hl_function" href="class_vec3.html#a284e29f161ae7709a934f402bd2a848c">GetX</a>(), t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a0452b1c401d15dcc561dad66766d45a9">mCentroid</a>.<a class="code hl_function" href="class_vec3.html#aac08ebd63b9ab4fa089a5ed3224a8679">GetY</a>(), t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a0452b1c401d15dcc561dad66766d45a9">mCentroid</a>.<a class="code hl_function" href="class_vec3.html#aeca36d050a7c2b41d3ac0438874d8c60">GetZ</a>(),</div>
- <div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a72b60caa9b8ba3cc6380f23b4fe72a02">mNormal</a>.<a class="code hl_function" href="class_vec3.html#a284e29f161ae7709a934f402bd2a848c">GetX</a>(), t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a72b60caa9b8ba3cc6380f23b4fe72a02">mNormal</a>.<a class="code hl_function" href="class_vec3.html#aac08ebd63b9ab4fa089a5ed3224a8679">GetY</a>(), t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a72b60caa9b8ba3cc6380f23b4fe72a02">mNormal</a>.<a class="code hl_function" href="class_vec3.html#aeca36d050a7c2b41d3ac0438874d8c60">GetZ</a>());</div>
- <div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span><span class="preprocessor">#endif</span></div>
- <div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> </div>
- <div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> <span class="comment">// Remove the triangle from the queue before we start adding new ones (which may result in a new closest triangle at the front of the queue)</span></div>
- <div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> hull.<a class="code hl_function" href="class_e_p_a_convex_hull_builder.html#a7095af90fda9266b9ae7258025623499">PopClosestTriangleFromQueue</a>();</div>
- <div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> </div>
- <div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> <span class="comment">// Add a support point to get the origin inside the hull</span></div>
- <div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> <span class="keywordtype">int</span> new_index;</div>
- <div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> <a class="code hl_class" href="class_vec3.html">Vec3</a> w = support_points.Add(inAIncludingConvexRadius, inBIncludingConvexRadius, t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a72b60caa9b8ba3cc6380f23b4fe72a02">mNormal</a>, new_index);</div>
- <div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> </div>
- <div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span><span class="preprocessor">#ifdef JPH_EPA_CONVEX_BUILDER_DRAW</span></div>
- <div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> <span class="comment">// Draw the point that we're adding</span></div>
- <div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> hull.DrawMarker(w, <a class="code hl_variable" href="class_color.html#afa2aabd04284f9231b26176663f67083">Color::sRed</a>, 1.0f);</div>
- <div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> hull.DrawWireTriangle(*t, <a class="code hl_variable" href="class_color.html#afa2aabd04284f9231b26176663f67083">Color::sRed</a>);</div>
- <div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> hull.DrawState();</div>
- <div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span><span class="preprocessor">#endif</span></div>
- <div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> </div>
- <div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> <span class="comment">// Add the point to the hull, if we fail we terminate and report no collision</span></div>
- <div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> <a class="code hl_class" href="class_static_array.html">EPAConvexHullBuilder::NewTriangles</a> new_triangles;</div>
- <div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> <span class="keywordflow">if</span> (!t-><a class="code hl_function" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a60543dea65ee8e56fa77132610302412">IsFacing</a>(w) || !hull.<a class="code hl_function" href="class_e_p_a_convex_hull_builder.html#ae1b6e6eb12d8723eeab4265f9510b7c2">AddPoint</a>(t, new_index, FLT_MAX, new_triangles))</div>
- <div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> <span class="keywordflow">return</span> <span class="keyword">false</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="comment">// The triangle is facing the support point "w" and can now be safely removed</span></div>
- <div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> <a class="code hl_define" href="_issue_reporting_8h.html#aaf6b1df827e11b7ca5f6f8778bd8f8cd">JPH_ASSERT</a>(t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#aec2b4eeafa28ea5ea8a04789e944ae4d">mRemoved</a>);</div>
- <div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> hull.<a class="code hl_function" href="class_e_p_a_convex_hull_builder.html#a8a5be413b034888eeb3ccc384e1ca9ec">FreeTriangle</a>(t);</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> <span class="comment">// If we run out of triangles or points, we couldn't include the origin in the hull so there must be very little penetration and we report no collision.</span></div>
- <div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> <span class="keywordflow">if</span> (!hull.<a class="code hl_function" href="class_e_p_a_convex_hull_builder.html#a233403c7274da823fb6b96b539dc5f95">HasNextTriangle</a>() || support_points.mY.<a class="code hl_function" href="class_static_array.html#aea449055e7dab910eca1a4af05d53b6f">size</a>() >= cMaxPointsToIncludeOriginInHull)</div>
- <div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
- <div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> }</div>
- <div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> </div>
- <div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span><span class="preprocessor">#ifdef JPH_EPA_CONVEX_BUILDER_DRAW</span></div>
- <div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> hull.DrawLabel(<span class="stringliteral">"Main algorithm"</span>);</div>
- <div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span><span class="preprocessor">#endif</span></div>
- <div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> </div>
- <div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> <span class="comment">// Current closest distance to origin</span></div>
- <div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> <span class="keywordtype">float</span> closest_dist_sq = FLT_MAX;</div>
- <div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> </div>
- <div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> <span class="comment">// Remember last good triangle</span></div>
- <div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> <a class="code hl_class" href="class_e_p_a_convex_hull_builder_1_1_triangle.html">Triangle</a> *last = <span class="keyword">nullptr</span>;</div>
- <div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> </div>
- <div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> <span class="comment">// If we want to flip the penetration depth</span></div>
- <div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> <span class="keywordtype">bool</span> flip_v_sign = <span class="keyword">false</span>;</div>
- <div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> </div>
- <div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> <span class="comment">// Loop until closest point found</span></div>
- <div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> <span class="keywordflow">do</span></div>
- <div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> {</div>
- <div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> <span class="comment">// Get closest triangle to the origin</span></div>
- <div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> <a class="code hl_class" href="class_e_p_a_convex_hull_builder_1_1_triangle.html">Triangle</a> *t = hull.<a class="code hl_function" href="class_e_p_a_convex_hull_builder.html#a7095af90fda9266b9ae7258025623499">PopClosestTriangleFromQueue</a>();</div>
- <div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> </div>
- <div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> <span class="comment">// Don't process removed triangles, just free them (because they're in a heap we don't remove them earlier since we would have to rebuild the sorted heap)</span></div>
- <div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> <span class="keywordflow">if</span> (t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#aec2b4eeafa28ea5ea8a04789e944ae4d">mRemoved</a>)</div>
- <div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> {</div>
- <div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> hull.<a class="code hl_function" href="class_e_p_a_convex_hull_builder.html#a8a5be413b034888eeb3ccc384e1ca9ec">FreeTriangle</a>(t);</div>
- <div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> <span class="keywordflow">continue</span>;</div>
- <div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> }</div>
- <div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> </div>
- <div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span><span class="preprocessor">#ifdef JPH_EPA_CONVEX_BUILDER_DRAW</span></div>
- <div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> hull.DrawLabel(<span class="stringliteral">"Next iteration"</span>);</div>
- <div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span><span class="preprocessor">#endif</span></div>
- <div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span><span class="preprocessor">#ifdef JPH_EPA_PENETRATION_DEPTH_DEBUG</span></div>
- <div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> <a class="code hl_variable" href="_issue_reporting_8cpp.html#a5b9da8153a0850dccf744d526486ebd2">Trace</a>(<span class="stringliteral">"FindClosest: verts = (%d, %d, %d), closest_len_sq = %g, centroid = (%g, %g, %g), normal = (%g, %g, %g)"</span>,</div>
- <div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a73f39336e0cda2338ca31459de675f4f">mEdge</a>[0].<a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_edge.html#a3198dfe7323ed3f875dca4e00821a53c">mStartIdx</a>, t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a73f39336e0cda2338ca31459de675f4f">mEdge</a>[1].<a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_edge.html#a3198dfe7323ed3f875dca4e00821a53c">mStartIdx</a>, t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a73f39336e0cda2338ca31459de675f4f">mEdge</a>[2].<a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_edge.html#a3198dfe7323ed3f875dca4e00821a53c">mStartIdx</a>,</div>
- <div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a89216110b3cac04a274376acaf28d7ae">mClosestLenSq</a>,</div>
- <div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a0452b1c401d15dcc561dad66766d45a9">mCentroid</a>.<a class="code hl_function" href="class_vec3.html#a284e29f161ae7709a934f402bd2a848c">GetX</a>(), t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a0452b1c401d15dcc561dad66766d45a9">mCentroid</a>.<a class="code hl_function" href="class_vec3.html#aac08ebd63b9ab4fa089a5ed3224a8679">GetY</a>(), t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a0452b1c401d15dcc561dad66766d45a9">mCentroid</a>.<a class="code hl_function" href="class_vec3.html#aeca36d050a7c2b41d3ac0438874d8c60">GetZ</a>(),</div>
- <div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a72b60caa9b8ba3cc6380f23b4fe72a02">mNormal</a>.<a class="code hl_function" href="class_vec3.html#a284e29f161ae7709a934f402bd2a848c">GetX</a>(), t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a72b60caa9b8ba3cc6380f23b4fe72a02">mNormal</a>.<a class="code hl_function" href="class_vec3.html#aac08ebd63b9ab4fa089a5ed3224a8679">GetY</a>(), t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a72b60caa9b8ba3cc6380f23b4fe72a02">mNormal</a>.<a class="code hl_function" href="class_vec3.html#aeca36d050a7c2b41d3ac0438874d8c60">GetZ</a>());</div>
- <div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span><span class="preprocessor">#endif</span></div>
- <div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> <span class="comment">// Check if next triangle is further away than closest point, we've found the closest point</span></div>
- <div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> <span class="keywordflow">if</span> (t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a89216110b3cac04a274376acaf28d7ae">mClosestLenSq</a> >= closest_dist_sq)</div>
- <div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> <span class="keywordflow">break</span>;</div>
- <div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> </div>
- <div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> <span class="comment">// Replace last good with this triangle</span></div>
- <div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> <span class="keywordflow">if</span> (last != <span class="keyword">nullptr</span>)</div>
- <div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> hull.<a class="code hl_function" href="class_e_p_a_convex_hull_builder.html#a8a5be413b034888eeb3ccc384e1ca9ec">FreeTriangle</a>(last);</div>
- <div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> last = t;</div>
- <div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> </div>
- <div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> <span class="comment">// Add support point in direction of normal of the plane</span></div>
- <div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> <span class="comment">// Note that the article uses the closest point between the origin and plane, but this always has the exact same direction as the normal (if the origin is behind the plane)</span></div>
- <div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> <span class="comment">// and this way we do less calculations and lose less precision</span></div>
- <div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> <span class="keywordtype">int</span> new_index;</div>
- <div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> <a class="code hl_class" href="class_vec3.html">Vec3</a> w = support_points.Add(inAIncludingConvexRadius, inBIncludingConvexRadius, t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a72b60caa9b8ba3cc6380f23b4fe72a02">mNormal</a>, new_index);</div>
- <div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> </div>
- <div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> <span class="comment">// Project w onto the triangle normal</span></div>
- <div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> <span class="keywordtype">float</span> dot = t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a72b60caa9b8ba3cc6380f23b4fe72a02">mNormal</a>.<a class="code hl_function" href="class_vec3.html#a0e078ff09f69e669db71a2b0e37939ff">Dot</a>(w);</div>
- <div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> </div>
- <div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> <span class="comment">// Check if we just found a separating axis. This can happen if the shape shrunk by convex radius and then expanded by</span></div>
- <div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> <span class="comment">// convex radius is bigger then the original shape due to inaccuracies in the shrinking process.</span></div>
- <div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> <span class="keywordflow">if</span> (dot < 0.0f)</div>
- <div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
- <div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> </div>
- <div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> <span class="comment">// Get the distance squared (along normal) to the support point</span></div>
- <div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> <span class="keywordtype">float</span> dist_sq = <a class="code hl_function" href="_math_8h.html#a61379b8b743a16fe823daeebc1482570">Square</a>(dot) / t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a72b60caa9b8ba3cc6380f23b4fe72a02">mNormal</a>.<a class="code hl_function" href="class_vec3.html#aba501a6a474028084799f871c9083dc1">LengthSq</a>();</div>
- <div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> </div>
- <div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span><span class="preprocessor">#ifdef JPH_EPA_PENETRATION_DEPTH_DEBUG</span></div>
- <div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> <a class="code hl_variable" href="_issue_reporting_8cpp.html#a5b9da8153a0850dccf744d526486ebd2">Trace</a>(<span class="stringliteral">"FindClosest: w = (%g, %g, %g), dot = %g, dist_sq = %g"</span>,</div>
- <div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> w.<a class="code hl_function" href="class_vec3.html#a284e29f161ae7709a934f402bd2a848c">GetX</a>(), w.<a class="code hl_function" href="class_vec3.html#aac08ebd63b9ab4fa089a5ed3224a8679">GetY</a>(), w.<a class="code hl_function" href="class_vec3.html#aeca36d050a7c2b41d3ac0438874d8c60">GetZ</a>(),</div>
- <div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span> dot, dist_sq);</div>
- <div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span><span class="preprocessor">#endif</span></div>
- <div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span><span class="preprocessor">#ifdef JPH_EPA_CONVEX_BUILDER_DRAW</span></div>
- <div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> <span class="comment">// Draw the point that we're adding</span></div>
- <div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span> hull.DrawMarker(w, <a class="code hl_variable" href="class_color.html#a34ab2471dec755f2317e02acae189efb">Color::sPurple</a>, 1.0f);</div>
- <div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> hull.DrawWireTriangle(*t, <a class="code hl_variable" href="class_color.html#a34ab2471dec755f2317e02acae189efb">Color::sPurple</a>);</div>
- <div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> hull.DrawState();</div>
- <div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span><span class="preprocessor">#endif</span></div>
- <div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> </div>
- <div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> <span class="comment">// If the error became small enough, we've converged</span></div>
- <div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> <span class="keywordflow">if</span> (dist_sq - t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a89216110b3cac04a274376acaf28d7ae">mClosestLenSq</a> < t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a89216110b3cac04a274376acaf28d7ae">mClosestLenSq</a> * inTolerance)</div>
- <div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> {</div>
- <div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span><span class="preprocessor">#ifdef JPH_EPA_PENETRATION_DEPTH_DEBUG</span></div>
- <div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> <a class="code hl_variable" href="_issue_reporting_8cpp.html#a5b9da8153a0850dccf744d526486ebd2">Trace</a>(<span class="stringliteral">"Converged"</span>);</div>
- <div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span><span class="preprocessor">#endif </span><span class="comment">// JPH_EPA_PENETRATION_DEPTH_DEBUG</span></div>
- <div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span> <span class="keywordflow">break</span>;</div>
- <div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> }</div>
- <div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span> </div>
- <div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span> <span class="comment">// Keep track of the minimum distance</span></div>
- <div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> closest_dist_sq = min(closest_dist_sq, dist_sq);</div>
- <div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> </div>
- <div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> <span class="comment">// If the triangle thinks this point is not front facing, we've reached numerical precision and we're done</span></div>
- <div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> <span class="keywordflow">if</span> (!t-><a class="code hl_function" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a60543dea65ee8e56fa77132610302412">IsFacing</a>(w))</div>
- <div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span> {</div>
- <div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span><span class="preprocessor">#ifdef JPH_EPA_PENETRATION_DEPTH_DEBUG</span></div>
- <div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> <a class="code hl_variable" href="_issue_reporting_8cpp.html#a5b9da8153a0850dccf744d526486ebd2">Trace</a>(<span class="stringliteral">"Not facing triangle"</span>);</div>
- <div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span><span class="preprocessor">#endif </span><span class="comment">// JPH_EPA_PENETRATION_DEPTH_DEBUG</span></div>
- <div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> <span class="keywordflow">break</span>;</div>
- <div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> }</div>
- <div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> </div>
- <div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> <span class="comment">// Add point to hull</span></div>
- <div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> <a class="code hl_class" href="class_static_array.html">EPAConvexHullBuilder::NewTriangles</a> new_triangles;</div>
- <div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> <span class="keywordflow">if</span> (!hull.<a class="code hl_function" href="class_e_p_a_convex_hull_builder.html#ae1b6e6eb12d8723eeab4265f9510b7c2">AddPoint</a>(t, new_index, closest_dist_sq, new_triangles))</div>
- <div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> {</div>
- <div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span><span class="preprocessor">#ifdef JPH_EPA_PENETRATION_DEPTH_DEBUG</span></div>
- <div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> <a class="code hl_variable" href="_issue_reporting_8cpp.html#a5b9da8153a0850dccf744d526486ebd2">Trace</a>(<span class="stringliteral">"Could not add point"</span>);</div>
- <div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span><span class="preprocessor">#endif </span><span class="comment">// JPH_EPA_PENETRATION_DEPTH_DEBUG</span></div>
- <div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> <span class="keywordflow">break</span>;</div>
- <div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span> }</div>
- <div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> </div>
- <div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> <span class="comment">// If the hull is starting to form defects then we're reaching numerical precision and we have to stop</span></div>
- <div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> <span class="keywordtype">bool</span> has_defect = <span class="keyword">false</span>;</div>
- <div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code hl_class" href="class_e_p_a_convex_hull_builder_1_1_triangle.html">Triangle</a> *nt : new_triangles)</div>
- <div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> <span class="keywordflow">if</span> (nt->IsFacingOrigin())</div>
- <div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> {</div>
- <div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> has_defect = <span class="keyword">true</span>;</div>
- <div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> <span class="keywordflow">break</span>;</div>
- <div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> }</div>
- <div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> <span class="keywordflow">if</span> (has_defect)</div>
- <div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> {</div>
- <div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span><span class="preprocessor">#ifdef JPH_EPA_PENETRATION_DEPTH_DEBUG</span></div>
- <div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> <a class="code hl_variable" href="_issue_reporting_8cpp.html#a5b9da8153a0850dccf744d526486ebd2">Trace</a>(<span class="stringliteral">"Has defect"</span>);</div>
- <div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span><span class="preprocessor">#endif </span><span class="comment">// JPH_EPA_PENETRATION_DEPTH_DEBUG</span></div>
- <div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> <span class="comment">// When the hull has defects it is possible that the origin has been classified on the wrong side of the triangle</span></div>
- <div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> <span class="comment">// so we do an additional check to see if the penetration in the -triangle normal direction is smaller than</span></div>
- <div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> <span class="comment">// the penetration in the triangle normal direction. If so we must flip the sign of the penetration depth.</span></div>
- <div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> <a class="code hl_class" href="class_vec3.html">Vec3</a> w2 = inAIncludingConvexRadius.GetSupport(-t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a72b60caa9b8ba3cc6380f23b4fe72a02">mNormal</a>) - inBIncludingConvexRadius.GetSupport(t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a72b60caa9b8ba3cc6380f23b4fe72a02">mNormal</a>);</div>
- <div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> <span class="keywordtype">float</span> dot2 = -t-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a72b60caa9b8ba3cc6380f23b4fe72a02">mNormal</a>.<a class="code hl_function" href="class_vec3.html#a0e078ff09f69e669db71a2b0e37939ff">Dot</a>(w2);</div>
- <div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span> <span class="keywordflow">if</span> (dot2 < dot)</div>
- <div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> flip_v_sign = <span class="keyword">true</span>;</div>
- <div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> <span class="keywordflow">break</span>;</div>
- <div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> }</div>
- <div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> }</div>
- <div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span> <span class="keywordflow">while</span> (hull.<a class="code hl_function" href="class_e_p_a_convex_hull_builder.html#a233403c7274da823fb6b96b539dc5f95">HasNextTriangle</a>() && support_points.mY.<a class="code hl_function" href="class_static_array.html#aea449055e7dab910eca1a4af05d53b6f">size</a>() < cMaxPoints);</div>
- <div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> </div>
- <div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span> <span class="comment">// Determine closest points, if last == null it means the hull was a plane so there's no penetration</span></div>
- <div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> <span class="keywordflow">if</span> (last == <span class="keyword">nullptr</span>)</div>
- <div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
- <div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span> </div>
- <div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span><span class="preprocessor">#ifdef JPH_EPA_CONVEX_BUILDER_DRAW</span></div>
- <div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> hull.DrawLabel(<span class="stringliteral">"Closest found"</span>);</div>
- <div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> hull.DrawWireTriangle(*last, <a class="code hl_variable" href="class_color.html#a6cb92698ec2b1bd630695716aaaf3bbd">Color::sWhite</a>);</div>
- <div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> hull.DrawArrow(last-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a0452b1c401d15dcc561dad66766d45a9">mCentroid</a>, last-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a0452b1c401d15dcc561dad66766d45a9">mCentroid</a> + last-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a72b60caa9b8ba3cc6380f23b4fe72a02">mNormal</a>.<a class="code hl_function" href="class_vec3.html#a6c6409cad56e4e357f73d43cd719ffe8">NormalizedOr</a>(<a class="code hl_function" href="class_vec3.html#ad03c52ab27761bc1e64e33c47632ba51">Vec3::sZero</a>()), <a class="code hl_variable" href="class_color.html#a6cb92698ec2b1bd630695716aaaf3bbd">Color::sWhite</a>, 0.1f);</div>
- <div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span> hull.DrawState();</div>
- <div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span><span class="preprocessor">#endif</span></div>
- <div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span> </div>
- <div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> <span class="comment">// Calculate penetration by getting the vector from the origin to the closest point on the triangle:</span></div>
- <div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span> <span class="comment">// distance = (centroid - origin) . normal / |normal|, closest = origin + distance * normal / |normal|</span></div>
- <div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</span> outV = (last-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a0452b1c401d15dcc561dad66766d45a9">mCentroid</a>.<a class="code hl_function" href="class_vec3.html#a0e078ff09f69e669db71a2b0e37939ff">Dot</a>(last-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a72b60caa9b8ba3cc6380f23b4fe72a02">mNormal</a>) / last-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a72b60caa9b8ba3cc6380f23b4fe72a02">mNormal</a>.<a class="code hl_function" href="class_vec3.html#aba501a6a474028084799f871c9083dc1">LengthSq</a>()) * last-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a72b60caa9b8ba3cc6380f23b4fe72a02">mNormal</a>;</div>
- <div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span> </div>
- <div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span> <span class="comment">// If penetration is near zero, treat this as a non collision since we cannot find a good normal</span></div>
- <div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span> <span class="keywordflow">if</span> (outV.<a class="code hl_function" href="class_vec3.html#acee93ea875b86bc0f63edebe2b592dbc">IsNearZero</a>())</div>
- <div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
- <div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span> </div>
- <div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> <span class="comment">// Check if we have to flip the sign of the penetration depth</span></div>
- <div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span> <span class="keywordflow">if</span> (flip_v_sign)</div>
- <div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span> outV = -outV;</div>
- <div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> </div>
- <div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> <span class="comment">// Use the barycentric coordinates for the closest point to the origin to find the contact points on A and B</span></div>
- <div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> <a class="code hl_class" href="class_vec3.html">Vec3</a> p0 = support_points.mP[last-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a73f39336e0cda2338ca31459de675f4f">mEdge</a>[0].<a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_edge.html#a3198dfe7323ed3f875dca4e00821a53c">mStartIdx</a>];</div>
- <div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span> <a class="code hl_class" href="class_vec3.html">Vec3</a> p1 = support_points.mP[last-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a73f39336e0cda2338ca31459de675f4f">mEdge</a>[1].<a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_edge.html#a3198dfe7323ed3f875dca4e00821a53c">mStartIdx</a>];</div>
- <div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span> <a class="code hl_class" href="class_vec3.html">Vec3</a> p2 = support_points.mP[last-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a73f39336e0cda2338ca31459de675f4f">mEdge</a>[2].<a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_edge.html#a3198dfe7323ed3f875dca4e00821a53c">mStartIdx</a>];</div>
- <div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span> </div>
- <div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span> <a class="code hl_class" href="class_vec3.html">Vec3</a> q0 = support_points.mQ[last-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a73f39336e0cda2338ca31459de675f4f">mEdge</a>[0].<a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_edge.html#a3198dfe7323ed3f875dca4e00821a53c">mStartIdx</a>];</div>
- <div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> <a class="code hl_class" href="class_vec3.html">Vec3</a> q1 = support_points.mQ[last-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a73f39336e0cda2338ca31459de675f4f">mEdge</a>[1].<a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_edge.html#a3198dfe7323ed3f875dca4e00821a53c">mStartIdx</a>];</div>
- <div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span> <a class="code hl_class" href="class_vec3.html">Vec3</a> q2 = support_points.mQ[last-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a73f39336e0cda2338ca31459de675f4f">mEdge</a>[2].<a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_edge.html#a3198dfe7323ed3f875dca4e00821a53c">mStartIdx</a>];</div>
- <div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span> </div>
- <div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span> <span class="keywordflow">if</span> (last-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#ad717cb9534ef44896e91c33ab4d5ba0c">mLambdaRelativeTo0</a>)</div>
- <div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span> {</div>
- <div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span> <span class="comment">// y0 was the reference vertex</span></div>
- <div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span> outPointA = p0 + last-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#abf3e8715dbc37a34783e322dc2211074">mLambda</a>[0] * (p1 - p0) + last-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#abf3e8715dbc37a34783e322dc2211074">mLambda</a>[1] * (p2 - p0);</div>
- <div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span> outPointB = q0 + last-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#abf3e8715dbc37a34783e322dc2211074">mLambda</a>[0] * (q1 - q0) + last-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#abf3e8715dbc37a34783e322dc2211074">mLambda</a>[1] * (q2 - q0);</div>
- <div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span> }</div>
- <div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span> <span class="keywordflow">else</span></div>
- <div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span> {</div>
- <div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span> <span class="comment">// y1 was the reference vertex</span></div>
- <div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> outPointA = p1 + last-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#abf3e8715dbc37a34783e322dc2211074">mLambda</a>[0] * (p0 - p1) + last-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#abf3e8715dbc37a34783e322dc2211074">mLambda</a>[1] * (p2 - p1);</div>
- <div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span> outPointB = q1 + last-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#abf3e8715dbc37a34783e322dc2211074">mLambda</a>[0] * (q0 - q1) + last-><a class="code hl_variable" href="class_e_p_a_convex_hull_builder_1_1_triangle.html#abf3e8715dbc37a34783e322dc2211074">mLambda</a>[1] * (q2 - q1);</div>
- <div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span> }</div>
- <div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span> </div>
- <div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
- <div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span> }</div>
- </div>
- <div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> </div>
- <div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span> <span class="keyword">template</span> <<span class="keyword">typename</span> AE, <span class="keyword">typename</span> AI, <span class="keyword">typename</span> BE, <span class="keyword">typename</span> BI></div>
- <div class="foldopen" id="foldopen00487" data-start="{" data-end="}">
- <div class="line"><a id="l00487" name="l00487"></a><span class="lineno"><a class="line" href="class_e_p_a_penetration_depth.html#a8368ab4825b799eb57d6f6cf841087e2"> 487</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="class_e_p_a_penetration_depth.html#a8368ab4825b799eb57d6f6cf841087e2">GetPenetrationDepth</a>(<span class="keyword">const</span> AE &inAExcludingConvexRadius, <span class="keyword">const</span> AI &inAIncludingConvexRadius, <span class="keywordtype">float</span> inConvexRadiusA, <span class="keyword">const</span> BE &inBExcludingConvexRadius, <span class="keyword">const</span> BI &inBIncludingConvexRadius, <span class="keywordtype">float</span> inConvexRadiusB, <span class="keywordtype">float</span> inCollisionToleranceSq, <span class="keywordtype">float</span> inPenetrationTolerance, <a class="code hl_class" href="class_vec3.html">Vec3</a> &ioV, <a class="code hl_class" href="class_vec3.html">Vec3</a> &outPointA, <a class="code hl_class" href="class_vec3.html">Vec3</a> &outPointB)</div>
- <div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span> {</div>
- <div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> <span class="comment">// Check result of collision detection</span></div>
- <div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span> <span class="keywordflow">switch</span> (<a class="code hl_function" href="class_e_p_a_penetration_depth.html#a903dc39955aae9b4e9eced5a396eb5a7">GetPenetrationDepthStepGJK</a>(inAExcludingConvexRadius, inConvexRadiusA, inBExcludingConvexRadius, inConvexRadiusB, inCollisionToleranceSq, ioV, outPointA, outPointB))</div>
- <div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span> {</div>
- <div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="class_e_p_a_penetration_depth.html#aab59ecfbbefc06c5ac96f9cdc24252d0ae0f4d0dafbcf08dd28d80154056ad0d8">EPAPenetrationDepth::EStatus::Colliding</a>:</div>
- <div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
- <div class="line"><a id="l00494" name="l00494"></a><span class="lineno"> 494</span> </div>
- <div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="class_e_p_a_penetration_depth.html#aab59ecfbbefc06c5ac96f9cdc24252d0a0497a652be066f6f966a97fa6c67c9c0">EPAPenetrationDepth::EStatus::NotColliding</a>:</div>
- <div class="line"><a id="l00496" name="l00496"></a><span class="lineno"> 496</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
- <div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</span> </div>
- <div class="line"><a id="l00498" name="l00498"></a><span class="lineno"> 498</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="class_e_p_a_penetration_depth.html#aab59ecfbbefc06c5ac96f9cdc24252d0aa2d00c353d1f9a5f07852650030dbd53">EPAPenetrationDepth::EStatus::Indeterminate</a>:</div>
- <div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</span> <span class="keywordflow">return</span> <a class="code hl_function" href="class_e_p_a_penetration_depth.html#acff8a6121c0896e3aabbe3a18019f201">GetPenetrationDepthStepEPA</a>(inAIncludingConvexRadius, inBIncludingConvexRadius, inPenetrationTolerance, ioV, outPointA, outPointB);</div>
- <div class="line"><a id="l00500" name="l00500"></a><span class="lineno"> 500</span> }</div>
- <div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span> </div>
- <div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> <a class="code hl_define" href="_issue_reporting_8h.html#aaf6b1df827e11b7ca5f6f8778bd8f8cd">JPH_ASSERT</a>(<span class="keyword">false</span>);</div>
- <div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
- <div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span> }</div>
- </div>
- <div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span> </div>
- <div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span> <span class="keyword">template</span> <<span class="keyword">typename</span> A, <span class="keyword">typename</span> B></div>
- <div class="foldopen" id="foldopen00524" data-start="{" data-end="}">
- <div class="line"><a id="l00524" name="l00524"></a><span class="lineno"><a class="line" href="class_e_p_a_penetration_depth.html#a37aeff94cc5402fd0a98bb299803f543"> 524</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="class_e_p_a_penetration_depth.html#a37aeff94cc5402fd0a98bb299803f543">CastShape</a>(<a class="code hl_class" href="class_mat44.html">Mat44Arg</a> inStart, <a class="code hl_class" href="class_vec3.html">Vec3Arg</a> inDirection, <span class="keywordtype">float</span> inCollisionTolerance, <span class="keywordtype">float</span> inPenetrationTolerance, <span class="keyword">const</span> A &inA, <span class="keyword">const</span> B &inB, <span class="keywordtype">float</span> inConvexRadiusA, <span class="keywordtype">float</span> inConvexRadiusB, <span class="keywordtype">bool</span> inReturnDeepestPoint, <span class="keywordtype">float</span> &ioLambda, <a class="code hl_class" href="class_vec3.html">Vec3</a> &outPointA, <a class="code hl_class" href="class_vec3.html">Vec3</a> &outPointB, <a class="code hl_class" href="class_vec3.html">Vec3</a> &outContactNormal)</div>
- <div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> {</div>
- <div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span> <a class="code hl_define" href="_issue_reporting_8h.html#a9189784257d6995aa3ecbafbf8bc5bd5">JPH_IF_ENABLE_ASSERTS</a>(mGJKTolerance = inCollisionTolerance;)</div>
- <div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span> </div>
- <div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span> <span class="comment">// First determine if there's a collision at all</span></div>
- <div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span> <span class="keywordflow">if</span> (!mGJK.<a class="code hl_function" href="class_g_j_k_closest_point.html#a66d20557ad6d34a1c1f29b6df058b523">CastShape</a>(inStart, inDirection, inCollisionTolerance, inA, inB, inConvexRadiusA, inConvexRadiusB, ioLambda, outPointA, outPointB, outContactNormal))</div>
- <div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
- <div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span> </div>
- <div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span> <span class="comment">// When our contact normal is too small, we don't have an accurate result</span></div>
- <div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span> <span class="keywordtype">bool</span> contact_normal_invalid = outContactNormal.<a class="code hl_function" href="class_vec3.html#acee93ea875b86bc0f63edebe2b592dbc">IsNearZero</a>(<a class="code hl_function" href="_math_8h.html#a61379b8b743a16fe823daeebc1482570">Square</a>(inCollisionTolerance));</div>
- <div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span> </div>
- <div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span> <span class="keywordflow">if</span> (inReturnDeepestPoint</div>
- <div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> && ioLambda == 0.0f <span class="comment">// Only when lambda = 0 we can have the bodies overlap</span></div>
- <div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span> && (inConvexRadiusA + inConvexRadiusB == 0.0f <span class="comment">// When no convex radius was provided we can never trust contact points at lambda = 0</span></div>
- <div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span> || contact_normal_invalid))</div>
- <div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span> {</div>
- <div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span> <span class="comment">// If we're initially intersecting, we need to run the EPA algorithm in order to find the deepest contact point</span></div>
- <div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span> <a class="code hl_struct" href="struct_add_convex_radius.html">AddConvexRadius</a> add_convex_a(inA, inConvexRadiusA);</div>
- <div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span> <a class="code hl_struct" href="struct_add_convex_radius.html">AddConvexRadius</a> add_convex_b(inB, inConvexRadiusB);</div>
- <div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span> <a class="code hl_struct" href="struct_transformed_convex_object.html">TransformedConvexObject</a> transformed_a(inStart, add_convex_a);</div>
- <div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="class_e_p_a_penetration_depth.html#acff8a6121c0896e3aabbe3a18019f201">GetPenetrationDepthStepEPA</a>(transformed_a, add_convex_b, inPenetrationTolerance, outContactNormal, outPointA, outPointB))</div>
- <div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span> outContactNormal = inDirection; <span class="comment">// Failed to get the deepest point, use points returned by GJK and use cast direction as normal</span></div>
- <div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span> }</div>
- <div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (contact_normal_invalid)</div>
- <div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span> {</div>
- <div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span> <span class="comment">// If we weren't able to calculate a contact normal, use the cast direction instead</span></div>
- <div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span> outContactNormal = inDirection;</div>
- <div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span> }</div>
- <div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span> </div>
- <div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
- <div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span> }</div>
- </div>
- <div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span>};</div>
- </div>
- <div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span> </div>
- <div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span><a class="code hl_define" href="_core_8h.html#a73da8725998b00321a9db341202d650d">JPH_NAMESPACE_END</a></div>
- <div class="ttc" id="a_core_8h_html_a69aa29b598b851b0640aa225a9e5d61d"><div class="ttname"><a href="_core_8h.html#a69aa29b598b851b0640aa225a9e5d61d">uint</a></div><div class="ttdeci">unsigned int uint</div><div class="ttdef"><b>Definition</b> Core.h:500</div></div>
- <div class="ttc" id="a_core_8h_html_a73da8725998b00321a9db341202d650d"><div class="ttname"><a href="_core_8h.html#a73da8725998b00321a9db341202d650d">JPH_NAMESPACE_END</a></div><div class="ttdeci">#define JPH_NAMESPACE_END</div><div class="ttdef"><b>Definition</b> Core.h:425</div></div>
- <div class="ttc" id="a_core_8h_html_ad14098b68b8c44ea6112601031268405"><div class="ttname"><a href="_core_8h.html#ad14098b68b8c44ea6112601031268405">JPH_NAMESPACE_BEGIN</a></div><div class="ttdeci">#define JPH_NAMESPACE_BEGIN</div><div class="ttdef"><b>Definition</b> Core.h:419</div></div>
- <div class="ttc" id="a_e_p_a_convex_hull_builder_8h_html"><div class="ttname"><a href="_e_p_a_convex_hull_builder_8h.html">EPAConvexHullBuilder.h</a></div></div>
- <div class="ttc" id="a_g_j_k_closest_point_8h_html"><div class="ttname"><a href="_g_j_k_closest_point_8h.html">GJKClosestPoint.h</a></div></div>
- <div class="ttc" id="a_issue_reporting_8cpp_html_a5b9da8153a0850dccf744d526486ebd2"><div class="ttname"><a href="_issue_reporting_8cpp.html#a5b9da8153a0850dccf744d526486ebd2">Trace</a></div><div class="ttdeci">TraceFunction Trace</div><div class="ttdef"><b>Definition</b> IssueReporting.cpp:14</div></div>
- <div class="ttc" id="a_issue_reporting_8h_html_a9189784257d6995aa3ecbafbf8bc5bd5"><div class="ttname"><a href="_issue_reporting_8h.html#a9189784257d6995aa3ecbafbf8bc5bd5">JPH_IF_ENABLE_ASSERTS</a></div><div class="ttdeci">#define JPH_IF_ENABLE_ASSERTS(...)</div><div class="ttdef"><b>Definition</b> IssueReporting.h:35</div></div>
- <div class="ttc" id="a_issue_reporting_8h_html_aaf6b1df827e11b7ca5f6f8778bd8f8cd"><div class="ttname"><a href="_issue_reporting_8h.html#aaf6b1df827e11b7ca5f6f8778bd8f8cd">JPH_ASSERT</a></div><div class="ttdeci">#define JPH_ASSERT(...)</div><div class="ttdef"><b>Definition</b> IssueReporting.h:33</div></div>
- <div class="ttc" id="a_math_8h_html_a61379b8b743a16fe823daeebc1482570"><div class="ttname"><a href="_math_8h.html#a61379b8b743a16fe823daeebc1482570">Square</a></div><div class="ttdeci">JPH_INLINE constexpr T Square(T inV)</div><div class="ttdoc">Square a value.</div><div class="ttdef"><b>Definition</b> Math.h:55</div></div>
- <div class="ttc" id="a_math_8h_html_a636689581f2a6ce1d3030dc4dd83b2f5"><div class="ttname"><a href="_math_8h.html#a636689581f2a6ce1d3030dc4dd83b2f5">DegreesToRadians</a></div><div class="ttdeci">JPH_INLINE constexpr float DegreesToRadians(float inV)</div><div class="ttdoc">Convert a value from degrees to radians.</div><div class="ttdef"><b>Definition</b> Math.h:16</div></div>
- <div class="ttc" id="a_profiler_8h_html"><div class="ttname"><a href="_profiler_8h.html">Profiler.h</a></div></div>
- <div class="ttc" id="a_profiler_8h_html_a9d22d20c7f03e2ec7bf058811b12cb4e"><div class="ttname"><a href="_profiler_8h.html#a9d22d20c7f03e2ec7bf058811b12cb4e">JPH_PROFILE_FUNCTION</a></div><div class="ttdeci">#define JPH_PROFILE_FUNCTION()</div><div class="ttdoc">Scope profiling for function.</div><div class="ttdef"><b>Definition</b> Profiler.h:271</div></div>
- <div class="ttc" id="a_static_array_8h_html"><div class="ttname"><a href="_static_array_8h.html">StaticArray.h</a></div></div>
- <div class="ttc" id="aclass_color_html_a34ab2471dec755f2317e02acae189efb"><div class="ttname"><a href="class_color.html#a34ab2471dec755f2317e02acae189efb">Color::sPurple</a></div><div class="ttdeci">static const Color sPurple</div><div class="ttdef"><b>Definition</b> Color.h:75</div></div>
- <div class="ttc" id="aclass_color_html_a6cb92698ec2b1bd630695716aaaf3bbd"><div class="ttname"><a href="class_color.html#a6cb92698ec2b1bd630695716aaaf3bbd">Color::sWhite</a></div><div class="ttdeci">static const Color sWhite</div><div class="ttdef"><b>Definition</b> Color.h:81</div></div>
- <div class="ttc" id="aclass_color_html_afa2aabd04284f9231b26176663f67083"><div class="ttname"><a href="class_color.html#afa2aabd04284f9231b26176663f67083">Color::sRed</a></div><div class="ttdeci">static const Color sRed</div><div class="ttdef"><b>Definition</b> Color.h:69</div></div>
- <div class="ttc" id="aclass_color_html_afbce637a66704fc3e3cf7d26819d4ab5"><div class="ttname"><a href="class_color.html#afbce637a66704fc3e3cf7d26819d4ab5">Color::sYellow</a></div><div class="ttdeci">static const Color sYellow</div><div class="ttdef"><b>Definition</b> Color.h:74</div></div>
- <div class="ttc" id="aclass_debug_renderer_html_a10539e59c9323113348a85744d1ca054"><div class="ttname"><a href="class_debug_renderer.html#a10539e59c9323113348a85744d1ca054">DebugRenderer::CreateTriangleGeometryForConvex</a></div><div class="ttdeci">GeometryRef CreateTriangleGeometryForConvex(SupportFunction inGetSupport)</div><div class="ttdef"><b>Definition</b> DebugRenderer.cpp:698</div></div>
- <div class="ttc" id="aclass_debug_renderer_html_ab03458cbd419bc22da1d176b27ce74ea"><div class="ttname"><a href="class_debug_renderer.html#ab03458cbd419bc22da1d176b27ce74ea">DebugRenderer::sInstance</a></div><div class="ttdeci">static DebugRenderer * sInstance</div><div class="ttdoc">Singleton instance.</div><div class="ttdef"><b>Definition</b> DebugRenderer.h:179</div></div>
- <div class="ttc" id="aclass_e_p_a_convex_hull_builder_1_1_edge_html_a3198dfe7323ed3f875dca4e00821a53c"><div class="ttname"><a href="class_e_p_a_convex_hull_builder_1_1_edge.html#a3198dfe7323ed3f875dca4e00821a53c">EPAConvexHullBuilder::Edge::mStartIdx</a></div><div class="ttdeci">int mStartIdx</div><div class="ttdoc">Vertex index in mPositions that indicates the start vertex of this edge.</div><div class="ttdef"><b>Definition</b> EPAConvexHullBuilder.h:55</div></div>
- <div class="ttc" id="aclass_e_p_a_convex_hull_builder_1_1_points_html"><div class="ttname"><a href="class_e_p_a_convex_hull_builder_1_1_points.html">EPAConvexHullBuilder::Points</a></div><div class="ttdoc">Specialized points list that allows direct access to the size.</div><div class="ttdef"><b>Definition</b> EPAConvexHullBuilder.h:173</div></div>
- <div class="ttc" id="aclass_e_p_a_convex_hull_builder_1_1_points_html_a5b85570fd72e9b7e9575981fe7464383"><div class="ttname"><a href="class_e_p_a_convex_hull_builder_1_1_points.html#a5b85570fd72e9b7e9575981fe7464383">EPAConvexHullBuilder::Points::GetSizeRef</a></div><div class="ttdeci">size_type & GetSizeRef()</div><div class="ttdef"><b>Definition</b> EPAConvexHullBuilder.h:175</div></div>
- <div class="ttc" id="aclass_e_p_a_convex_hull_builder_1_1_triangle_html"><div class="ttname"><a href="class_e_p_a_convex_hull_builder_1_1_triangle.html">EPAConvexHullBuilder::Triangle</a></div><div class="ttdoc">Class that holds the information of one triangle.</div><div class="ttdef"><b>Definition</b> EPAConvexHullBuilder.h:63</div></div>
- <div class="ttc" id="aclass_e_p_a_convex_hull_builder_1_1_triangle_html_a0452b1c401d15dcc561dad66766d45a9"><div class="ttname"><a href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a0452b1c401d15dcc561dad66766d45a9">EPAConvexHullBuilder::Triangle::mCentroid</a></div><div class="ttdeci">Vec3 mCentroid</div><div class="ttdoc">Center of the triangle.</div><div class="ttdef"><b>Definition</b> EPAConvexHullBuilder.h:90</div></div>
- <div class="ttc" id="aclass_e_p_a_convex_hull_builder_1_1_triangle_html_a60543dea65ee8e56fa77132610302412"><div class="ttname"><a href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a60543dea65ee8e56fa77132610302412">EPAConvexHullBuilder::Triangle::IsFacing</a></div><div class="ttdeci">bool IsFacing(Vec3Arg inPosition) const</div><div class="ttdoc">Check if triangle is facing inPosition.</div><div class="ttdef"><b>Definition</b> EPAConvexHullBuilder.h:69</div></div>
- <div class="ttc" id="aclass_e_p_a_convex_hull_builder_1_1_triangle_html_a72b60caa9b8ba3cc6380f23b4fe72a02"><div class="ttname"><a href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a72b60caa9b8ba3cc6380f23b4fe72a02">EPAConvexHullBuilder::Triangle::mNormal</a></div><div class="ttdeci">Vec3 mNormal</div><div class="ttdoc">Normal of this triangle, length is 2 times area of triangle.</div><div class="ttdef"><b>Definition</b> EPAConvexHullBuilder.h:89</div></div>
- <div class="ttc" id="aclass_e_p_a_convex_hull_builder_1_1_triangle_html_a73f39336e0cda2338ca31459de675f4f"><div class="ttname"><a href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a73f39336e0cda2338ca31459de675f4f">EPAConvexHullBuilder::Triangle::mEdge</a></div><div class="ttdeci">Edge mEdge[3]</div><div class="ttdoc">3 edges of this triangle</div><div class="ttdef"><b>Definition</b> EPAConvexHullBuilder.h:88</div></div>
- <div class="ttc" id="aclass_e_p_a_convex_hull_builder_1_1_triangle_html_a89216110b3cac04a274376acaf28d7ae"><div class="ttname"><a href="class_e_p_a_convex_hull_builder_1_1_triangle.html#a89216110b3cac04a274376acaf28d7ae">EPAConvexHullBuilder::Triangle::mClosestLenSq</a></div><div class="ttdeci">float mClosestLenSq</div><div class="ttdoc">Closest distance^2 from origin to triangle.</div><div class="ttdef"><b>Definition</b> EPAConvexHullBuilder.h:91</div></div>
- <div class="ttc" id="aclass_e_p_a_convex_hull_builder_1_1_triangle_html_abf3e8715dbc37a34783e322dc2211074"><div class="ttname"><a href="class_e_p_a_convex_hull_builder_1_1_triangle.html#abf3e8715dbc37a34783e322dc2211074">EPAConvexHullBuilder::Triangle::mLambda</a></div><div class="ttdeci">float mLambda[2]</div><div class="ttdoc">Barycentric coordinates of closest point to origin on triangle.</div><div class="ttdef"><b>Definition</b> EPAConvexHullBuilder.h:92</div></div>
- <div class="ttc" id="aclass_e_p_a_convex_hull_builder_1_1_triangle_html_ad717cb9534ef44896e91c33ab4d5ba0c"><div class="ttname"><a href="class_e_p_a_convex_hull_builder_1_1_triangle.html#ad717cb9534ef44896e91c33ab4d5ba0c">EPAConvexHullBuilder::Triangle::mLambdaRelativeTo0</a></div><div class="ttdeci">bool mLambdaRelativeTo0</div><div class="ttdoc">How to calculate the closest point, true: y0 + l0 * (y1 - y0) + l1 * (y2 - y0), false: y1 + l0 * (y0 ...</div><div class="ttdef"><b>Definition</b> EPAConvexHullBuilder.h:93</div></div>
- <div class="ttc" id="aclass_e_p_a_convex_hull_builder_1_1_triangle_html_aec2b4eeafa28ea5ea8a04789e944ae4d"><div class="ttname"><a href="class_e_p_a_convex_hull_builder_1_1_triangle.html#aec2b4eeafa28ea5ea8a04789e944ae4d">EPAConvexHullBuilder::Triangle::mRemoved</a></div><div class="ttdeci">bool mRemoved</div><div class="ttdoc">Flag that indicates that triangle has been removed.</div><div class="ttdef"><b>Definition</b> EPAConvexHullBuilder.h:95</div></div>
- <div class="ttc" id="aclass_e_p_a_convex_hull_builder_html"><div class="ttname"><a href="class_e_p_a_convex_hull_builder.html">EPAConvexHullBuilder</a></div><div class="ttdoc">A convex hull builder specifically made for the EPA penetration depth calculation....</div><div class="ttdef"><b>Definition</b> EPAConvexHullBuilder.h:25</div></div>
- <div class="ttc" id="aclass_e_p_a_convex_hull_builder_html_a0b52c132a7365cd272f3ca14a8f25145"><div class="ttname"><a href="class_e_p_a_convex_hull_builder.html#a0b52c132a7365cd272f3ca14a8f25145">EPAConvexHullBuilder::PeekClosestTriangleInQueue</a></div><div class="ttdeci">Triangle * PeekClosestTriangleInQueue()</div><div class="ttdoc">Access to the next closest triangle to the origin (won't remove it from the queue).</div><div class="ttdef"><b>Definition</b> EPAConvexHullBuilder.h:268</div></div>
- <div class="ttc" id="aclass_e_p_a_convex_hull_builder_html_a233403c7274da823fb6b96b539dc5f95"><div class="ttname"><a href="class_e_p_a_convex_hull_builder.html#a233403c7274da823fb6b96b539dc5f95">EPAConvexHullBuilder::HasNextTriangle</a></div><div class="ttdeci">bool HasNextTriangle() const</div><div class="ttdoc">Check if there's another triangle to process from the queue.</div><div class="ttdef"><b>Definition</b> EPAConvexHullBuilder.h:262</div></div>
- <div class="ttc" id="aclass_e_p_a_convex_hull_builder_html_a6968898ef16408b14c1000bebf2f2576"><div class="ttname"><a href="class_e_p_a_convex_hull_builder.html#a6968898ef16408b14c1000bebf2f2576">EPAConvexHullBuilder::cMaxPoints</a></div><div class="ttdeci">static constexpr int cMaxPoints</div><div class="ttdoc">Max number of points in hull.</div><div class="ttdef"><b>Definition</b> EPAConvexHullBuilder.h:37</div></div>
- <div class="ttc" id="aclass_e_p_a_convex_hull_builder_html_a7095af90fda9266b9ae7258025623499"><div class="ttname"><a href="class_e_p_a_convex_hull_builder.html#a7095af90fda9266b9ae7258025623499">EPAConvexHullBuilder::PopClosestTriangleFromQueue</a></div><div class="ttdeci">Triangle * PopClosestTriangleFromQueue()</div><div class="ttdoc">Access to the next closest triangle to the origin and remove it from the queue.</div><div class="ttdef"><b>Definition</b> EPAConvexHullBuilder.h:274</div></div>
- <div class="ttc" id="aclass_e_p_a_convex_hull_builder_html_a8a5be413b034888eeb3ccc384e1ca9ec"><div class="ttname"><a href="class_e_p_a_convex_hull_builder.html#a8a5be413b034888eeb3ccc384e1ca9ec">EPAConvexHullBuilder::FreeTriangle</a></div><div class="ttdeci">void FreeTriangle(Triangle *inT)</div><div class="ttdoc">Free a triangle.</div><div class="ttdef"><b>Definition</b> EPAConvexHullBuilder.h:366</div></div>
- <div class="ttc" id="aclass_e_p_a_convex_hull_builder_html_aba8a5ac94c67e4c96e5eb533dfca3a83"><div class="ttname"><a href="class_e_p_a_convex_hull_builder.html#aba8a5ac94c67e4c96e5eb533dfca3a83">EPAConvexHullBuilder::FindFacingTriangle</a></div><div class="ttdeci">Triangle * FindFacingTriangle(Vec3Arg inPosition, float &outBestDistSq)</div><div class="ttdef"><b>Definition</b> EPAConvexHullBuilder.h:281</div></div>
- <div class="ttc" id="aclass_e_p_a_convex_hull_builder_html_ac6b69723ed9d2c1b815769f9953ef8e7"><div class="ttname"><a href="class_e_p_a_convex_hull_builder.html#ac6b69723ed9d2c1b815769f9953ef8e7">EPAConvexHullBuilder::Initialize</a></div><div class="ttdeci">void Initialize(int inIdx1, int inIdx2, int inIdx3)</div><div class="ttdoc">Initialize the hull with 3 points.</div><div class="ttdef"><b>Definition</b> EPAConvexHullBuilder.h:234</div></div>
- <div class="ttc" id="aclass_e_p_a_convex_hull_builder_html_ae1b6e6eb12d8723eeab4265f9510b7c2"><div class="ttname"><a href="class_e_p_a_convex_hull_builder.html#ae1b6e6eb12d8723eeab4265f9510b7c2">EPAConvexHullBuilder::AddPoint</a></div><div class="ttdeci">bool AddPoint(Triangle *inFacingTriangle, int inIdx, float inClosestDistSq, NewTriangles &outTriangles)</div><div class="ttdoc">Add a new point to the convex hull.</div><div class="ttdef"><b>Definition</b> EPAConvexHullBuilder.h:306</div></div>
- <div class="ttc" id="aclass_e_p_a_penetration_depth_html"><div class="ttname"><a href="class_e_p_a_penetration_depth.html">EPAPenetrationDepth</a></div><div class="ttdef"><b>Definition</b> EPAPenetrationDepth.h:37</div></div>
- <div class="ttc" id="aclass_e_p_a_penetration_depth_html_a37aeff94cc5402fd0a98bb299803f543"><div class="ttname"><a href="class_e_p_a_penetration_depth.html#a37aeff94cc5402fd0a98bb299803f543">EPAPenetrationDepth::CastShape</a></div><div class="ttdeci">bool CastShape(Mat44Arg inStart, Vec3Arg inDirection, float inCollisionTolerance, float inPenetrationTolerance, const A &inA, const B &inB, float inConvexRadiusA, float inConvexRadiusB, bool inReturnDeepestPoint, float &ioLambda, Vec3 &outPointA, Vec3 &outPointB, Vec3 &outContactNormal)</div><div class="ttdef"><b>Definition</b> EPAPenetrationDepth.h:524</div></div>
- <div class="ttc" id="aclass_e_p_a_penetration_depth_html_a8368ab4825b799eb57d6f6cf841087e2"><div class="ttname"><a href="class_e_p_a_penetration_depth.html#a8368ab4825b799eb57d6f6cf841087e2">EPAPenetrationDepth::GetPenetrationDepth</a></div><div class="ttdeci">bool GetPenetrationDepth(const AE &inAExcludingConvexRadius, const AI &inAIncludingConvexRadius, float inConvexRadiusA, const BE &inBExcludingConvexRadius, const BI &inBIncludingConvexRadius, float inConvexRadiusB, float inCollisionToleranceSq, float inPenetrationTolerance, Vec3 &ioV, Vec3 &outPointA, Vec3 &outPointB)</div><div class="ttdef"><b>Definition</b> EPAPenetrationDepth.h:487</div></div>
- <div class="ttc" id="aclass_e_p_a_penetration_depth_html_a903dc39955aae9b4e9eced5a396eb5a7"><div class="ttname"><a href="class_e_p_a_penetration_depth.html#a903dc39955aae9b4e9eced5a396eb5a7">EPAPenetrationDepth::GetPenetrationDepthStepGJK</a></div><div class="ttdeci">EStatus GetPenetrationDepthStepGJK(const AE &inAExcludingConvexRadius, float inConvexRadiusA, const BE &inBExcludingConvexRadius, float inConvexRadiusB, float inTolerance, Vec3 &ioV, Vec3 &outPointA, Vec3 &outPointB)</div><div class="ttdef"><b>Definition</b> EPAPenetrationDepth.h:104</div></div>
- <div class="ttc" id="aclass_e_p_a_penetration_depth_html_aab59ecfbbefc06c5ac96f9cdc24252d0"><div class="ttname"><a href="class_e_p_a_penetration_depth.html#aab59ecfbbefc06c5ac96f9cdc24252d0">EPAPenetrationDepth::EStatus</a></div><div class="ttdeci">EStatus</div><div class="ttdoc">Return code for GetPenetrationDepthStepGJK.</div><div class="ttdef"><b>Definition</b> EPAPenetrationDepth.h:86</div></div>
- <div class="ttc" id="aclass_e_p_a_penetration_depth_html_aab59ecfbbefc06c5ac96f9cdc24252d0a0497a652be066f6f966a97fa6c67c9c0"><div class="ttname"><a href="class_e_p_a_penetration_depth.html#aab59ecfbbefc06c5ac96f9cdc24252d0a0497a652be066f6f966a97fa6c67c9c0">EPAPenetrationDepth::EStatus::NotColliding</a></div><div class="ttdeci">@ NotColliding</div><div class="ttdoc">Returned if the objects don't collide, in this case outPointA/outPointB are invalid.</div></div>
- <div class="ttc" id="aclass_e_p_a_penetration_depth_html_aab59ecfbbefc06c5ac96f9cdc24252d0aa2d00c353d1f9a5f07852650030dbd53"><div class="ttname"><a href="class_e_p_a_penetration_depth.html#aab59ecfbbefc06c5ac96f9cdc24252d0aa2d00c353d1f9a5f07852650030dbd53">EPAPenetrationDepth::EStatus::Indeterminate</a></div><div class="ttdeci">@ Indeterminate</div><div class="ttdoc">Returned if the objects penetrate further than the convex radius. In this case you need to call GetPe...</div></div>
- <div class="ttc" id="aclass_e_p_a_penetration_depth_html_aab59ecfbbefc06c5ac96f9cdc24252d0ae0f4d0dafbcf08dd28d80154056ad0d8"><div class="ttname"><a href="class_e_p_a_penetration_depth.html#aab59ecfbbefc06c5ac96f9cdc24252d0ae0f4d0dafbcf08dd28d80154056ad0d8">EPAPenetrationDepth::EStatus::Colliding</a></div><div class="ttdeci">@ Colliding</div><div class="ttdoc">Returned if the objects penetrate.</div></div>
- <div class="ttc" id="aclass_e_p_a_penetration_depth_html_acff8a6121c0896e3aabbe3a18019f201"><div class="ttname"><a href="class_e_p_a_penetration_depth.html#acff8a6121c0896e3aabbe3a18019f201">EPAPenetrationDepth::GetPenetrationDepthStepEPA</a></div><div class="ttdeci">bool GetPenetrationDepthStepEPA(const AI &inAIncludingConvexRadius, const BI &inBIncludingConvexRadius, float inTolerance, Vec3 &outV, Vec3 &outPointA, Vec3 &outPointB)</div><div class="ttdef"><b>Definition</b> EPAPenetrationDepth.h:149</div></div>
- <div class="ttc" id="aclass_g_j_k_closest_point_html"><div class="ttname"><a href="class_g_j_k_closest_point.html">GJKClosestPoint</a></div><div class="ttdef"><b>Definition</b> GJKClosestPoint.h:22</div></div>
- <div class="ttc" id="aclass_g_j_k_closest_point_html_a66d20557ad6d34a1c1f29b6df058b523"><div class="ttname"><a href="class_g_j_k_closest_point.html#a66d20557ad6d34a1c1f29b6df058b523">GJKClosestPoint::CastShape</a></div><div class="ttdeci">bool CastShape(Mat44Arg inStart, Vec3Arg inDirection, float inTolerance, const A &inA, const B &inB, float &ioLambda)</div><div class="ttdef"><b>Definition</b> GJKClosestPoint.h:658</div></div>
- <div class="ttc" id="aclass_g_j_k_closest_point_html_a73d6f276fb275026a0126ca7361fb2bf"><div class="ttname"><a href="class_g_j_k_closest_point.html#a73d6f276fb275026a0126ca7361fb2bf">GJKClosestPoint::GetClosestPointsSimplex</a></div><div class="ttdeci">void GetClosestPointsSimplex(Vec3 *outY, Vec3 *outP, Vec3 *outQ, uint &outNumPoints) const</div><div class="ttdef"><b>Definition</b> GJKClosestPoint.h:495</div></div>
- <div class="ttc" id="aclass_g_j_k_closest_point_html_abb7cfdd49d708007d75b4c2e9b90ebb9"><div class="ttname"><a href="class_g_j_k_closest_point.html#abb7cfdd49d708007d75b4c2e9b90ebb9">GJKClosestPoint::GetClosestPoints</a></div><div class="ttdeci">float GetClosestPoints(const A &inA, const B &inB, float inTolerance, float inMaxDistSq, Vec3 &ioV, Vec3 &outPointA, Vec3 &outPointB)</div><div class="ttdef"><b>Definition</b> GJKClosestPoint.h:327</div></div>
- <div class="ttc" id="aclass_mat44_html"><div class="ttname"><a href="class_mat44.html">Mat44</a></div><div class="ttdoc">Holds a 4x4 matrix of floats, but supports also operations on the 3x3 upper left part of the matrix.</div><div class="ttdef"><b>Definition</b> Mat44.h:13</div></div>
- <div class="ttc" id="aclass_mat44_html_ac3109f2d950061c0b4de57e76a132634"><div class="ttname"><a href="class_mat44.html#ac3109f2d950061c0b4de57e76a132634">Mat44::sRotation</a></div><div class="ttdeci">static JPH_INLINE Mat44 sRotation(Vec3Arg inAxis, float inAngle)</div><div class="ttdoc">Rotate around arbitrary axis.</div><div class="ttdef"><b>Definition</b> Mat44.inl:139</div></div>
- <div class="ttc" id="aclass_ref_html"><div class="ttname"><a href="class_ref.html">Ref< Geometry ></a></div></div>
- <div class="ttc" id="aclass_static_array_html"><div class="ttname"><a href="class_static_array.html">StaticArray</a></div><div class="ttdoc">Simple variable length array backed by a fixed size buffer.</div><div class="ttdef"><b>Definition</b> StaticArray.h:14</div></div>
- <div class="ttc" id="aclass_static_array_html_a1117d7fa5ecfe22248396f1632d842cb"><div class="ttname"><a href="class_static_array.html#a1117d7fa5ecfe22248396f1632d842cb">StaticArray::push_back</a></div><div class="ttdeci">void push_back(const T &inElement)</div><div class="ttdoc">Add element to the back of the array.</div><div class="ttdef"><b>Definition</b> StaticArray.h:61</div></div>
- <div class="ttc" id="aclass_static_array_html_a69859b5a0e6cd32048fc1f3188982f3b"><div class="ttname"><a href="class_static_array.html#a69859b5a0e6cd32048fc1f3188982f3b">StaticArray::size_type</a></div><div class="ttdeci">uint size_type</div><div class="ttdef"><b>Definition</b> StaticArray.h:18</div></div>
- <div class="ttc" id="aclass_static_array_html_a7698b4e3e7cf608eeba5a48f25c284d9"><div class="ttname"><a href="class_static_array.html#a7698b4e3e7cf608eeba5a48f25c284d9">StaticArray::data</a></div><div class="ttdeci">const T * data() const</div><div class="ttdef"><b>Definition</b> StaticArray.h:138</div></div>
- <div class="ttc" id="aclass_static_array_html_aea449055e7dab910eca1a4af05d53b6f"><div class="ttname"><a href="class_static_array.html#aea449055e7dab910eca1a4af05d53b6f">StaticArray::size</a></div><div class="ttdeci">size_type size() const</div><div class="ttdoc">Returns amount of elements in the array.</div><div class="ttdef"><b>Definition</b> StaticArray.h:89</div></div>
- <div class="ttc" id="aclass_static_array_html_aed109d7f64345b6e7e956bd80de27387"><div class="ttname"><a href="class_static_array.html#aed109d7f64345b6e7e956bd80de27387">StaticArray::pop_back</a></div><div class="ttdeci">void pop_back()</div><div class="ttdoc">Remove element from the back of the array.</div><div class="ttdef"><b>Definition</b> StaticArray.h:76</div></div>
- <div class="ttc" id="aclass_vec3_html"><div class="ttname"><a href="class_vec3.html">Vec3</a></div><div class="ttdef"><b>Definition</b> Vec3.h:17</div></div>
- <div class="ttc" id="aclass_vec3_html_a0e078ff09f69e669db71a2b0e37939ff"><div class="ttname"><a href="class_vec3.html#a0e078ff09f69e669db71a2b0e37939ff">Vec3::Dot</a></div><div class="ttdeci">JPH_INLINE float Dot(Vec3Arg inV2) const</div><div class="ttdoc">Dot product.</div><div class="ttdef"><b>Definition</b> Vec3.inl:650</div></div>
- <div class="ttc" id="aclass_vec3_html_a24a96972fdbe04ae9a3e340fd4c39b81"><div class="ttname"><a href="class_vec3.html#a24a96972fdbe04ae9a3e340fd4c39b81">Vec3::GetNormalizedPerpendicular</a></div><div class="ttdeci">JPH_INLINE Vec3 GetNormalizedPerpendicular() const</div><div class="ttdoc">Get normalized vector that is perpendicular to this vector.</div><div class="ttdef"><b>Definition</b> Vec3.inl:827</div></div>
- <div class="ttc" id="aclass_vec3_html_a284e29f161ae7709a934f402bd2a848c"><div class="ttname"><a href="class_vec3.html#a284e29f161ae7709a934f402bd2a848c">Vec3::GetX</a></div><div class="ttdeci">JPH_INLINE float GetX() const</div><div class="ttdoc">Get individual components.</div><div class="ttdef"><b>Definition</b> Vec3.h:127</div></div>
- <div class="ttc" id="aclass_vec3_html_a6c6409cad56e4e357f73d43cd719ffe8"><div class="ttname"><a href="class_vec3.html#a6c6409cad56e4e357f73d43cd719ffe8">Vec3::NormalizedOr</a></div><div class="ttdeci">JPH_INLINE Vec3 NormalizedOr(Vec3Arg inZeroValue) const</div><div class="ttdoc">Normalize vector or return inZeroValue if the length of the vector is zero.</div><div class="ttdef"><b>Definition</b> Vec3.inl:721</div></div>
- <div class="ttc" id="aclass_vec3_html_aac08ebd63b9ab4fa089a5ed3224a8679"><div class="ttname"><a href="class_vec3.html#aac08ebd63b9ab4fa089a5ed3224a8679">Vec3::GetY</a></div><div class="ttdeci">JPH_INLINE float GetY() const</div><div class="ttdef"><b>Definition</b> Vec3.h:128</div></div>
- <div class="ttc" id="aclass_vec3_html_aba501a6a474028084799f871c9083dc1"><div class="ttname"><a href="class_vec3.html#aba501a6a474028084799f871c9083dc1">Vec3::LengthSq</a></div><div class="ttdeci">JPH_INLINE float LengthSq() const</div><div class="ttdoc">Squared length of vector.</div><div class="ttdef"><b>Definition</b> Vec3.inl:666</div></div>
- <div class="ttc" id="aclass_vec3_html_acee93ea875b86bc0f63edebe2b592dbc"><div class="ttname"><a href="class_vec3.html#acee93ea875b86bc0f63edebe2b592dbc">Vec3::IsNearZero</a></div><div class="ttdeci">JPH_INLINE bool IsNearZero(float inMaxDistSq=1.0e-12f) const</div><div class="ttdoc">Test if vector is near zero.</div><div class="ttdef"><b>Definition</b> Vec3.inl:352</div></div>
- <div class="ttc" id="aclass_vec3_html_ad03c52ab27761bc1e64e33c47632ba51"><div class="ttname"><a href="class_vec3.html#ad03c52ab27761bc1e64e33c47632ba51">Vec3::sZero</a></div><div class="ttdeci">static JPH_INLINE Vec3 sZero()</div><div class="ttdoc">Vector with all zeros.</div><div class="ttdef"><b>Definition</b> Vec3.inl:103</div></div>
- <div class="ttc" id="aclass_vec3_html_aeca36d050a7c2b41d3ac0438874d8c60"><div class="ttname"><a href="class_vec3.html#aeca36d050a7c2b41d3ac0438874d8c60">Vec3::GetZ</a></div><div class="ttdeci">JPH_INLINE float GetZ() const</div><div class="ttdef"><b>Definition</b> Vec3.h:129</div></div>
- <div class="ttc" id="astruct_add_convex_radius_html"><div class="ttname"><a href="struct_add_convex_radius.html">AddConvexRadius</a></div><div class="ttdoc">Structure that adds a convex radius.</div><div class="ttdef"><b>Definition</b> ConvexSupport.h:46</div></div>
- <div class="ttc" id="astruct_minkowski_difference_html"><div class="ttname"><a href="struct_minkowski_difference.html">MinkowskiDifference</a></div><div class="ttdoc">Structure that performs a Minkowski difference A - B.</div><div class="ttdef"><b>Definition</b> ConvexSupport.h:67</div></div>
- <div class="ttc" id="astruct_minkowski_difference_html_ad9e15e934b19be1df6e09a926a1e26dd"><div class="ttname"><a href="struct_minkowski_difference.html#ad9e15e934b19be1df6e09a926a1e26dd">MinkowskiDifference::GetSupport</a></div><div class="ttdeci">Vec3 GetSupport(Vec3Arg inDirection) const</div><div class="ttdoc">Calculate the support vector for this convex shape.</div><div class="ttdef"><b>Definition</b> ConvexSupport.h:75</div></div>
- <div class="ttc" id="astruct_transformed_convex_object_html"><div class="ttname"><a href="struct_transformed_convex_object.html">TransformedConvexObject</a></div><div class="ttdef"><b>Definition</b> ConvexSupport.h:15</div></div>
- </div><!-- fragment --></div><!-- contents -->
- </div><!-- doc-content -->
- <!-- start footer part -->
- <div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_d99289a5d3c46cf26f14ff6c90658d9f.html">Jolt</a></li><li class="navelem"><a class="el" href="dir_2d88bf03bf4a7a62918727c0f2ee34eb.html">Geometry</a></li><li class="navelem"><a class="el" href="_e_p_a_penetration_depth_8h.html">EPAPenetrationDepth.h</a></li>
- <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 </li>
- </ul>
- </div>
- </body>
- </html>
|