[Opal-commits] web documentation.html,1.12,1.13 overview.html,1.2,1.3 todo.txt,1.8,1.9 tutorial1.htm
Status: Inactive
Brought to you by:
tylerstreeter
|
From: tylerstreeter <tyl...@us...> - 2005-03-28 18:46:10
|
Update of /cvsroot/opal/web In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31757 Modified Files: documentation.html overview.html todo.txt tutorial1.html tutorial3.html tutorial4.html tutorial5.html tutorial6.html tutorial7.html Log Message: added two new tutorials: #6 (data objects) and #7 (event handlers and user data) Index: tutorial3.html =================================================================== RCS file: /cvsroot/opal/web/tutorial3.html,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** tutorial3.html 4 Mar 2005 03:45:32 -0000 1.2 --- tutorial3.html 28 Mar 2005 18:45:53 -0000 1.3 *************** *** 25,39 **** <o:Author>Tyler Streeter</o:Author> <o:LastAuthor>Tyler Streeter</o:LastAuthor> ! <o:Revision>138</o:Revision> ! <o:TotalTime>259</o:TotalTime> <o:Created>2004-06-05T15:20:00Z</o:Created> ! <o:LastSaved>2005-03-04T01:21:00Z</o:LastSaved> <o:Pages>1</o:Pages> ! <o:Words>446</o:Words> ! <o:Characters>2543</o:Characters> <o:Company>none</o:Company> ! <o:Lines>21</o:Lines> ! <o:Paragraphs>5</o:Paragraphs> ! <o:CharactersWithSpaces>2984</o:CharactersWithSpaces> <o:Version>10.6714</o:Version> </o:DocumentProperties> --- 25,39 ---- <o:Author>Tyler Streeter</o:Author> <o:LastAuthor>Tyler Streeter</o:LastAuthor> ! <o:Revision>139</o:Revision> ! <o:TotalTime>260</o:TotalTime> <o:Created>2004-06-05T15:20:00Z</o:Created> ! <o:LastSaved>2005-03-28T17:41:00Z</o:LastSaved> <o:Pages>1</o:Pages> ! <o:Words>464</o:Words> ! <o:Characters>2649</o:Characters> <o:Company>none</o:Company> ! <o:Lines>22</o:Lines> ! <o:Paragraphs>6</o:Paragraphs> ! <o:CharactersWithSpaces>3107</o:CharactersWithSpaces> <o:Version>10.6714</o:Version> </o:DocumentProperties> *************** *** 41,46 **** <w:WordDocument> <w:Zoom>90</w:Zoom> - <w:SpellingState>Clean</w:SpellingState> - <w:GrammarState>Clean</w:GrammarState> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> --- 41,44 ---- *************** *** 82,88 **** text-decoration:underline; text-underline:single;} - span.SpellE - {mso-style-name:""; - mso-spl-e:yes;} @page Section1 {size:8.5in 11.0in; --- 80,83 ---- *************** *** 112,116 **** </style> <![endif]--><!--[if gte mso 9]><xml> ! <o:shapedefaults v:ext="edit" spidmax="55298"> <o:colormenu v:ext="edit" fillcolor="white"/> </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml> --- 107,111 ---- </style> <![endif]--><!--[if gte mso 9]><xml> ! <o:shapedefaults v:ext="edit" spidmax="56322"> <o:colormenu v:ext="edit" fillcolor="white"/> </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml> *************** *** 147,157 **** <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>Joints connect two Solids, constraining their relative motion. There are ! several types of Joints, each constraining motion in different ways. <span ! style='mso-spacerun:yes'> </span>The available Joints are: Hinge Joints (one rotational degree of freedom), Universal Joints (two rotational degrees of ! freedom), Ball Joints (three rotational degrees of freedom), Wheel Joints (two ! rotational degrees of freedom; typically one axis coincides with a wheels ! axis, and the other is used for steering), Slider Joints (one translational ! degree of freedom), and Fixed Joints (zero rotational degrees of freedom).<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>Joints --- 142,153 ---- <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>Joints connect two Solids, constraining their relative motion. There are ! several types of Joints, each constraining motion in different ways.<span ! style='mso-spacerun:yes'> </span>The available Joints are: Hinge Joints (one rotational degree of freedom), Universal Joints (two rotational degrees of ! freedom), Ball Joints (three rotational degrees of freedom), Wheel Joints ! (two rotational degrees of freedom; typically one axis coincides with a ! wheels axis, and the other is used for steering), Slider Joints (one ! translational degree of freedom), and Fixed Joints (zero rotational degrees ! of freedom).<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>Joints *************** *** 168,178 **** height:22.95pt'> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>opal::Simulator</span></span><span style='font-family:Courier; ! color:black'>* <span class=SpellE>sim</span> = <span class=SpellE>opal::createSimulator</span>();<o:p></o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>opal::Joint</span></span><span style='font-family:Courier; ! color:black'>* joint = <span class=SpellE>sim</span>-><span ! class=SpellE>createJoint</span>();<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> </td> --- 164,171 ---- height:22.95pt'> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::Simulator* ! sim = opal::createSimulator();<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::Joint* ! joint = sim->createJoint();<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> </td> *************** *** 185,191 **** <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>Before ! using the Joint, it must be initialized with a <span class=SpellE>JointData</span> ! object.<span style='mso-spacerun:yes'> </span>Before it can be initialized, ! you must create two Solids and position them:<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0 align=left --- 178,184 ---- <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>Before ! using the Joint, it must be initialized with a JointData object.<span ! style='mso-spacerun:yes'> </span>Before it can be initialized, you must ! create two Solids and position them:<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0 align=left *************** *** 199,246 **** height:22.95pt'> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>opal::Solid</span></span><span style='font-family:Courier; ! color:black'>* solid0 = <span class=SpellE>sim</span>-><span ! class=SpellE>createSolid</span>();<o:p></o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>opal::BoxShapeData</span></span><span style='font-family:Courier; ! color:black'> <span class=SpellE>boxData</span>;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>solid0-><span ! class=SpellE>addShape</span>(<span class=SpellE>boxData</span>);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>opal::Solid</span></span><span style='font-family:Courier; ! color:black'>* solid1 = <span class=SpellE>sim</span>-><span ! class=SpellE>createSolid</span>();<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::Matrix44r solid1Transform;<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'>solid1Transform.translate(0.0, 1.5, 0.0);<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>solid1-><span ! class=SpellE>setTransform</span>(solid1Transform);<o:p></o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>opal::CapsuleShapeData</span></span><span style='font-family: ! Courier;color:black'> <span class=SpellE>capsuleData</span>;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>solid1-><span ! class=SpellE>addShape</span>(<span class=SpellE>capsuleData</span>);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>opal::JointData</span></span><span style='font-family:Courier; ! color:black'> <span class=SpellE>jointData</span>;<o:p></o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>jointData.setType</span></span><span style='font-family:Courier; ! color:black'>(<span class=SpellE>opal::HINGE_JOINT</span>);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'>jointData.solid0 = solid0;<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'>jointData.solid1 = solid1;<o:p></o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>jointData.anchor</span></span><span style='font-family:Courier; ! color:black'> = opal::Point3r(0.0, 0.75, 0.0);<o:p></o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>jointData.axis</span></span><span style='font-family:Courier; ! color:black'>[0].direction = opal::Vec3r(1.0, 0.0, 0.0);<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>joint->init(<span ! class=SpellE>jointData</span>);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> </td> --- 192,224 ---- height:22.95pt'> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::Solid* ! solid0 = sim->createSolid();<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::BoxShapeData ! boxData;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>solid0->addShape(boxData);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::Solid* ! solid1 = sim->createSolid();<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::Matrix44r solid1Transform;<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'>solid1Transform.translate(0.0, 1.5, 0.0);<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>solid1->setTransform(solid1Transform);<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::CapsuleShapeData ! capsuleData;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>solid1->addShape(capsuleData);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::JointData ! jointData;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>jointData.setType(opal::HINGE_JOINT);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'>jointData.solid0 = solid0;<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'>jointData.solid1 = solid1;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>jointData.anchor ! = opal::Point3r(0.0, 0.75, 0.0);<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>jointData.axis[0].direction ! = opal::Vec3r(1.0, 0.0, 0.0);<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>joint->init(jointData);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> </td> *************** *** 271,276 **** static environment by simply setting the Joints other Solid to NULL.<span style='mso-spacerun:yes'> </span>Joints can have limits for each of their ! degrees of freedom.<span style='mso-spacerun:yes'> </span>Lets create another ! Joint with some limits:<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0 align=left --- 249,254 ---- static environment by simply setting the Joints other Solid to NULL.<span style='mso-spacerun:yes'> </span>Joints can have limits for each of their ! degrees of freedom.<span style='mso-spacerun:yes'> </span>Lets create ! another Joint with some limits:<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0 align=left *************** *** 284,314 **** height:22.95pt'> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>opal::JointData</span></span><span style='font-family:Courier; ! color:black'> <span class=SpellE>jointData</span>;<o:p></o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>jointData.setType</span></span><span style='font-family:Courier; ! color:black'>(<span class=SpellE>opal::HINGE_JOINT</span>);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'>jointData.solid0 = solid0;<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'>jointData.solid1 = solid1;<o:p></o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>jointData.anchor</span></span><span style='font-family:Courier; ! color:black'> = opal::Point3r(0.0, 0.75, 0.0);<o:p></o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>jointData.axis</span></span><span style='font-family:Courier; ! color:black'>[0].direction = opal::Vec3r(1.0, 0.0, 0.0);<o:p></o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>jointData.axis</span></span><span style='font-family:Courier; ! color:black'>[0].<span class=SpellE>limitsEnabled</span> = true;<o:p></o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>jointData.axis</span></span><span style='font-family:Courier; ! color:black'>[0].<span class=SpellE>limits.low</span> = -45.0;<o:p></o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>jointData.axis</span></span><span style='font-family:Courier; ! color:black'>[0].<span class=SpellE>limits.high</span> = 25.0;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>joint->init(<span ! class=SpellE>jointData</span>);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> </td> --- 262,283 ---- height:22.95pt'> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::JointData ! jointData;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>jointData.setType(opal::HINGE_JOINT);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'>jointData.solid0 = solid0;<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'>jointData.solid1 = solid1;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>jointData.anchor ! = opal::Point3r(0.0, 0.75, 0.0);<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>jointData.axis[0].direction ! = opal::Vec3r(1.0, 0.0, 0.0);<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>jointData.axis[0].limitsEnabled ! = true;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>jointData.axis[0].limits.low ! = -45.0;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>jointData.axis[0].limits.high ! = 25.0;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>joint->init(jointData);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> </td> *************** *** 328,337 **** <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>By ! default, Joints are unbreakable: they can withstand unlimited amounts of ! stress.<span style='mso-spacerun:yes'> </span>Joints can also be setup as ! breakable Joints.<span style='mso-spacerun:yes'> </span>The following code ! sets up an existing Joint in threshold break mode (when the combined force ! and torque on the Joint exceeds some threshold, it breaks):<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0 align=left --- 297,306 ---- <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>By default, ! Joints are unbreakable: they can withstand unlimited amounts of stress.<span ! style='mso-spacerun:yes'> </span>Joints can also be setup as breakable ! Joints.<span style='mso-spacerun:yes'> </span>The following code sets up an ! existing Joint in threshold break mode (when the combined force and torque ! on the Joint exceeds some threshold, it breaks):<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0 align=left *************** *** 346,351 **** height:22.95pt'> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>joint-><span ! class=SpellE>setBreakParams</span>(<span class=SpellE>opal::THRESHOLD_MODE</span>, 3.0);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> --- 315,319 ---- height:22.95pt'> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>joint->setBreakParams(opal::THRESHOLD_MODE, 3.0);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> *************** *** 359,366 **** <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>Another Joint break mode in OPAL is accumulated mode: stress is accumulated until ! it exceeds a threshold, at which point the Joint breaks.<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>When ! you are done with a Joint, tell the Simulator to destroy it:<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0 align=left --- 327,337 ---- <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>Another Joint break mode in OPAL is accumulated mode: stress is accumulated until ! it exceeds a threshold, at which point the Joint breaks.<span ! style='mso-spacerun:yes'> </span>When a Joint breaks, it is immediately ! disabled, and the Joints JointBreakEventHandler is notified (if one has been ! set).<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>When you ! are done with a Joint, tell the Simulator to destroy it:<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0 align=left *************** *** 375,381 **** height:22.95pt'> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>sim</span></span><span style='font-family:Courier;color:black'>-><span ! class=SpellE>destroySolid</span>(joint);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> </td> --- 346,350 ---- height:22.95pt'> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>sim->destroySolid(joint);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> </td> *************** *** 399,404 **** <p class=MsoNormal align=center style='margin-bottom:12.0pt;text-align:center'><span style='font-size:8.0pt;font-family:"Book Antiqua";mso-bidi-font-family:Arial; ! color:black'>OPAL is Copyright © 2004-2005 Alan Fischer, Andres Reinot, and ! Tyler Streeter<o:p></o:p></span></p> </div> --- 368,373 ---- <p class=MsoNormal align=center style='margin-bottom:12.0pt;text-align:center'><span style='font-size:8.0pt;font-family:"Book Antiqua";mso-bidi-font-family:Arial; ! color:black'>OPAL is Copyright © 2004-2005 Alan Fischer, Andres Reinot, and Tyler ! Streeter<o:p></o:p></span></p> </div> Index: tutorial5.html =================================================================== RCS file: /cvsroot/opal/web/tutorial5.html,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** tutorial5.html 23 Mar 2005 20:26:23 -0000 1.3 --- tutorial5.html 28 Mar 2005 18:45:53 -0000 1.4 *************** *** 25,44 **** <o:Author>Tyler Streeter</o:Author> <o:LastAuthor>Tyler Streeter</o:LastAuthor> ! <o:Revision>167</o:Revision> ! <o:TotalTime>357</o:TotalTime> <o:Created>2004-06-05T15:20:00Z</o:Created> ! <o:LastSaved>2005-03-23T20:15:00Z</o:LastSaved> <o:Pages>1</o:Pages> ! <o:Words>539</o:Words> ! <o:Characters>3078</o:Characters> <o:Company>none</o:Company> ! <o:Lines>25</o:Lines> <o:Paragraphs>7</o:Paragraphs> ! <o:CharactersWithSpaces>3610</o:CharactersWithSpaces> <o:Version>10.6714</o:Version> </o:DocumentProperties> </xml><![endif]--><!--[if gte mso 9]><xml> <w:WordDocument> ! <w:SpellingState>Clean</w:SpellingState> <w:GrammarState>Clean</w:GrammarState> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> --- 25,44 ---- <o:Author>Tyler Streeter</o:Author> <o:LastAuthor>Tyler Streeter</o:LastAuthor> ! <o:Revision>169</o:Revision> ! <o:TotalTime>358</o:TotalTime> <o:Created>2004-06-05T15:20:00Z</o:Created> ! <o:LastSaved>2005-03-28T18:44:00Z</o:LastSaved> <o:Pages>1</o:Pages> ! <o:Words>557</o:Words> ! <o:Characters>3180</o:Characters> <o:Company>none</o:Company> ! <o:Lines>26</o:Lines> <o:Paragraphs>7</o:Paragraphs> ! <o:CharactersWithSpaces>3730</o:CharactersWithSpaces> <o:Version>10.6714</o:Version> </o:DocumentProperties> </xml><![endif]--><!--[if gte mso 9]><xml> <w:WordDocument> ! <w:Zoom>75</w:Zoom> <w:GrammarState>Clean</w:GrammarState> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> *************** *** 81,87 **** text-decoration:underline; text-underline:single;} - span.SpellE - {mso-style-name:""; - mso-spl-e:yes;} @page Section1 {size:8.5in 11.0in; --- 81,84 ---- *************** *** 111,115 **** </style> <![endif]--><!--[if gte mso 9]><xml> ! <o:shapedefaults v:ext="edit" spidmax="61442"> <o:colormenu v:ext="edit" fillcolor="white"/> </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml> --- 108,112 ---- </style> <![endif]--><!--[if gte mso 9]><xml> ! <o:shapedefaults v:ext="edit" spidmax="63490"> <o:colormenu v:ext="edit" fillcolor="white"/> </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml> *************** *** 146,156 **** <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>Sensors acquire information from a simulation.<span style='mso-spacerun:yes'> ! </span>There are several types of Sensors, including Acceleration Sensors, <span ! class=SpellE>Raycast</span> Sensors, and Volume Sensors.<span ! style='mso-spacerun:yes'> </span>This tutorial will show how to setup each ! type.<span style='mso-spacerun:yes'> </span>It will also give examples of ! how each type could be used.<span style='mso-spacerun:yes'> </span>Keep in ! mind that a Sensor can either be attached to a Solid or just positioned ! somewhere in the environment.<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>Lets --- 143,153 ---- <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>Sensors acquire information from a simulation.<span style='mso-spacerun:yes'> ! </span>There are several types of Sensors, including Acceleration Sensors, ! Raycast Sensors, and Volume Sensors.<span style='mso-spacerun:yes'> ! </span>This tutorial will show how to setup each type.<span ! style='mso-spacerun:yes'> </span>It will also give examples of how each type ! could be used.<span style='mso-spacerun:yes'> </span>Keep in mind that a ! Sensor can either be attached to a Solid or just positioned somewhere in the ! environment.<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>Lets *************** *** 168,178 **** height:22.95pt'> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>opal::Simulator</span></span><span style='font-family:Courier; ! color:black'>* <span class=SpellE>sim</span> = <span class=SpellE>opal::createSimulator</span>();<o:p></o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>opal::Solid</span></span><span style='font-family:Courier; ! color:black'>* solid = <span class=SpellE>sim</span>-><span ! class=SpellE>createSolid</span>();<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> </td> --- 165,172 ---- height:22.95pt'> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::Simulator* ! sim = opal::createSimulator();<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::Solid* ! solid = sim->createSolid();<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> </td> *************** *** 200,227 **** height:22.95pt'> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>opal::AccelerationSensorData</span></span><span ! style='font-family:Courier;color:black'> data;<o:p></o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>data.solid</span></span><span style='font-family:Courier; ! color:black'> = solid;<o:p></o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>data.transform.translate</span></span><span style='font-family: ! Courier;color:black'>(4, 0, -1);<o:p></o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>opal::AccelerationSensor</span></span><span style='font-family: ! Courier;color:black'>* <span class=SpellE>accelSensor</span> = <span ! class=SpellE>sim</span>-><span class=SpellE>createAccelerationSensor</span>();<o:p></o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>accelSensor</span></span><span style='font-family:Courier; ! color:black'>->init(data);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'>...<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::Vec3r ! <span class=SpellE>accel</span> = <span class=SpellE>accelSensor</span>-></span><span ! class=SpellE><span style='font-size:10.0pt;font-family:"Courier New"; ! color:windowtext'>getGlobalLinearAccel</span></span><span style='font-size: ! 10.0pt;font-family:"Courier New";color:windowtext'>();</span><span style='font-family:Courier;color:black'><o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> --- 194,212 ---- height:22.95pt'> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::AccelerationSensorData ! data;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>data.solid ! = solid;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>data.transform.translate(4, ! 0, -1);<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::AccelerationSensor* ! accelSensor = sim->createAccelerationSensor();<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>accelSensor->init(data);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'>...<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::Vec3r ! accel = accelSensor-></span><span style='font-size:10.0pt;font-family: ! "Courier New";color:windowtext'>getGlobalLinearAccel();</span><span style='font-family:Courier;color:black'><o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> *************** *** 240,254 **** <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>The ! Sensor is automatically attached to the Solid if its Solid pointer is ! set.<span style='mso-spacerun:yes'> </span>It calculates the linear and ! angular acceleration of the attached Solid at the point of the Sensor (which ! can be offset from the Solid by using the Sensors transform).<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span ! style='font-size:16.0pt;font-family:"Book Antiqua";color:black'>Raycast ! Sensor<o:p></o:p></span></b></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>The ! next Sensor is the <span class=SpellE>Raycast</span> Sensor:<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0 align=left --- 225,238 ---- <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>The Sensor ! is automatically attached to the Solid if its Solid pointer is set.<span ! style='mso-spacerun:yes'> </span>It calculates the linear and angular ! acceleration of the attached Solid at the point of the Sensor (which can be ! offset from the Solid by using the Sensors transform).<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span ! style='font-size:16.0pt;font-family:"Book Antiqua";color:black'>Raycast Sensor<o:p></o:p></span></b></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>The ! next Sensor is the Raycast Sensor:<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0 align=left *************** *** 262,303 **** height:22.95pt'> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>opal::RaycastSensorData</span></span><span style='font-family: ! Courier;color:black'> data;<o:p></o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>data.solid</span></span><span style='font-family:Courier; ! color:black'> = solid;<o:p></o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>data.ray.setOrigin</span></span><span style='font-family:Courier; ! color:black'>(opal::Point3r(0, 0, 0));<o:p></o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>data.ray.setDir</span></span><span style='font-family:Courier; ! color:black'>(opal::Vec3r(0, 0, -1));<o:p></o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>data.contactGroup</span></span><span style='font-family:Courier; ! color:black'> = 2;<o:p></o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>opal::RaycastSensor</span></span><span style='font-family: ! Courier;color:black'>* <span class=SpellE>raySensor</span> = <span ! class=SpellE>sim</span>-><span class=SpellE>createRaycastSensor</span>();<o:p></o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>raySensor</span></span><span style='font-family:Courier; ! color:black'>->init(data);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'>...<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>opal::RaycastResult</span></span><span style='font-family: ! Courier;color:black'> result = <span class=SpellE>raySensor</span>-></span><span ! class=SpellE><span style='font-family:Courier;mso-bidi-font-family:"Courier New"; ! color:windowtext'>fireRay</span></span><span style='font-family:Courier; ! mso-bidi-font-family:"Courier New";color:windowtext'>();<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;mso-bidi-font-family: ! "Courier New";color:windowtext'>opal::Point3r <span class=SpellE>hitPoint</span> ! = <span class=SpellE>result.intersection</span>;<o:p></o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! mso-bidi-font-family:"Courier New";color:windowtext'>opal::Solid</span></span><span ! style='font-family:Courier;mso-bidi-font-family:"Courier New";color:windowtext'>* ! <span class=SpellE>hitSolid</span> = <span class=SpellE>result.solid</span>;</span><span style='font-family:Courier;color:black'><o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> --- 246,273 ---- height:22.95pt'> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::RaycastSensorData ! data;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>data.solid ! = solid;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>data.ray.setOrigin(opal::Point3r(0, ! 0, 0));<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>data.ray.setDir(opal::Vec3r(0, ! 0, -1));<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>data.contactGroup ! = 2;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::RaycastSensor* ! raySensor = sim->createRaycastSensor();<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>raySensor->init(data);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'>...<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::RaycastResult ! result = raySensor-></span><span style='font-family:Courier;mso-bidi-font-family: ! "Courier New";color:windowtext'>fireRay();<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;mso-bidi-font-family: ! "Courier New";color:windowtext'>opal::Point3r hitPoint = ! result.intersection;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;mso-bidi-font-family: ! "Courier New";color:windowtext'>opal::Solid* hitSolid = result.solid;</span><span style='font-family:Courier;color:black'><o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> *************** *** 320,339 **** <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:"Book Antiqua"; ! color:black'>Raycast</span></span><span style='font-family:"Book Antiqua"; ! color:black'> Sensors must be fired manually they do not update anything ! every time step.<span style='mso-spacerun:yes'> </span>When they are fired, ! they cast a ray into the environment and return data describing the closest point ! of intersection (if any) from the rays origin.<span ! style='mso-spacerun:yes'> </span>The <span class=SpellE>Raycast</span> ! Sensor uses a contact group to limit which objects it collides with.<span ! style='mso-spacerun:yes'> </span>(See other tutorials for more information ! on contact groups.)<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><span style='mso-spacerun:yes'> </span><o:p></o:p></span></p> <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span style='font-size:16.0pt;font-family:"Book Antiqua";color:black'>Volume Sensor<o:p></o:p></span></b></p> ! <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>The Volume ! Sensor is similar to the <span class=SpellE>Raycast</span> Sensor:<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0 align=left --- 290,307 ---- <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>Raycast ! Sensors must be fired manually they do not update anything every time ! step.<span style='mso-spacerun:yes'> </span>When they are fired, they cast a ! ray into the environment and return data describing the closest point of ! intersection (if any) from the rays origin.<span style='mso-spacerun:yes'> ! </span>The Raycast Sensor uses a contact group to limit which objects it ! collides with.<span style='mso-spacerun:yes'> </span>(See other tutorials ! for more information on contact groups.)<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><span style='mso-spacerun:yes'> </span><o:p></o:p></span></p> <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span style='font-size:16.0pt;font-family:"Book Antiqua";color:black'>Volume Sensor<o:p></o:p></span></b></p> ! <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>The ! Volume Sensor is similar to the Raycast Sensor:<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0 align=left *************** *** 347,415 **** height:22.95pt'> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>opal::VolumeSensorData</span></span><span style='font-family: ! Courier;color:black'> data;<o:p></o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>data.contactGroup</span></span><span style='font-family:Courier; ! color:black'> = 5;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal:: <span ! class=SpellE>VolumeSensor</span>* <span class=SpellE>volSensor</span> = <span ! class=SpellE>sim</span>-><span class=SpellE>createVolumeSensor</span>();<o:p></o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>volSensor</span></span><span style='font-family:Courier; ! color:black'>->init(data);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'>// Define a volume Solid.<o:p></o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>opal::Solid</span></span><span style='font-family:Courier; ! color:black'>* volume = <span class=SpellE>sim</span>-><span ! class=SpellE>createSolid</span>();<o:p></o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>opal::SphereShapeData</span></span><span style='font-family: ! Courier;color:black'> <span class=SpellE>sphereData</span>;<o:p></o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>sphereData.radius</span></span><span style='font-family:Courier; ! color:black'> = 5;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>volume-><span ! class=SpellE>addShape</span>(<span class=SpellE>sphereData</span>);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'>...<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span class=SpellE><span style='font-family:Courier; ! color:black'>opal::VolumeQueryResult</span></span><span style='font-family: ! Courier;color:black'> result = <span class=SpellE>volSensor</span>-></span><span ! class=SpellE><span style='font-family:Courier;mso-bidi-font-family:"Courier New"; ! color:windowtext'>queryVolume</span></span><span style='font-family:Courier; ! mso-bidi-font-family:"Courier New";color:windowtext'>(volume);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;mso-bidi-font-family: ! "Courier New";color:windowtext'>for (<span class=SpellE>int</span> <span ! class=SpellE>i</span>=0; <span class=SpellE>i</span><<span class=SpellE>result.getNumSolids</span>(); ! ++<span class=SpellE>i</span>)<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;mso-bidi-font-family: "Courier New";color:windowtext'>{<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;mso-bidi-font-family: ! "Courier New";color:windowtext'><span style='mso-spacerun:yes'> </span><span ! class=SpellE>opal::Solid</span>* s = <span class=SpellE>result.getSolid</span>(<span ! class=SpellE>i</span>);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;mso-bidi-font-family: ! "Courier New";color:windowtext'><span style='mso-spacerun:yes'> </span><span ! class=SpellE>opal::Force</span> f;<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;mso-bidi-font-family: ! "Courier New";color:windowtext'><span style='mso-spacerun:yes'> </span><span ! class=SpellE>f.type</span> = <span class=SpellE>opal::GLOBAL_FORCE</span>;<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;mso-bidi-font-family: ! "Courier New";color:windowtext'><span style='mso-spacerun:yes'> </span><span ! class=SpellE>f.duration</span> = (<span class=SpellE>opal::real</span>)0.05;<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;mso-bidi-font-family: ! "Courier New";color:windowtext'><span style='mso-spacerun:yes'> </span><span ! class=SpellE>f.vec</span> = s-><span class=SpellE>getPosition</span>() ! volume-><span class=SpellE>getPosition</span>();<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;mso-bidi-font-family: ! "Courier New";color:windowtext'><span style='mso-spacerun:yes'> </span><span ! class=SpellE>f.vec</span> *= 100;<span style='mso-spacerun:yes'> </span><o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;mso-bidi-font-family: "Courier New";color:windowtext'><span style='mso-spacerun:yes'> ! </span>s-><span class=SpellE>addForce</span>(f);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;mso-bidi-font-family: "Courier New";color:windowtext'>}<o:p></o:p></span></p> --- 315,367 ---- height:22.95pt'> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::VolumeSensorData ! data;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>data.contactGroup ! = 5;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal:: ! VolumeSensor* volSensor = sim->createVolumeSensor();<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>volSensor->init(data);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'>// Define a volume Solid.<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::Solid* ! volume = sim->createSolid();<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::SphereShapeData ! sphereData;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>sphereData.radius ! = 5;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>volume->addShape(sphereData);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'>...<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::VolumeQueryResult ! result = volSensor-></span><span style='font-family:Courier;mso-bidi-font-family: ! "Courier New";color:windowtext'>queryVolume(volume);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;mso-bidi-font-family: ! "Courier New";color:windowtext'>for (int i=0; i<result.getNumSolids(); ! ++i)<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;mso-bidi-font-family: "Courier New";color:windowtext'>{<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;mso-bidi-font-family: ! "Courier New";color:windowtext'><span style='mso-spacerun:yes'> ! </span>opal::Solid* s = result.getSolid(i);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;mso-bidi-font-family: ! "Courier New";color:windowtext'><span style='mso-spacerun:yes'> ! </span>opal::Force f;<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;mso-bidi-font-family: ! "Courier New";color:windowtext'><span style='mso-spacerun:yes'> ! </span>f.type = opal::GLOBAL_FORCE;<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;mso-bidi-font-family: ! "Courier New";color:windowtext'><span style='mso-spacerun:yes'> ! </span>f.duration = (opal::real)0.05;<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;mso-bidi-font-family: ! "Courier New";color:windowtext'><span style='mso-spacerun:yes'> ! </span>f.vec = s->getPosition() volume->getPosition();<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;mso-bidi-font-family: ! "Courier New";color:windowtext'><span style='mso-spacerun:yes'> ! </span>f.vec *= 100;<span style='mso-spacerun:yes'> </span><o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;mso-bidi-font-family: "Courier New";color:windowtext'><span style='mso-spacerun:yes'> ! </span>s->addForce(f);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:Courier;mso-bidi-font-family: "Courier New";color:windowtext'>}<o:p></o:p></span></p> *************** *** 442,458 **** <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>Volume Sensors take a volume Solid and query the environment for Solids that collide with the volume Solid.<span style='mso-spacerun:yes'> </span>The resulting data structure contains a list of pointers to those Solids.<span ! style='mso-spacerun:yes'> </span>Like <span class=SpellE>Raycast</span> ! Sensors, they can utilize contact groups to limit the set of Solids that are ! collided with the volume Solid; simply set the contact group of the volume ! Solid.<span style='mso-spacerun:yes'> </span>They also are not updated every ! time step; they must be queried manually.<span style='mso-spacerun:yes'> ! </span>The example above shows how to simulate an explosion: it finds all the ! Solids within a 5 unit radius from the volumes center and applies an outward ! force on each object scaled linearly by its distance from the center.<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> </td> </tr> --- 394,433 ---- <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> + <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>Volume Sensors take a volume Solid and query the environment for Solids that collide with the volume Solid.<span style='mso-spacerun:yes'> </span>The resulting data structure contains a list of pointers to those Solids.<span ! style='mso-spacerun:yes'> </span>Like Raycast Sensors, they can utilize ! contact groups to limit the set of Solids that are collided with the volume ! Solid; simply set the contact group of the volume Solid.<span ! style='mso-spacerun:yes'> </span>They also are not updated every time step; ! they must be queried manually.<span style='mso-spacerun:yes'> </span>The ! example above shows how to simulate an explosion: it finds all the Solids ! within a 5 unit radius from the volumes center and applies an outward force ! on each object scaled linearly by its distance from the center.<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> ! <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span ! style='font-size:16.0pt;font-family:"Book Antiqua";color:black'>Destroying Sensors<o:p></o:p></span></b></p> ! <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>When ! you are done with a Sensor, tell the Simulator to destroy it:<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> + <table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0 align=left + style='background:silver;border-collapse:collapse;border:none;mso-border-alt: + solid windowtext .25pt;mso-table-lspace:9.0pt;margin-left:.1in;mso-table-rspace: + 9.0pt;margin-right:.1in;mso-table-anchor-vertical:paragraph;mso-table-anchor-horizontal: + page;mso-table-left:7.35pt;mso-table-top:12.7pt;mso-padding-alt:0in 5.4pt 0in 5.4pt; + mso-border-insideh:.25pt solid windowtext;mso-border-insidev:.25pt solid windowtext'> + <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:22.95pt'> + <td width=974 valign=top style='width:584.6pt;border:solid windowtext 1.0pt; + mso-border-alt:solid windowtext .25pt;padding:0in 5.4pt 0in 5.4pt; + height:22.95pt'> + <p class=MsoNormal><span style='font-family:Courier;color:black'><o:p> </o:p></span></p> + <p class=MsoNormal><span style='font-family:Courier;color:black'>sim->destroySensor(sensor);<o:p></o:p></span></p> + <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> + </td> + </tr> + </table> + <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p></o:p></span></p> </td> </tr> Index: overview.html =================================================================== RCS file: /cvsroot/opal/web/overview.html,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** overview.html 23 Mar 2005 07:55:39 -0000 1.2 --- overview.html 28 Mar 2005 18:45:52 -0000 1.3 *************** *** 25,45 **** <o:Author>Tyler Streeter</o:Author> <o:LastAuthor>Tyler Streeter</o:LastAuthor> ! <o:Revision>101</o:Revision> ! <o:TotalTime>166</o:TotalTime> <o:Created>2004-06-05T15:20:00Z</o:Created> ! <o:LastSaved>2005-03-14T02:03:00Z</o:LastSaved> <o:Pages>1</o:Pages> ! <o:Words>410</o:Words> ! <o:Characters>2341</o:Characters> <o:Company>none</o:Company> ! <o:Lines>19</o:Lines> <o:Paragraphs>5</o:Paragraphs> ! <o:CharactersWithSpaces>2746</o:CharactersWithSpaces> <o:Version>10.6714</o:Version> </o:DocumentProperties> </xml><![endif]--><!--[if gte mso 9]><xml> <w:WordDocument> ! <w:SpellingState>Clean</w:SpellingState> ! <w:GrammarState>Clean</w:GrammarState> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> --- 25,44 ---- <o:Author>Tyler Streeter</o:Author> <o:LastAuthor>Tyler Streeter</o:LastAuthor> ! <o:Revision>103</o:Revision> ! <o:TotalTime>167</o:TotalTime> <o:Created>2004-06-05T15:20:00Z</o:Created> ! <o:LastSaved>2005-03-28T16:36:00Z</o:LastSaved> <o:Pages>1</o:Pages> ! <o:Words>430</o:Words> ! <o:Characters>2451</o:Characters> <o:Company>no... [truncated message content] |