| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307 |
- <!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: ContactConstraintManager Class Reference</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('class_contact_constraint_manager.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="summary">
- <a href="#nested-classes">Classes</a> |
- <a href="#pub-types">Public Types</a> |
- <a href="#pub-methods">Public Member Functions</a> |
- <a href="#pub-static-attribs">Static Public Attributes</a> |
- <a href="class_contact_constraint_manager-members.html">List of all members</a> </div>
- <div class="headertitle"><div class="title">ContactConstraintManager Class Reference</div></div>
- </div><!--header-->
- <div class="contents">
- <p><code>#include <<a class="el" href="_contact_constraint_manager_8h_source.html">ContactConstraintManager.h</a>></code></p>
- <div class="dynheader">
- Inheritance diagram for ContactConstraintManager:</div>
- <div class="dyncontent">
- <div class="center">
- <img src="class_contact_constraint_manager.png" usemap="#ContactConstraintManager_map" alt=""/>
- <map id="ContactConstraintManager_map" name="ContactConstraintManager_map">
- <area href="class_non_copyable.html" title="Class that makes another class non-copyable. Usage: Inherit from NonCopyable." alt="NonCopyable" shape="rect" coords="0,0,163,24"/>
- </map>
- </div></div>
- <table class="memberdecls">
- <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
- Classes</h2></td></tr>
- <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_contact_constraint_manager_1_1_contact_allocator.html">ContactAllocator</a></td></tr>
- <tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Contacts are allocated in a lock free hash map. <a href="class_contact_constraint_manager_1_1_contact_allocator.html#details">More...</a><br /></td></tr>
- <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
- </table><table class="memberdecls">
- <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-types" name="pub-types"></a>
- Public Types</h2></td></tr>
- <tr class="memitem:ad0b40a0f57d994f32b069744541fce56" id="r_ad0b40a0f57d994f32b069744541fce56"><td class="memItemLeft" align="right" valign="top">using </td><td class="memItemRight" valign="bottom"><a class="el" href="#ad0b40a0f57d994f32b069744541fce56">CombineFunction</a> = float (*)(const <a class="el" href="class_body.html">Body</a> &inBody1, const <a class="el" href="class_sub_shape_i_d.html">SubShapeID</a> &inSubShapeID1, const <a class="el" href="class_body.html">Body</a> &inBody2, const <a class="el" href="class_sub_shape_i_d.html">SubShapeID</a> &inSubShapeID2)</td></tr>
- <tr class="separator:ad0b40a0f57d994f32b069744541fce56"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:a5d7bb30c442d466ba19b92f8b5ffb754" id="r_a5d7bb30c442d466ba19b92f8b5ffb754"><td class="memItemLeft" align="right" valign="top">using </td><td class="memItemRight" valign="bottom"><a class="el" href="#a5d7bb30c442d466ba19b92f8b5ffb754">BodyPairHandle</a> = void *</td></tr>
- <tr class="memdesc:a5d7bb30c442d466ba19b92f8b5ffb754"><td class="mdescLeft"> </td><td class="mdescRight">Handle used to keep track of the current body pair. <br /></td></tr>
- <tr class="separator:a5d7bb30c442d466ba19b92f8b5ffb754"><td class="memSeparator" colspan="2"> </td></tr>
- </table><table class="memberdecls">
- <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
- Public Member Functions</h2></td></tr>
- <tr class="memitem:ad99d5188de106b071b28914b4bece25f" id="r_ad99d5188de106b071b28914b4bece25f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="_memory_8h.html#a91074fb218fe28954a0938c099ddd9e0">JPH_OVERRIDE_NEW_DELETE</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#ad99d5188de106b071b28914b4bece25f">ContactConstraintManager</a> (const <a class="el" href="struct_physics_settings.html">PhysicsSettings</a> &inPhysicsSettings)</td></tr>
- <tr class="memdesc:ad99d5188de106b071b28914b4bece25f"><td class="mdescLeft"> </td><td class="mdescRight">Constructor. <br /></td></tr>
- <tr class="separator:ad99d5188de106b071b28914b4bece25f"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:a99bbf2c00ef2ee156223858f2a2d6597" id="r_a99bbf2c00ef2ee156223858f2a2d6597"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="#a99bbf2c00ef2ee156223858f2a2d6597">~ContactConstraintManager</a> ()</td></tr>
- <tr class="separator:a99bbf2c00ef2ee156223858f2a2d6597"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:a8225433cfdf9f63fa149fdac25e0a263" id="r_a8225433cfdf9f63fa149fdac25e0a263"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#a8225433cfdf9f63fa149fdac25e0a263">Init</a> (<a class="el" href="_core_8h.html#a69aa29b598b851b0640aa225a9e5d61d">uint</a> inMaxBodyPairs, <a class="el" href="_core_8h.html#a69aa29b598b851b0640aa225a9e5d61d">uint</a> inMaxContactConstraints)</td></tr>
- <tr class="separator:a8225433cfdf9f63fa149fdac25e0a263"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:acf262d3235f4eea01cd2aa8a9a3bfe83" id="r_acf262d3235f4eea01cd2aa8a9a3bfe83"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#acf262d3235f4eea01cd2aa8a9a3bfe83">SetContactListener</a> (<a class="el" href="class_contact_listener.html">ContactListener</a> *inListener)</td></tr>
- <tr class="memdesc:acf262d3235f4eea01cd2aa8a9a3bfe83"><td class="mdescLeft"> </td><td class="mdescRight">Listener that is notified whenever a contact point between two bodies is added/updated/removed. <br /></td></tr>
- <tr class="separator:acf262d3235f4eea01cd2aa8a9a3bfe83"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:a7aa47c7b4d7470e83735deb74eae608d" id="r_a7aa47c7b4d7470e83735deb74eae608d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="class_contact_listener.html">ContactListener</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="#a7aa47c7b4d7470e83735deb74eae608d">GetContactListener</a> () const</td></tr>
- <tr class="separator:a7aa47c7b4d7470e83735deb74eae608d"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:aae82d70c097d2c5a514faebd73ee4873" id="r_aae82d70c097d2c5a514faebd73ee4873"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#aae82d70c097d2c5a514faebd73ee4873">SetCombineFriction</a> (<a class="el" href="#ad0b40a0f57d994f32b069744541fce56">CombineFunction</a> inCombineFriction)</td></tr>
- <tr class="separator:aae82d70c097d2c5a514faebd73ee4873"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:a2f9d4fe92f6b8a2952b51acb10f55258" id="r_a2f9d4fe92f6b8a2952b51acb10f55258"><td class="memItemLeft" align="right" valign="top"><a class="el" href="#ad0b40a0f57d994f32b069744541fce56">CombineFunction</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#a2f9d4fe92f6b8a2952b51acb10f55258">GetCombineFriction</a> () const</td></tr>
- <tr class="separator:a2f9d4fe92f6b8a2952b51acb10f55258"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:ae324c787f7d2ab43ed3adb13d3e7f24e" id="r_ae324c787f7d2ab43ed3adb13d3e7f24e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#ae324c787f7d2ab43ed3adb13d3e7f24e">SetCombineRestitution</a> (<a class="el" href="#ad0b40a0f57d994f32b069744541fce56">CombineFunction</a> inCombineRestitution)</td></tr>
- <tr class="separator:ae324c787f7d2ab43ed3adb13d3e7f24e"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:a3e9f74aa49c583d6656430fa421326ab" id="r_a3e9f74aa49c583d6656430fa421326ab"><td class="memItemLeft" align="right" valign="top"><a class="el" href="#ad0b40a0f57d994f32b069744541fce56">CombineFunction</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#a3e9f74aa49c583d6656430fa421326ab">GetCombineRestitution</a> () const</td></tr>
- <tr class="separator:a3e9f74aa49c583d6656430fa421326ab"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:a50938b07679f8a97fff61e98a209c87c" id="r_a50938b07679f8a97fff61e98a209c87c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="_core_8h.html#a8f95e75e58492e87412191fabadd8ca8">uint32</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#a50938b07679f8a97fff61e98a209c87c">GetMaxConstraints</a> () const</td></tr>
- <tr class="memdesc:a50938b07679f8a97fff61e98a209c87c"><td class="mdescLeft"> </td><td class="mdescRight">Get the max number of contact constraints that are allowed. <br /></td></tr>
- <tr class="separator:a50938b07679f8a97fff61e98a209c87c"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:a4abd47f225871f02cd3a0c964106439d" id="r_a4abd47f225871f02cd3a0c964106439d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="_contact_listener_8h.html#a996dd20903cf7428fc11a70e8676b93c">ValidateResult</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#a4abd47f225871f02cd3a0c964106439d">ValidateContactPoint</a> (const <a class="el" href="class_body.html">Body</a> &inBody1, const <a class="el" href="class_body.html">Body</a> &inBody2, <a class="el" href="_real_8h.html#a43bea2d9c57780b4b66bab1312fd77f3">RVec3Arg</a> inBaseOffset, const <a class="el" href="class_collide_shape_result.html">CollideShapeResult</a> &inCollisionResult) const</td></tr>
- <tr class="memdesc:a4abd47f225871f02cd3a0c964106439d"><td class="mdescLeft"> </td><td class="mdescRight">Check with the listener if inBody1 and inBody2 could collide, returns false if not. <br /></td></tr>
- <tr class="separator:a4abd47f225871f02cd3a0c964106439d"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:a56fbdeb8c26a568919d431973830111a" id="r_a56fbdeb8c26a568919d431973830111a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#a56fbdeb8c26a568919d431973830111a">PrepareConstraintBuffer</a> (PhysicsUpdateContext *inContext)</td></tr>
- <tr class="memdesc:a56fbdeb8c26a568919d431973830111a"><td class="mdescLeft"> </td><td class="mdescRight">Sets up the constraint buffer. Should be called before starting collision detection. <br /></td></tr>
- <tr class="separator:a56fbdeb8c26a568919d431973830111a"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:ae52944ca4945e6255a0f31794cf2aed5" id="r_ae52944ca4945e6255a0f31794cf2aed5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="class_contact_constraint_manager_1_1_contact_allocator.html">ContactAllocator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#ae52944ca4945e6255a0f31794cf2aed5">GetContactAllocator</a> ()</td></tr>
- <tr class="memdesc:ae52944ca4945e6255a0f31794cf2aed5"><td class="mdescLeft"> </td><td class="mdescRight">Get a new allocator context for storing contacts. Note that you should call this once and then add multiple contacts using the context. <br /></td></tr>
- <tr class="separator:ae52944ca4945e6255a0f31794cf2aed5"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:ac438b9748b641a504658e700f0e43305" id="r_ac438b9748b641a504658e700f0e43305"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#ac438b9748b641a504658e700f0e43305">GetContactsFromCache</a> (<a class="el" href="class_contact_constraint_manager_1_1_contact_allocator.html">ContactAllocator</a> &ioContactAllocator, <a class="el" href="class_body.html">Body</a> &inBody1, <a class="el" href="class_body.html">Body</a> &inBody2, bool &outPairHandled, bool &outConstraintCreated)</td></tr>
- <tr class="separator:ac438b9748b641a504658e700f0e43305"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:a1527877d78511ca6896722d9416e09d1" id="r_a1527877d78511ca6896722d9416e09d1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="#a5d7bb30c442d466ba19b92f8b5ffb754">BodyPairHandle</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#a1527877d78511ca6896722d9416e09d1">AddBodyPair</a> (<a class="el" href="class_contact_constraint_manager_1_1_contact_allocator.html">ContactAllocator</a> &ioContactAllocator, const <a class="el" href="class_body.html">Body</a> &inBody1, const <a class="el" href="class_body.html">Body</a> &inBody2)</td></tr>
- <tr class="separator:a1527877d78511ca6896722d9416e09d1"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:ad54fa2fc8b0cbc1cd6cb5c5846e781be" id="r_ad54fa2fc8b0cbc1cd6cb5c5846e781be"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="#ad54fa2fc8b0cbc1cd6cb5c5846e781be">AddContactConstraint</a> (<a class="el" href="class_contact_constraint_manager_1_1_contact_allocator.html">ContactAllocator</a> &ioContactAllocator, <a class="el" href="#a5d7bb30c442d466ba19b92f8b5ffb754">BodyPairHandle</a> inBodyPair, <a class="el" href="class_body.html">Body</a> &inBody1, <a class="el" href="class_body.html">Body</a> &inBody2, const <a class="el" href="class_contact_manifold.html">ContactManifold</a> &inManifold)</td></tr>
- <tr class="separator:ad54fa2fc8b0cbc1cd6cb5c5846e781be"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:a3b9cf92154e49319463950b66e692f56" id="r_a3b9cf92154e49319463950b66e692f56"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#a3b9cf92154e49319463950b66e692f56">FinalizeContactCacheAndCallContactPointRemovedCallbacks</a> (<a class="el" href="_core_8h.html#a69aa29b598b851b0640aa225a9e5d61d">uint</a> inExpectedNumBodyPairs, <a class="el" href="_core_8h.html#a69aa29b598b851b0640aa225a9e5d61d">uint</a> inExpectedNumManifolds)</td></tr>
- <tr class="separator:a3b9cf92154e49319463950b66e692f56"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:a46532b93dfd2edb0b45be8e5af4a7111" id="r_a46532b93dfd2edb0b45be8e5af4a7111"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="#a46532b93dfd2edb0b45be8e5af4a7111">WereBodiesInContact</a> (const <a class="el" href="class_body_i_d.html">BodyID</a> &inBody1ID, const <a class="el" href="class_body_i_d.html">BodyID</a> &inBody2ID) const</td></tr>
- <tr class="separator:a46532b93dfd2edb0b45be8e5af4a7111"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:aad540014a518a8f5942842e1a347447f" id="r_aad540014a518a8f5942842e1a347447f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="_core_8h.html#a8f95e75e58492e87412191fabadd8ca8">uint32</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#aad540014a518a8f5942842e1a347447f">GetNumConstraints</a> () const</td></tr>
- <tr class="memdesc:aad540014a518a8f5942842e1a347447f"><td class="mdescLeft"> </td><td class="mdescRight">Get the number of contact constraints that were found. <br /></td></tr>
- <tr class="separator:aad540014a518a8f5942842e1a347447f"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:af45077f4de2c4ec57ebecf450e9b88f0" id="r_af45077f4de2c4ec57ebecf450e9b88f0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#af45077f4de2c4ec57ebecf450e9b88f0">SortContacts</a> (<a class="el" href="_core_8h.html#a8f95e75e58492e87412191fabadd8ca8">uint32</a> *inConstraintIdxBegin, <a class="el" href="_core_8h.html#a8f95e75e58492e87412191fabadd8ca8">uint32</a> *inConstraintIdxEnd) const</td></tr>
- <tr class="memdesc:af45077f4de2c4ec57ebecf450e9b88f0"><td class="mdescLeft"> </td><td class="mdescRight">Sort contact constraints deterministically. <br /></td></tr>
- <tr class="separator:af45077f4de2c4ec57ebecf450e9b88f0"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:a81dea14ac1bd33f74a07085690095403" id="r_a81dea14ac1bd33f74a07085690095403"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#a81dea14ac1bd33f74a07085690095403">GetAffectedBodies</a> (<a class="el" href="_core_8h.html#a8f95e75e58492e87412191fabadd8ca8">uint32</a> inConstraintIdx, const <a class="el" href="class_body.html">Body</a> *&outBody1, const <a class="el" href="class_body.html">Body</a> *&outBody2) const</td></tr>
- <tr class="memdesc:a81dea14ac1bd33f74a07085690095403"><td class="mdescLeft"> </td><td class="mdescRight">Get the affected bodies for a given constraint. <br /></td></tr>
- <tr class="separator:a81dea14ac1bd33f74a07085690095403"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:abaf06f1f9eb408cf99a8231bc8801e8f" id="r_abaf06f1f9eb408cf99a8231bc8801e8f"><td class="memTemplParams" colspan="2">template<class MotionPropertiesCallback > </td></tr>
- <tr class="memitem:abaf06f1f9eb408cf99a8231bc8801e8f"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#abaf06f1f9eb408cf99a8231bc8801e8f">WarmStartVelocityConstraints</a> (const <a class="el" href="_core_8h.html#a8f95e75e58492e87412191fabadd8ca8">uint32</a> *inConstraintIdxBegin, const <a class="el" href="_core_8h.html#a8f95e75e58492e87412191fabadd8ca8">uint32</a> *inConstraintIdxEnd, float inWarmStartImpulseRatio, MotionPropertiesCallback &ioCallback)</td></tr>
- <tr class="memdesc:abaf06f1f9eb408cf99a8231bc8801e8f"><td class="mdescLeft"> </td><td class="mdescRight">Apply last frame's impulses as an initial guess for this frame's impulses. <br /></td></tr>
- <tr class="separator:abaf06f1f9eb408cf99a8231bc8801e8f"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:a6be90138088b291b35baed7974887729" id="r_a6be90138088b291b35baed7974887729"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="#a6be90138088b291b35baed7974887729">SolveVelocityConstraints</a> (const <a class="el" href="_core_8h.html#a8f95e75e58492e87412191fabadd8ca8">uint32</a> *inConstraintIdxBegin, const <a class="el" href="_core_8h.html#a8f95e75e58492e87412191fabadd8ca8">uint32</a> *inConstraintIdxEnd)</td></tr>
- <tr class="separator:a6be90138088b291b35baed7974887729"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:ac825a74176ec59d9e2995e67fc8d43c1" id="r_ac825a74176ec59d9e2995e67fc8d43c1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#ac825a74176ec59d9e2995e67fc8d43c1">StoreAppliedImpulses</a> (const <a class="el" href="_core_8h.html#a8f95e75e58492e87412191fabadd8ca8">uint32</a> *inConstraintIdxBegin, const <a class="el" href="_core_8h.html#a8f95e75e58492e87412191fabadd8ca8">uint32</a> *inConstraintIdxEnd) const</td></tr>
- <tr class="memdesc:ac825a74176ec59d9e2995e67fc8d43c1"><td class="mdescLeft"> </td><td class="mdescRight">Save back the lambdas to the contact cache for the next warm start. <br /></td></tr>
- <tr class="separator:ac825a74176ec59d9e2995e67fc8d43c1"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:a45d8cb39a9e2a3644149661f4e01d2bd" id="r_a45d8cb39a9e2a3644149661f4e01d2bd"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="#a45d8cb39a9e2a3644149661f4e01d2bd">SolvePositionConstraints</a> (const <a class="el" href="_core_8h.html#a8f95e75e58492e87412191fabadd8ca8">uint32</a> *inConstraintIdxBegin, const <a class="el" href="_core_8h.html#a8f95e75e58492e87412191fabadd8ca8">uint32</a> *inConstraintIdxEnd)</td></tr>
- <tr class="separator:a45d8cb39a9e2a3644149661f4e01d2bd"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:a3ede12b173e9c63f9421176573661b27" id="r_a3ede12b173e9c63f9421176573661b27"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#a3ede12b173e9c63f9421176573661b27">RecycleConstraintBuffer</a> ()</td></tr>
- <tr class="memdesc:a3ede12b173e9c63f9421176573661b27"><td class="mdescLeft"> </td><td class="mdescRight">Recycle the constraint buffer. Should be called between collision simulation steps. <br /></td></tr>
- <tr class="separator:a3ede12b173e9c63f9421176573661b27"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:a08550dcab7e85e7f82fcc0c7658baa32" id="r_a08550dcab7e85e7f82fcc0c7658baa32"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#a08550dcab7e85e7f82fcc0c7658baa32">FinishConstraintBuffer</a> ()</td></tr>
- <tr class="memdesc:a08550dcab7e85e7f82fcc0c7658baa32"><td class="mdescLeft"> </td><td class="mdescRight">Terminate the constraint buffer. Should be called after simulation ends. <br /></td></tr>
- <tr class="separator:a08550dcab7e85e7f82fcc0c7658baa32"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:a95c132f19384bb01d869331e9faf3757" id="r_a95c132f19384bb01d869331e9faf3757"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#a95c132f19384bb01d869331e9faf3757">OnCCDContactAdded</a> (<a class="el" href="class_contact_constraint_manager_1_1_contact_allocator.html">ContactAllocator</a> &ioContactAllocator, const <a class="el" href="class_body.html">Body</a> &inBody1, const <a class="el" href="class_body.html">Body</a> &inBody2, const <a class="el" href="class_contact_manifold.html">ContactManifold</a> &inManifold, <a class="el" href="class_contact_settings.html">ContactSettings</a> &outSettings)</td></tr>
- <tr class="separator:a95c132f19384bb01d869331e9faf3757"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:a09b5daefc89dca1489be3afa077cfcc0" id="r_a09b5daefc89dca1489be3afa077cfcc0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#a09b5daefc89dca1489be3afa077cfcc0">SaveState</a> (<a class="el" href="class_state_recorder.html">StateRecorder</a> &inStream, const <a class="el" href="class_state_recorder_filter.html">StateRecorderFilter</a> *inFilter) const</td></tr>
- <tr class="memdesc:a09b5daefc89dca1489be3afa077cfcc0"><td class="mdescLeft"> </td><td class="mdescRight">Saving state for replay. <br /></td></tr>
- <tr class="separator:a09b5daefc89dca1489be3afa077cfcc0"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:a7fa6afee8fa0da3c2203ecd8e5e0deed" id="r_a7fa6afee8fa0da3c2203ecd8e5e0deed"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="#a7fa6afee8fa0da3c2203ecd8e5e0deed">RestoreState</a> (<a class="el" href="class_state_recorder.html">StateRecorder</a> &inStream, const <a class="el" href="class_state_recorder_filter.html">StateRecorderFilter</a> *inFilter)</td></tr>
- <tr class="memdesc:a7fa6afee8fa0da3c2203ecd8e5e0deed"><td class="mdescLeft"> </td><td class="mdescRight">Restoring state for replay. Returns false when failed. <br /></td></tr>
- <tr class="separator:a7fa6afee8fa0da3c2203ecd8e5e0deed"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="inherit_header pub_methods_class_non_copyable"><td colspan="2" onclick="javascript:dynsection.toggleInherit('pub_methods_class_non_copyable')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="class_non_copyable.html">NonCopyable</a></td></tr>
- <tr class="memitem:a809b6e4ade7ae32f6d248f2a3b783d45 inherit pub_methods_class_non_copyable" id="r_a809b6e4ade7ae32f6d248f2a3b783d45"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="class_non_copyable.html#a809b6e4ade7ae32f6d248f2a3b783d45">NonCopyable</a> ()=default</td></tr>
- <tr class="separator:a809b6e4ade7ae32f6d248f2a3b783d45 inherit pub_methods_class_non_copyable"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:a501d34ffcc34b30de6d541887a901057 inherit pub_methods_class_non_copyable" id="r_a501d34ffcc34b30de6d541887a901057"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="class_non_copyable.html#a501d34ffcc34b30de6d541887a901057">NonCopyable</a> (const <a class="el" href="class_non_copyable.html">NonCopyable</a> &)=delete</td></tr>
- <tr class="separator:a501d34ffcc34b30de6d541887a901057 inherit pub_methods_class_non_copyable"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:aaf9b12dcaae80c9d304df7a941d4e21f inherit pub_methods_class_non_copyable" id="r_aaf9b12dcaae80c9d304df7a941d4e21f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_non_copyable.html#aaf9b12dcaae80c9d304df7a941d4e21f">operator=</a> (const <a class="el" href="class_non_copyable.html">NonCopyable</a> &)=delete</td></tr>
- <tr class="separator:aaf9b12dcaae80c9d304df7a941d4e21f inherit pub_methods_class_non_copyable"><td class="memSeparator" colspan="2"> </td></tr>
- </table><table class="memberdecls">
- <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-static-attribs" name="pub-static-attribs"></a>
- Static Public Attributes</h2></td></tr>
- <tr class="memitem:a18911ccd070e4d6d0d3c74605c0d211c" id="r_a18911ccd070e4d6d0d3c74605c0d211c"><td class="memItemLeft" align="right" valign="top">static const int </td><td class="memItemRight" valign="bottom"><a class="el" href="#a18911ccd070e4d6d0d3c74605c0d211c">MaxContactPoints</a> = 4</td></tr>
- <tr class="memdesc:a18911ccd070e4d6d0d3c74605c0d211c"><td class="mdescLeft"> </td><td class="mdescRight">Max 4 contact points are needed for a stable manifold. <br /></td></tr>
- <tr class="separator:a18911ccd070e4d6d0d3c74605c0d211c"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:a1c775cdd66c1e6c3c86fff836b4bc8f6" id="r_a1c775cdd66c1e6c3c86fff836b4bc8f6"><td class="memItemLeft" align="right" valign="top">static bool </td><td class="memItemRight" valign="bottom"><a class="el" href="#a1c775cdd66c1e6c3c86fff836b4bc8f6">sDrawContactPoint</a> = false</td></tr>
- <tr class="separator:a1c775cdd66c1e6c3c86fff836b4bc8f6"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:a7ffa89c50ba531470ecdfcfdbb073d5e" id="r_a7ffa89c50ba531470ecdfcfdbb073d5e"><td class="memItemLeft" align="right" valign="top">static bool </td><td class="memItemRight" valign="bottom"><a class="el" href="#a7ffa89c50ba531470ecdfcfdbb073d5e">sDrawSupportingFaces</a> = false</td></tr>
- <tr class="separator:a7ffa89c50ba531470ecdfcfdbb073d5e"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:a512778f011224018a58c7cdb04ec74df" id="r_a512778f011224018a58c7cdb04ec74df"><td class="memItemLeft" align="right" valign="top">static bool </td><td class="memItemRight" valign="bottom"><a class="el" href="#a512778f011224018a58c7cdb04ec74df">sDrawContactPointReduction</a> = false</td></tr>
- <tr class="separator:a512778f011224018a58c7cdb04ec74df"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:af60346481284d7b7f232d9b7130ccbab" id="r_af60346481284d7b7f232d9b7130ccbab"><td class="memItemLeft" align="right" valign="top">static bool </td><td class="memItemRight" valign="bottom"><a class="el" href="#af60346481284d7b7f232d9b7130ccbab">sDrawContactManifolds</a> = false</td></tr>
- <tr class="separator:af60346481284d7b7f232d9b7130ccbab"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:ab7c0537666b9da75d92086dcc20804da" id="r_ab7c0537666b9da75d92086dcc20804da"><td class="memItemLeft" align="right" valign="top">static constexpr <a class="el" href="_core_8h.html#a69aa29b598b851b0640aa225a9e5d61d">uint</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#ab7c0537666b9da75d92086dcc20804da">cMaxContactConstraintsLimit</a> = ~<a class="el" href="_core_8h.html#a69aa29b598b851b0640aa225a9e5d61d">uint</a>(0) / sizeof(ContactConstraint)</td></tr>
- <tr class="memdesc:ab7c0537666b9da75d92086dcc20804da"><td class="mdescLeft"> </td><td class="mdescRight">The maximum value that can be passed to Init for inMaxContactConstraints. Note you should really use a lower value, using this value will cost a lot of memory! <br /></td></tr>
- <tr class="separator:ab7c0537666b9da75d92086dcc20804da"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:ae8752f9dc2598bcc1449924bf105ede6" id="r_ae8752f9dc2598bcc1449924bf105ede6"><td class="memItemLeft" align="right" valign="top">static constexpr <a class="el" href="_core_8h.html#a69aa29b598b851b0640aa225a9e5d61d">uint</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#ae8752f9dc2598bcc1449924bf105ede6">cMaxBodyPairsLimit</a> = ~<a class="el" href="_core_8h.html#a69aa29b598b851b0640aa225a9e5d61d">uint</a>(0) / sizeof(BodyPairMap::KeyValue)</td></tr>
- <tr class="memdesc:ae8752f9dc2598bcc1449924bf105ede6"><td class="mdescLeft"> </td><td class="mdescRight">The maximum value that can be passed to Init for inMaxBodyPairs. Note you should really use a lower value, using this value will cost a lot of memory! <br /></td></tr>
- <tr class="separator:ae8752f9dc2598bcc1449924bf105ede6"><td class="memSeparator" colspan="2"> </td></tr>
- </table>
- <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
- <div class="textblock"><p>A contact constraint manager manages all contacts between two bodies</p>
- <p>WARNING: This class is an internal part of <a class="el" href="class_physics_system.html">PhysicsSystem</a>, it has no functions that can be called by users of the library. </p>
- </div><h2 class="groupheader">Member Typedef Documentation</h2>
- <a id="a5d7bb30c442d466ba19b92f8b5ffb754" name="a5d7bb30c442d466ba19b92f8b5ffb754"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#a5d7bb30c442d466ba19b92f8b5ffb754">◆ </a></span>BodyPairHandle</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">using <a class="el" href="#a5d7bb30c442d466ba19b92f8b5ffb754">ContactConstraintManager::BodyPairHandle</a> = void *</td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Handle used to keep track of the current body pair. </p>
- </div>
- </div>
- <a id="ad0b40a0f57d994f32b069744541fce56" name="ad0b40a0f57d994f32b069744541fce56"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#ad0b40a0f57d994f32b069744541fce56">◆ </a></span>CombineFunction</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">using <a class="el" href="#ad0b40a0f57d994f32b069744541fce56">ContactConstraintManager::CombineFunction</a> = float (*)(const <a class="el" href="class_body.html">Body</a> &inBody1, const <a class="el" href="class_sub_shape_i_d.html">SubShapeID</a> &inSubShapeID1, const <a class="el" href="class_body.html">Body</a> &inBody2, const <a class="el" href="class_sub_shape_i_d.html">SubShapeID</a> &inSubShapeID2)</td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Callback function to combine the restitution or friction of two bodies Note that when merging manifolds (when <a class="el" href="struct_physics_settings.html#af715e8c12331e908a82768501d09db97" title="Whether or not to reduce manifolds with similar contact normals into one contact manifold (see descri...">PhysicsSettings::mUseManifoldReduction</a> is true) you will only get a callback for the merged manifold. It is not possible in that case to get all sub shape ID pairs that were colliding, you'll get the first encountered pair. </p>
- </div>
- </div>
- <h2 class="groupheader">Constructor & Destructor Documentation</h2>
- <a id="ad99d5188de106b071b28914b4bece25f" name="ad99d5188de106b071b28914b4bece25f"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#ad99d5188de106b071b28914b4bece25f">◆ </a></span>ContactConstraintManager()</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">ContactConstraintManager::ContactConstraintManager </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="struct_physics_settings.html">PhysicsSettings</a> &</td> <td class="paramname"><span class="paramname"><em>inPhysicsSettings</em></span></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
- <span class="mlabels"><span class="mlabel">explicit</span></span> </td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Constructor. </p>
- </div>
- </div>
- <a id="a99bbf2c00ef2ee156223858f2a2d6597" name="a99bbf2c00ef2ee156223858f2a2d6597"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#a99bbf2c00ef2ee156223858f2a2d6597">◆ </a></span>~ContactConstraintManager()</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">ContactConstraintManager::~ContactConstraintManager </td>
- <td>(</td>
- <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </div><div class="memdoc">
- </div>
- </div>
- <h2 class="groupheader">Member Function Documentation</h2>
- <a id="a1527877d78511ca6896722d9416e09d1" name="a1527877d78511ca6896722d9416e09d1"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#a1527877d78511ca6896722d9416e09d1">◆ </a></span>AddBodyPair()</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="#a5d7bb30c442d466ba19b92f8b5ffb754">ContactConstraintManager::BodyPairHandle</a> ContactConstraintManager::AddBodyPair </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="class_contact_constraint_manager_1_1_contact_allocator.html">ContactAllocator</a> &</td> <td class="paramname"><span class="paramname"><em>ioContactAllocator</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="class_body.html">Body</a> &</td> <td class="paramname"><span class="paramname"><em>inBody1</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="class_body.html">Body</a> &</td> <td class="paramname"><span class="paramname"><em>inBody2</em></span> )</td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Create a handle for a colliding body pair so that contact constraints can be added between them. Needs to be called once per body pair per frame before calling AddContactConstraint. </p>
- </div>
- </div>
- <a id="ad54fa2fc8b0cbc1cd6cb5c5846e781be" name="ad54fa2fc8b0cbc1cd6cb5c5846e781be"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#ad54fa2fc8b0cbc1cd6cb5c5846e781be">◆ </a></span>AddContactConstraint()</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool ContactConstraintManager::AddContactConstraint </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="class_contact_constraint_manager_1_1_contact_allocator.html">ContactAllocator</a> &</td> <td class="paramname"><span class="paramname"><em>ioContactAllocator</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="#a5d7bb30c442d466ba19b92f8b5ffb754">BodyPairHandle</a></td> <td class="paramname"><span class="paramname"><em>inBodyPair</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="class_body.html">Body</a> &</td> <td class="paramname"><span class="paramname"><em>inBody1</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="class_body.html">Body</a> &</td> <td class="paramname"><span class="paramname"><em>inBody2</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="class_contact_manifold.html">ContactManifold</a> &</td> <td class="paramname"><span class="paramname"><em>inManifold</em></span> )</td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Add a contact constraint for this frame.</p>
- <dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">ioContactAllocator</td><td>The allocator that reserves memory for the contacts </td></tr>
- <tr><td class="paramname">inBodyPair</td><td>The handle for the contact cache for this body pair </td></tr>
- <tr><td class="paramname">inBody1</td><td>The first body that is colliding </td></tr>
- <tr><td class="paramname">inBody2</td><td>The second body that is colliding </td></tr>
- <tr><td class="paramname">inManifold</td><td>The manifold that describes the collision </td></tr>
- </table>
- </dd>
- </dl>
- <dl class="section return"><dt>Returns</dt><dd>true if a contact constraint was created (can be false in the case of a sensor)</dd></dl>
- <p>This is using the approach described in 'Modeling and Solving Constraints' by Erin Catto presented at GDC 2009 (and later years with slight modifications). We're using the formulas from slide 50 - 53 combined.</p>
- <p>Euler velocity integration:</p>
- <p>v1' = v1 + M^-1 P</p>
- <p>Impulse:</p>
- <p>P = J^T lambda</p>
- <p><a class="el" href="class_constraint.html" title="Base class for all physics constraints. A constraint removes one or more degrees of freedom for a rig...">Constraint</a> force:</p>
- <p>lambda = -K^-1 J v1</p>
- <p>Inverse effective mass:</p>
- <p>K = J M^-1 J^T</p>
- <p><a class="el" href="class_constraint.html" title="Base class for all physics constraints. A constraint removes one or more degrees of freedom for a rig...">Constraint</a> equation (limits movement in 1 axis):</p>
- <p>C = (p2 - p1) . n</p>
- <p>Jacobian (for position constraint)</p>
- <p>J = [-n, -r1 x n, n, r2 x n]</p>
- <p>n = contact normal (pointing away from body 1). p1, p2 = positions of collision on body 1 and 2. r1, r2 = contact point relative to center of mass of body 1 and body 2 (r1 = p1 - x1, r2 = p2 - x2). v1, v2 = (linear velocity, angular velocity): 6 vectors containing linear and angular velocity for body 1 and 2. M = mass matrix, a diagonal matrix of the mass and inertia with diagonal [m1, I1, m2, I2]. </p>
- </div>
- </div>
- <a id="a3b9cf92154e49319463950b66e692f56" name="a3b9cf92154e49319463950b66e692f56"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#a3b9cf92154e49319463950b66e692f56">◆ </a></span>FinalizeContactCacheAndCallContactPointRemovedCallbacks()</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void ContactConstraintManager::FinalizeContactCacheAndCallContactPointRemovedCallbacks </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="_core_8h.html#a69aa29b598b851b0640aa225a9e5d61d">uint</a></td> <td class="paramname"><span class="paramname"><em>inExpectedNumBodyPairs</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="_core_8h.html#a69aa29b598b851b0640aa225a9e5d61d">uint</a></td> <td class="paramname"><span class="paramname"><em>inExpectedNumManifolds</em></span> )</td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Finalizes the contact cache, the contact cache that was generated during the calls to AddContactConstraint in this update will be used from now on to read from. After finalizing the contact cache, the contact removed callbacks will be called. inExpectedNumBodyPairs / inExpectedNumManifolds are the amount of body pairs / manifolds found in the previous step and is used to determine the amount of buckets the contact cache hash map will use in the next update. </p>
- </div>
- </div>
- <a id="a08550dcab7e85e7f82fcc0c7658baa32" name="a08550dcab7e85e7f82fcc0c7658baa32"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#a08550dcab7e85e7f82fcc0c7658baa32">◆ </a></span>FinishConstraintBuffer()</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void ContactConstraintManager::FinishConstraintBuffer </td>
- <td>(</td>
- <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Terminate the constraint buffer. Should be called after simulation ends. </p>
- </div>
- </div>
- <a id="a81dea14ac1bd33f74a07085690095403" name="a81dea14ac1bd33f74a07085690095403"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#a81dea14ac1bd33f74a07085690095403">◆ </a></span>GetAffectedBodies()</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void ContactConstraintManager::GetAffectedBodies </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="_core_8h.html#a8f95e75e58492e87412191fabadd8ca8">uint32</a></td> <td class="paramname"><span class="paramname"><em>inConstraintIdx</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="class_body.html">Body</a> *&</td> <td class="paramname"><span class="paramname"><em>outBody1</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="class_body.html">Body</a> *&</td> <td class="paramname"><span class="paramname"><em>outBody2</em></span> ) const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
- <span class="mlabels"><span class="mlabel">inline</span></span> </td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Get the affected bodies for a given constraint. </p>
- </div>
- </div>
- <a id="a2f9d4fe92f6b8a2952b51acb10f55258" name="a2f9d4fe92f6b8a2952b51acb10f55258"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#a2f9d4fe92f6b8a2952b51acb10f55258">◆ </a></span>GetCombineFriction()</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="#ad0b40a0f57d994f32b069744541fce56">CombineFunction</a> ContactConstraintManager::GetCombineFriction </td>
- <td>(</td>
- <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
- <span class="mlabels"><span class="mlabel">inline</span></span> </td>
- </tr>
- </table>
- </div><div class="memdoc">
- </div>
- </div>
- <a id="a3e9f74aa49c583d6656430fa421326ab" name="a3e9f74aa49c583d6656430fa421326ab"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#a3e9f74aa49c583d6656430fa421326ab">◆ </a></span>GetCombineRestitution()</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="#ad0b40a0f57d994f32b069744541fce56">CombineFunction</a> ContactConstraintManager::GetCombineRestitution </td>
- <td>(</td>
- <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
- <span class="mlabels"><span class="mlabel">inline</span></span> </td>
- </tr>
- </table>
- </div><div class="memdoc">
- </div>
- </div>
- <a id="ae52944ca4945e6255a0f31794cf2aed5" name="ae52944ca4945e6255a0f31794cf2aed5"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#ae52944ca4945e6255a0f31794cf2aed5">◆ </a></span>GetContactAllocator()</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="class_contact_constraint_manager_1_1_contact_allocator.html">ContactAllocator</a> ContactConstraintManager::GetContactAllocator </td>
- <td>(</td>
- <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
- <span class="mlabels"><span class="mlabel">inline</span></span> </td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Get a new allocator context for storing contacts. Note that you should call this once and then add multiple contacts using the context. </p>
- </div>
- </div>
- <a id="a7aa47c7b4d7470e83735deb74eae608d" name="a7aa47c7b4d7470e83735deb74eae608d"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#a7aa47c7b4d7470e83735deb74eae608d">◆ </a></span>GetContactListener()</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="class_contact_listener.html">ContactListener</a> * ContactConstraintManager::GetContactListener </td>
- <td>(</td>
- <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
- <span class="mlabels"><span class="mlabel">inline</span></span> </td>
- </tr>
- </table>
- </div><div class="memdoc">
- </div>
- </div>
- <a id="ac438b9748b641a504658e700f0e43305" name="ac438b9748b641a504658e700f0e43305"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#ac438b9748b641a504658e700f0e43305">◆ </a></span>GetContactsFromCache()</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void ContactConstraintManager::GetContactsFromCache </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="class_contact_constraint_manager_1_1_contact_allocator.html">ContactAllocator</a> &</td> <td class="paramname"><span class="paramname"><em>ioContactAllocator</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="class_body.html">Body</a> &</td> <td class="paramname"><span class="paramname"><em>inBody1</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="class_body.html">Body</a> &</td> <td class="paramname"><span class="paramname"><em>inBody2</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">bool &</td> <td class="paramname"><span class="paramname"><em>outPairHandled</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">bool &</td> <td class="paramname"><span class="paramname"><em>outConstraintCreated</em></span> )</td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Check if the contact points from the previous frame are reusable and if so copy them. When the cache was usable and the pair has been handled: outPairHandled = true. When a contact constraint was produced: outConstraintCreated = true. </p>
- </div>
- </div>
- <a id="a50938b07679f8a97fff61e98a209c87c" name="a50938b07679f8a97fff61e98a209c87c"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#a50938b07679f8a97fff61e98a209c87c">◆ </a></span>GetMaxConstraints()</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="_core_8h.html#a8f95e75e58492e87412191fabadd8ca8">uint32</a> ContactConstraintManager::GetMaxConstraints </td>
- <td>(</td>
- <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
- <span class="mlabels"><span class="mlabel">inline</span></span> </td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Get the max number of contact constraints that are allowed. </p>
- </div>
- </div>
- <a id="aad540014a518a8f5942842e1a347447f" name="aad540014a518a8f5942842e1a347447f"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#aad540014a518a8f5942842e1a347447f">◆ </a></span>GetNumConstraints()</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="_core_8h.html#a8f95e75e58492e87412191fabadd8ca8">uint32</a> ContactConstraintManager::GetNumConstraints </td>
- <td>(</td>
- <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
- <span class="mlabels"><span class="mlabel">inline</span></span> </td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Get the number of contact constraints that were found. </p>
- </div>
- </div>
- <a id="a8225433cfdf9f63fa149fdac25e0a263" name="a8225433cfdf9f63fa149fdac25e0a263"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#a8225433cfdf9f63fa149fdac25e0a263">◆ </a></span>Init()</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void ContactConstraintManager::Init </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="_core_8h.html#a69aa29b598b851b0640aa225a9e5d61d">uint</a></td> <td class="paramname"><span class="paramname"><em>inMaxBodyPairs</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="_core_8h.html#a69aa29b598b851b0640aa225a9e5d61d">uint</a></td> <td class="paramname"><span class="paramname"><em>inMaxContactConstraints</em></span> )</td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Initialize the system. </p><dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">inMaxBodyPairs</td><td>Maximum amount of body pairs to process (anything else will fall through the world), this number should generally be much higher than the max amount of contact points as there will be lots of bodies close that are not actually touching </td></tr>
- <tr><td class="paramname">inMaxContactConstraints</td><td>Maximum amount of contact constraints to process (anything else will fall through the world) </td></tr>
- </table>
- </dd>
- </dl>
- </div>
- </div>
- <a id="a95c132f19384bb01d869331e9faf3757" name="a95c132f19384bb01d869331e9faf3757"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#a95c132f19384bb01d869331e9faf3757">◆ </a></span>OnCCDContactAdded()</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void ContactConstraintManager::OnCCDContactAdded </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="class_contact_constraint_manager_1_1_contact_allocator.html">ContactAllocator</a> &</td> <td class="paramname"><span class="paramname"><em>ioContactAllocator</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="class_body.html">Body</a> &</td> <td class="paramname"><span class="paramname"><em>inBody1</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="class_body.html">Body</a> &</td> <td class="paramname"><span class="paramname"><em>inBody2</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="class_contact_manifold.html">ContactManifold</a> &</td> <td class="paramname"><span class="paramname"><em>inManifold</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="class_contact_settings.html">ContactSettings</a> &</td> <td class="paramname"><span class="paramname"><em>outSettings</em></span> )</td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Called by continuous collision detection to notify the contact listener that a contact was added </p><dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">ioContactAllocator</td><td>The allocator that reserves memory for the contacts </td></tr>
- <tr><td class="paramname">inBody1</td><td>The first body that is colliding </td></tr>
- <tr><td class="paramname">inBody2</td><td>The second body that is colliding </td></tr>
- <tr><td class="paramname">inManifold</td><td>The manifold that describes the collision </td></tr>
- <tr><td class="paramname">outSettings</td><td>The calculated contact settings (may be overridden by the contact listener) </td></tr>
- </table>
- </dd>
- </dl>
- </div>
- </div>
- <a id="a56fbdeb8c26a568919d431973830111a" name="a56fbdeb8c26a568919d431973830111a"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#a56fbdeb8c26a568919d431973830111a">◆ </a></span>PrepareConstraintBuffer()</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void ContactConstraintManager::PrepareConstraintBuffer </td>
- <td>(</td>
- <td class="paramtype">PhysicsUpdateContext *</td> <td class="paramname"><span class="paramname"><em>inContext</em></span></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Sets up the constraint buffer. Should be called before starting collision detection. </p>
- </div>
- </div>
- <a id="a3ede12b173e9c63f9421176573661b27" name="a3ede12b173e9c63f9421176573661b27"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#a3ede12b173e9c63f9421176573661b27">◆ </a></span>RecycleConstraintBuffer()</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void ContactConstraintManager::RecycleConstraintBuffer </td>
- <td>(</td>
- <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Recycle the constraint buffer. Should be called between collision simulation steps. </p>
- </div>
- </div>
- <a id="a7fa6afee8fa0da3c2203ecd8e5e0deed" name="a7fa6afee8fa0da3c2203ecd8e5e0deed"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#a7fa6afee8fa0da3c2203ecd8e5e0deed">◆ </a></span>RestoreState()</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool ContactConstraintManager::RestoreState </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="class_state_recorder.html">StateRecorder</a> &</td> <td class="paramname"><span class="paramname"><em>inStream</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="class_state_recorder_filter.html">StateRecorderFilter</a> *</td> <td class="paramname"><span class="paramname"><em>inFilter</em></span> )</td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Restoring state for replay. Returns false when failed. </p>
- </div>
- </div>
- <a id="a09b5daefc89dca1489be3afa077cfcc0" name="a09b5daefc89dca1489be3afa077cfcc0"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#a09b5daefc89dca1489be3afa077cfcc0">◆ </a></span>SaveState()</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void ContactConstraintManager::SaveState </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="class_state_recorder.html">StateRecorder</a> &</td> <td class="paramname"><span class="paramname"><em>inStream</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="class_state_recorder_filter.html">StateRecorderFilter</a> *</td> <td class="paramname"><span class="paramname"><em>inFilter</em></span> ) const</td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Saving state for replay. </p>
- </div>
- </div>
- <a id="aae82d70c097d2c5a514faebd73ee4873" name="aae82d70c097d2c5a514faebd73ee4873"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#aae82d70c097d2c5a514faebd73ee4873">◆ </a></span>SetCombineFriction()</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void ContactConstraintManager::SetCombineFriction </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="#ad0b40a0f57d994f32b069744541fce56">CombineFunction</a></td> <td class="paramname"><span class="paramname"><em>inCombineFriction</em></span></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
- <span class="mlabels"><span class="mlabel">inline</span></span> </td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Set the function that combines the friction of two bodies and returns it Default method is the geometric mean: sqrt(friction1 * friction2). </p>
- </div>
- </div>
- <a id="ae324c787f7d2ab43ed3adb13d3e7f24e" name="ae324c787f7d2ab43ed3adb13d3e7f24e"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#ae324c787f7d2ab43ed3adb13d3e7f24e">◆ </a></span>SetCombineRestitution()</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void ContactConstraintManager::SetCombineRestitution </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="#ad0b40a0f57d994f32b069744541fce56">CombineFunction</a></td> <td class="paramname"><span class="paramname"><em>inCombineRestitution</em></span></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
- <span class="mlabels"><span class="mlabel">inline</span></span> </td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Set the function that combines the restitution of two bodies and returns it Default method is max(restitution1, restitution1) </p>
- </div>
- </div>
- <a id="acf262d3235f4eea01cd2aa8a9a3bfe83" name="acf262d3235f4eea01cd2aa8a9a3bfe83"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#acf262d3235f4eea01cd2aa8a9a3bfe83">◆ </a></span>SetContactListener()</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">void ContactConstraintManager::SetContactListener </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="class_contact_listener.html">ContactListener</a> *</td> <td class="paramname"><span class="paramname"><em>inListener</em></span></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
- <span class="mlabels"><span class="mlabel">inline</span></span> </td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Listener that is notified whenever a contact point between two bodies is added/updated/removed. </p>
- </div>
- </div>
- <a id="a45d8cb39a9e2a3644149661f4e01d2bd" name="a45d8cb39a9e2a3644149661f4e01d2bd"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#a45d8cb39a9e2a3644149661f4e01d2bd">◆ </a></span>SolvePositionConstraints()</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool ContactConstraintManager::SolvePositionConstraints </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="_core_8h.html#a8f95e75e58492e87412191fabadd8ca8">uint32</a> *</td> <td class="paramname"><span class="paramname"><em>inConstraintIdxBegin</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="_core_8h.html#a8f95e75e58492e87412191fabadd8ca8">uint32</a> *</td> <td class="paramname"><span class="paramname"><em>inConstraintIdxEnd</em></span> )</td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Solve position constraints. This is using the approach described in 'Modeling and Solving Constraints' by Erin Catto presented at GDC 2007. On slide 78 it is suggested to split up the Baumgarte stabilization for positional drift so that it does not actually add to the momentum. We combine an Euler velocity integrate + a position integrate and then discard the velocity change.</p>
- <p><a class="el" href="class_constraint.html" title="Base class for all physics constraints. A constraint removes one or more degrees of freedom for a rig...">Constraint</a> force:</p>
- <p>lambda = -K^-1 b</p>
- <p>Baumgarte stabilization:</p>
- <p>b = beta / dt C</p>
- <p>beta = baumgarte stabilization factor. dt = delta time. </p>
- </div>
- </div>
- <a id="a6be90138088b291b35baed7974887729" name="a6be90138088b291b35baed7974887729"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#a6be90138088b291b35baed7974887729">◆ </a></span>SolveVelocityConstraints()</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool ContactConstraintManager::SolveVelocityConstraints </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="_core_8h.html#a8f95e75e58492e87412191fabadd8ca8">uint32</a> *</td> <td class="paramname"><span class="paramname"><em>inConstraintIdxBegin</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="_core_8h.html#a8f95e75e58492e87412191fabadd8ca8">uint32</a> *</td> <td class="paramname"><span class="paramname"><em>inConstraintIdxEnd</em></span> )</td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Solve velocity constraints, when almost nothing changes this should only apply very small impulses since we're warm starting with the total impulse applied in the last frame above.</p>
- <p>Friction wise we're using the Coulomb friction model which says that:</p>
- <p>|F_T| <= mu |F_N|</p>
- <p>Where F_T is the tangential force, F_N is the normal force and mu is the friction coefficient</p>
- <p>In impulse terms this becomes:</p>
- <p>|lambda_T| <= mu |lambda_N|</p>
- <p>And the constraint that needs to be applied is exactly the same as a non penetration constraint except that we use a tangent instead of a normal. The tangent should point in the direction of the tangential velocity of the point:</p>
- <p>J = [-T, -r1 x T, T, r2 x T]</p>
- <p>Where T is the tangent.</p>
- <p>See slide 42 and 43.</p>
- <p>Restitution is implemented as a velocity bias (see slide 41):</p>
- <p>b = e v_n^-</p>
- <p>e = the restitution coefficient, v_n^- is the normal velocity prior to the collision</p>
- <p>Restitution is only applied when v_n^- is large enough and the points are moving towards collision </p>
- </div>
- </div>
- <a id="af45077f4de2c4ec57ebecf450e9b88f0" name="af45077f4de2c4ec57ebecf450e9b88f0"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#af45077f4de2c4ec57ebecf450e9b88f0">◆ </a></span>SortContacts()</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void ContactConstraintManager::SortContacts </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="_core_8h.html#a8f95e75e58492e87412191fabadd8ca8">uint32</a> *</td> <td class="paramname"><span class="paramname"><em>inConstraintIdxBegin</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="_core_8h.html#a8f95e75e58492e87412191fabadd8ca8">uint32</a> *</td> <td class="paramname"><span class="paramname"><em>inConstraintIdxEnd</em></span> ) const</td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Sort contact constraints deterministically. </p>
- </div>
- </div>
- <a id="ac825a74176ec59d9e2995e67fc8d43c1" name="ac825a74176ec59d9e2995e67fc8d43c1"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#ac825a74176ec59d9e2995e67fc8d43c1">◆ </a></span>StoreAppliedImpulses()</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void ContactConstraintManager::StoreAppliedImpulses </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="_core_8h.html#a8f95e75e58492e87412191fabadd8ca8">uint32</a> *</td> <td class="paramname"><span class="paramname"><em>inConstraintIdxBegin</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="_core_8h.html#a8f95e75e58492e87412191fabadd8ca8">uint32</a> *</td> <td class="paramname"><span class="paramname"><em>inConstraintIdxEnd</em></span> ) const</td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Save back the lambdas to the contact cache for the next warm start. </p>
- </div>
- </div>
- <a id="a4abd47f225871f02cd3a0c964106439d" name="a4abd47f225871f02cd3a0c964106439d"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#a4abd47f225871f02cd3a0c964106439d">◆ </a></span>ValidateContactPoint()</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="_contact_listener_8h.html#a996dd20903cf7428fc11a70e8676b93c">ValidateResult</a> ContactConstraintManager::ValidateContactPoint </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="class_body.html">Body</a> &</td> <td class="paramname"><span class="paramname"><em>inBody1</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="class_body.html">Body</a> &</td> <td class="paramname"><span class="paramname"><em>inBody2</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="_real_8h.html#a43bea2d9c57780b4b66bab1312fd77f3">RVec3Arg</a></td> <td class="paramname"><span class="paramname"><em>inBaseOffset</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="class_collide_shape_result.html">CollideShapeResult</a> &</td> <td class="paramname"><span class="paramname"><em>inCollisionResult</em></span> ) const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
- <span class="mlabels"><span class="mlabel">inline</span></span> </td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Check with the listener if inBody1 and inBody2 could collide, returns false if not. </p>
- </div>
- </div>
- <a id="abaf06f1f9eb408cf99a8231bc8801e8f" name="abaf06f1f9eb408cf99a8231bc8801e8f"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#abaf06f1f9eb408cf99a8231bc8801e8f">◆ </a></span>WarmStartVelocityConstraints()</h2>
- <div class="memitem">
- <div class="memproto">
- <div class="memtemplate">
- template<class MotionPropertiesCallback > </div>
- <table class="memname">
- <tr>
- <td class="memname">template void ContactConstraintManager::WarmStartVelocityConstraints< DummyCalculateSolverSteps > </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="_core_8h.html#a8f95e75e58492e87412191fabadd8ca8">uint32</a> *</td> <td class="paramname"><span class="paramname"><em>inConstraintIdxBegin</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="_core_8h.html#a8f95e75e58492e87412191fabadd8ca8">uint32</a> *</td> <td class="paramname"><span class="paramname"><em>inConstraintIdxEnd</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float</td> <td class="paramname"><span class="paramname"><em>inWarmStartImpulseRatio</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">MotionPropertiesCallback &</td> <td class="paramname"><span class="paramname"><em>ioCallback</em></span> )</td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Apply last frame's impulses as an initial guess for this frame's impulses. </p>
- </div>
- </div>
- <a id="a46532b93dfd2edb0b45be8e5af4a7111" name="a46532b93dfd2edb0b45be8e5af4a7111"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#a46532b93dfd2edb0b45be8e5af4a7111">◆ </a></span>WereBodiesInContact()</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool ContactConstraintManager::WereBodiesInContact </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="class_body_i_d.html">BodyID</a> &</td> <td class="paramname"><span class="paramname"><em>inBody1ID</em></span>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="class_body_i_d.html">BodyID</a> &</td> <td class="paramname"><span class="paramname"><em>inBody2ID</em></span> ) const</td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Check if 2 bodies were in contact during the last simulation step. Since contacts are only detected between active bodies, at least one of the bodies must be active. Uses the read collision cache to determine if 2 bodies are in contact. </p>
- </div>
- </div>
- <h2 class="groupheader">Member Data Documentation</h2>
- <a id="ae8752f9dc2598bcc1449924bf105ede6" name="ae8752f9dc2598bcc1449924bf105ede6"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#ae8752f9dc2598bcc1449924bf105ede6">◆ </a></span>cMaxBodyPairsLimit</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="_core_8h.html#a69aa29b598b851b0640aa225a9e5d61d">uint</a> ContactConstraintManager::cMaxBodyPairsLimit = ~<a class="el" href="_core_8h.html#a69aa29b598b851b0640aa225a9e5d61d">uint</a>(0) / sizeof(BodyPairMap::KeyValue)</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
- <span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>The maximum value that can be passed to Init for inMaxBodyPairs. Note you should really use a lower value, using this value will cost a lot of memory! </p>
- </div>
- </div>
- <a id="ab7c0537666b9da75d92086dcc20804da" name="ab7c0537666b9da75d92086dcc20804da"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#ab7c0537666b9da75d92086dcc20804da">◆ </a></span>cMaxContactConstraintsLimit</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="_core_8h.html#a69aa29b598b851b0640aa225a9e5d61d">uint</a> ContactConstraintManager::cMaxContactConstraintsLimit = ~<a class="el" href="_core_8h.html#a69aa29b598b851b0640aa225a9e5d61d">uint</a>(0) / sizeof(ContactConstraint)</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
- <span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>The maximum value that can be passed to Init for inMaxContactConstraints. Note you should really use a lower value, using this value will cost a lot of memory! </p>
- </div>
- </div>
- <a id="a18911ccd070e4d6d0d3c74605c0d211c" name="a18911ccd070e4d6d0d3c74605c0d211c"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#a18911ccd070e4d6d0d3c74605c0d211c">◆ </a></span>MaxContactPoints</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">const int ContactConstraintManager::MaxContactPoints = 4</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
- <span class="mlabels"><span class="mlabel">static</span></span> </td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Max 4 contact points are needed for a stable manifold. </p>
- </div>
- </div>
- <a id="af60346481284d7b7f232d9b7130ccbab" name="af60346481284d7b7f232d9b7130ccbab"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#af60346481284d7b7f232d9b7130ccbab">◆ </a></span>sDrawContactManifolds</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">bool ContactConstraintManager::sDrawContactManifolds = false</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
- <span class="mlabels"><span class="mlabel">static</span></span> </td>
- </tr>
- </table>
- </div><div class="memdoc">
- </div>
- </div>
- <a id="a1c775cdd66c1e6c3c86fff836b4bc8f6" name="a1c775cdd66c1e6c3c86fff836b4bc8f6"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#a1c775cdd66c1e6c3c86fff836b4bc8f6">◆ </a></span>sDrawContactPoint</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">bool ContactConstraintManager::sDrawContactPoint = false</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
- <span class="mlabels"><span class="mlabel">static</span></span> </td>
- </tr>
- </table>
- </div><div class="memdoc">
- </div>
- </div>
- <a id="a512778f011224018a58c7cdb04ec74df" name="a512778f011224018a58c7cdb04ec74df"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#a512778f011224018a58c7cdb04ec74df">◆ </a></span>sDrawContactPointReduction</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">bool ContactConstraintManager::sDrawContactPointReduction = false</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
- <span class="mlabels"><span class="mlabel">static</span></span> </td>
- </tr>
- </table>
- </div><div class="memdoc">
- </div>
- </div>
- <a id="a7ffa89c50ba531470ecdfcfdbb073d5e" name="a7ffa89c50ba531470ecdfcfdbb073d5e"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#a7ffa89c50ba531470ecdfcfdbb073d5e">◆ </a></span>sDrawSupportingFaces</h2>
- <div class="memitem">
- <div class="memproto">
- <table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">bool ContactConstraintManager::sDrawSupportingFaces = false</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
- <span class="mlabels"><span class="mlabel">static</span></span> </td>
- </tr>
- </table>
- </div><div class="memdoc">
- </div>
- </div>
- <hr/>The documentation for this class was generated from the following files:<ul>
- <li>Jolt/Physics/Constraints/<a class="el" href="_contact_constraint_manager_8h_source.html">ContactConstraintManager.h</a></li>
- <li>Jolt/Physics/Constraints/<a class="el" href="_contact_constraint_manager_8cpp.html">ContactConstraintManager.cpp</a></li>
- </ul>
- </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="class_contact_constraint_manager.html">ContactConstraintManager</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>
|