[Opal-commits] web todo.txt,1.9,1.10 tutorial9.html,1.1,1.2
Status: Inactive
Brought to you by:
tylerstreeter
|
From: tylerstreeter <tyl...@us...> - 2005-03-28 22:34:16
|
Update of /cvsroot/opal/web In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5617 Modified Files: todo.txt tutorial9.html Log Message: added a tutorial on Blueprints and XML files Index: todo.txt =================================================================== RCS file: /cvsroot/opal/web/todo.txt,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** todo.txt 28 Mar 2005 18:45:53 -0000 1.9 --- todo.txt 28 Mar 2005 22:33:54 -0000 1.10 *************** *** 2,26 **** ================= - * relate sensors to vestibular senses in sensors tutorial - * tutorials ! - move XML samples into xml tutorial; or maybe have a Blueprints page on the OPAL site; maybe remove example.xml and just describe every xml element/attribute somewhere) ! - describe trigger volumes in the contact groups tutorial ! - add diagrams ! - add more specific stuff; not just how to create things and call functions; show how to do common tasks (i.e. setup a car with motors on the front wheels); maybe just have a set of 'advanced' tutorials that combine things like this ! - read through everything to make sure it makes sense and is actually helpful ! ! * in contact group tutorial, mention that they are used for object-object physical contacts and ray and volume sensors ! ! * somewhere mention the difference between a VolumeSensor and a trigger Solid ! * notes for sensors ! - RaycastSensor (i.e. "PSD (position sensitive detector)" or "rangefinder"): measures distance from sensor to first intersection (attach to a solid [be sure to ignore collisions with the attached solid] or nothing) ! - not updated regularly; must be updated manually by user ! - VolumeSensor (i.e. "proximity sensor?"): similar to RaycastSensor, but for a volume; finds all Solids colliding with a given (attached) Solid ! - not updated regularly; must be updated manually by user ! - should this be combined with trigger solids? probably not: ProximitySensors are one-time, triggers are always updated (triggers are actually just solids with a ContactSensor and don't generate contact joints) ! - AccelerationSensor (i.e. "accelerometer"): linear and/or angular acceleration sensor ! - InclineSensor (i.e. "inclinometer"): measures angle between initial and current orientation * post api notes --- 2,9 ---- ================= * tutorials ! - relate sensors to vestibular senses in sensors tutorial ! * read through everything to make sure it makes sense and is actually helpful * post api notes Index: tutorial9.html =================================================================== RCS file: /cvsroot/opal/web/tutorial9.html,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** tutorial9.html 26 Mar 2005 17:34:52 -0000 1.1 --- tutorial9.html 28 Mar 2005 22:34:07 -0000 1.2 *************** *** 25,45 **** <o:Author>Tyler Streeter</o:Author> <o:LastAuthor>Tyler Streeter</o:LastAuthor> ! <o:Revision>176</o:Revision> ! <o:TotalTime>375</o:TotalTime> <o:Created>2004-06-05T15:20:00Z</o:Created> ! <o:LastSaved>2005-03-26T17:28:00Z</o:LastSaved> <o:Pages>1</o:Pages> ! <o:Words>621</o:Words> ! <o:Characters>3545</o:Characters> <o:Company>none</o:Company> ! <o:Lines>29</o:Lines> ! <o:Paragraphs>8</o:Paragraphs> ! <o:CharactersWithSpaces>4158</o:CharactersWithSpaces> <o:Version>10.6714</o:Version> </o:DocumentProperties> </xml><![endif]--><!--[if gte mso 9]><xml> <w:WordDocument> ! <w:Zoom>90</w:Zoom> ! <w:SpellingState>Clean</w:SpellingState> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> --- 25,44 ---- <o:Author>Tyler Streeter</o:Author> <o:LastAuthor>Tyler Streeter</o:LastAuthor> ! <o:Revision>241</o:Revision> ! <o:TotalTime>508</o:TotalTime> <o:Created>2004-06-05T15:20:00Z</o:Created> ! <o:LastSaved>2005-03-28T22:27:00Z</o:LastSaved> <o:Pages>1</o:Pages> ! <o:Words>1157</o:Words> ! <o:Characters>6599</o:Characters> <o:Company>none</o:Company> ! <o:Lines>54</o:Lines> ! <o:Paragraphs>15</o:Paragraphs> ! <o:CharactersWithSpaces>7741</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:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> *************** *** 81,87 **** text-decoration:underline; text-underline:single;} - span.SpellE - {mso-style-name:""; - mso-spl-e:yes;} @page Section1 {size:8.5in 11.0in; --- 80,83 ---- *************** *** 92,95 **** --- 88,163 ---- div.Section1 {page:Section1;} + /* List Definitions */ + @list l0 + {mso-list-id:880628336; + mso-list-template-ids:-1775226150;} + @list l0:level1 + {mso-level-number-format:bullet; + mso-level-text:o; + mso-level-tab-stop:.5in; + mso-level-number-position:left; + text-indent:-.25in; + mso-ansi-font-size:10.0pt; + font-family:"Courier New"; + mso-bidi-font-family:"Times New Roman";} + @list l1 + {mso-list-id:1412464396; + mso-list-template-ids:2009647496;} + @list l1:level1 + {mso-level-number-format:bullet; + mso-level-text:o; + mso-level-tab-stop:.5in; + mso-level-number-position:left; + text-indent:-.25in; + mso-ansi-font-size:10.0pt; + font-family:"Courier New"; + mso-bidi-font-family:"Times New Roman";} + @list l2 + {mso-list-id:1974284744; + mso-list-type:hybrid; + mso-list-template-ids:26922882 67698691 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} + @list l2:level1 + {mso-level-number-format:bullet; + mso-level-text:o; + mso-level-tab-stop:.5in; + mso-level-number-position:left; + text-indent:-.25in; + font-family:"Courier New";} + @list l2:level2 + {mso-level-tab-stop:1.0in; + mso-level-number-position:left; + text-indent:-.25in;} + @list l2:level3 + {mso-level-tab-stop:1.5in; + mso-level-number-position:left; + text-indent:-.25in;} + @list l2:level4 + {mso-level-tab-stop:2.0in; + mso-level-number-position:left; + text-indent:-.25in;} + @list l2:level5 + {mso-level-tab-stop:2.5in; + mso-level-number-position:left; + text-indent:-.25in;} + @list l2:level6 + {mso-level-tab-stop:3.0in; + mso-level-number-position:left; + text-indent:-.25in;} + @list l2:level7 + {mso-level-tab-stop:3.5in; + mso-level-number-position:left; + text-indent:-.25in;} + @list l2:level8 + {mso-level-tab-stop:4.0in; + mso-level-number-position:left; + text-indent:-.25in;} + @list l2:level9 + {mso-level-tab-stop:4.5in; + mso-level-number-position:left; + text-indent:-.25in;} + ol + {margin-bottom:0in;} + ul + {margin-bottom:0in;} --> </style> *************** *** 111,115 **** </style> <![endif]--><!--[if gte mso 9]><xml> ! <o:shapedefaults v:ext="edit" spidmax="64514"> <o:colormenu v:ext="edit" fillcolor="white"/> </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml> --- 179,183 ---- </style> <![endif]--><!--[if gte mso 9]><xml> ! <o:shapedefaults v:ext="edit" spidmax="66562"> <o:colormenu v:ext="edit" fillcolor="white"/> </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml> *************** *** 146,191 **** <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span style='font-family:"Book Antiqua";color:black'>Note:</span></b><span ! style='font-family:"Book Antiqua";color:black'> See a list of example OPAL XML ! files at the end of this page.<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'>asdfkasjdnlkasjdnf;lkasdnf</span></span><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'>asdf;klnsad;lknsd</span></span><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'>asd;flksandf</span></span><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><b style='mso-bidi-font-weight:normal'><span ! style='font-size:16.0pt;font-family:"Book Antiqua";color:black'>Example OPAL ! XML <span class=SpellE>Files</span><o:p></o:p></span></b></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'><a - href="files/example.xml"><span class=SpellE>example.xml</span></a>: Contains examples - of every object type and parameter.<span style='mso-spacerun:yes'> - </span>This is to be used as a reference that shows all the available elements - and attributes.<span style='mso-spacerun:yes'> </span>It is a valid file - that OPAL can load, but it isnt very useful to instantiate.<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'><a - href="files/ragdoll.xml"><span class=SpellE>ragdoll.xml</span></a>: Contains a - <span class=SpellE>ragdoll</span> Blueprint of medium complexity.<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'>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 ! first create all the objects well need (and assume they will be initialized ! elsewhere):<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 --- 214,365 ---- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span style='font-family:"Book Antiqua";color:black'>Note:</span></b><span ! style='font-family:"Book Antiqua";color:black'> See a list of example OPAL ! XML files at the end of this page.<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'>This tutorial ! covers Blueprints and OPAL XML files, two features that are useful when ! dealing with complex physical objects containing several different components ! (e.g. vehicles, ragdolls, game levels, etc.)<span style='mso-spacerun:yes'> ! </span>Blueprints are collections of data objects that describe Solids, ! Joints, Motors, and Sensors.<span style='mso-spacerun:yes'> </span>They can ! be setup by manually creating data objects and adding them to the Blueprint, ! by copying data from existing Solids, Joints, etc., or by loading them from ! OPAL XML files.<span style='mso-spacerun:yes'> </span>Objects that refer to ! others (e.g. a Joint refers to two Solids) can only refer to objects within ! the same Blueprint.<span style='mso-spacerun:yes'> </span>Instantiating a ! Blueprint returns a BlueprintInstance object that contains pointers to all ! the instantiated objects within the Blueprint; this will be described towards ! the end of the tutorial.<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'>Creating ! Blueprints Manually<o:p></o:p></span></b></p> ! <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>The ! first example here shows how to create a Blueprint totally from scratch and ! instantiate 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'> ! <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'>opal::Simulator* ! sim = opal::createSimulator();<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'>// Create ! a SolidData object.<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::SolidData ! solid1Data;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>solid1Data.name ! = object1;<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'>solid1Data.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'>// Create ! another SolidData object.<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::SolidData ! solid2Data;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>solid2Data.name ! = object2;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>solid2Data.translate(0.0, ! 1.5, 0.0);<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'>solid2Data.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'>// Create ! a JointData object.<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.solid0BlueprintRefName ! = solid0;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>jointData.solid1BlueprintRefName ! = 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'><o:p> </o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>// Setup a ! Blueprint.<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::Blueprint ! bp;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>bp.addSolid(&solid1Data);<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>bp.addSolid(&solid2Data);<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>bp.addJoint(jointData);<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>bp.finalize();<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'>// ! Instantiate the Blueprint.<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::BlueprintInstance ! instance;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>sim->instantiateBlueprint(instance, ! bp);<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> ! <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'><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'><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'><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'><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'><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'><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'><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'><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'><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'><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'>Instantiating ! the Blueprint will create instances of all the objects contained in the ! Blueprint.<span style='mso-spacerun:yes'> </span>The call to finalize is ! necessary to let the Blueprint setup internal indices used for references to ! objects within the Blueprint.<span style='mso-spacerun:yes'> </span>The ! Blueprint cannot be modified after calling finalize.<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'>Note ! the use of object names here.<span style='mso-spacerun:yes'> </span>All ! references to objects within a Blueprint must use string names.<span ! style='mso-spacerun:yes'> </span>If the JointData object here contained ! invalid strings for the Solid names, the Joint could not be instantiated ! later.<span style='mso-spacerun:yes'> </span>All string names for a certain ! type of object must be unique within a given Blueprint.<span ! style='mso-spacerun:yes'> </span>The Blueprint ignores pointer references; ! for example, the JointData object contains two Solid pointers, but the ! Blueprint ignores these and only uses the solid0BlueprintRefName and solid0BlueprintRefName ! strings.<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 ! second example shows how to create a Blueprint by cloning existing objects:<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,209 **** 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> --- 373,429 ---- 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* ! solid1 = sim->createSolid();<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::Solid* ! solid2 = sim->createSolid();<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::Solid* ! joint = sim->createJoint();<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'>// Get a ! SolidData object from an existing Solid.<span style='mso-spacerun:yes'> ! </span>It is assumed that the <o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>// Solids ! name has been set via Solid::setName.<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::SolidData ! solid1Data = solid1->getData();<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'>// Get a ! SolidData object from another existing Solid.<span ! style='mso-spacerun:yes'> </span>It is assumed that <o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>// the Solids ! name has been set via Solid::setName.<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::SolidData ! solid2Data = solid2->getData();<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'>// Get a ! JointData object from an existing Joint.<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::JointData ! jointData = joint->getData();<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'>// Setup a ! Blueprint.<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::Blueprint ! bp;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>bp.addSolid(&solid1Data);<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>bp.addSolid(&solid2Data);<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>bp.addJoint(jointData);<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>bp.finalize();<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'>// ! Instantiate the Blueprint.<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::BlueprintInstance ! instance1, instance2;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>sim->instantiateBlueprint(instance1, ! bp);<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::Matrix44r ! offset;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>offset.translate(5, ! 0, 0);<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>sim->instantiateBlueprint(instance2, ! bp, offset);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> </td> *************** *** 211,223 **** </table> <p class=MsoNormal><span style='font-family:"Book Antiqua";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:"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><b style='mso-bidi-font-weight:normal'><span ! style='font-size:16.0pt;font-family:"Book Antiqua";color:black'>Acceleration ! Sensor<o:p></o:p></span></b></p> ! <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>The ! first Sensor we will use here is an Acceleration 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 --- 431,489 ---- </table> <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'><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'><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'><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'><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'><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'><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'><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'><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'><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'><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'>Besides + the use of existing data objects, this example contained a notable difference + from the previous one: it instantiated the Blueprint twice, each time at a + different location.<span style='mso-spacerun:yes'> </span>The instantiateBlueprint + function takes an offset matrix (and a real value for scaling, not shown + here) that can affect everything in the Blueprint instance at once.<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><b style='mso-bidi-font-weight:normal'><span ! style='font-size:16.0pt;font-family:"Book Antiqua";color:black'>Loading Blueprints ! from OPAL XML Files<o:p></o:p></span></b></p> ! <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>OPAL ! XML files can be used to describe all parameters for Solids, Joints, Motors, ! and Sensors.<span style='mso-spacerun:yes'> </span>Each file can contain a ! single Blueprint.<span style='mso-spacerun:yes'> </span>Rather than describe ! the complete specification for these XML files, this tutorial contains an ! example that shows every possible XML element and attribute in the OPAL XML ! files (see the example.xml file in the section below).<span ! style='mso-spacerun:yes'> </span>Most XML elements are optional; the only ! required elements are objects types and string references to other objects ! (e.g. a Joints references to two Solids).<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'>Here ! we load a Blueprint from a file and instantiate 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 *************** *** 231,259 **** 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> </td> --- 497,516 ---- 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::Blueprint ! sailboatBP;<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'>// Load ! the Blueprint from a file.<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::loadFile(sailboatBP, ! sailboat.xml);<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'>// ! Instantiate the Blueprint.<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::BlueprintInstance ! instance;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>sim->instantiateBlueprint(instance, ! sailboatBP);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> </td> *************** *** 261,265 **** </table> <p class=MsoNormal><span style='font-family:"Book Antiqua";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:"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> --- 518,521 ---- *************** *** 271,285 **** <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 --- 527,550 ---- <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'>If a ! Blueprint loaded from a file is to be instantiated multiple times, it is wise ! to keep the Blueprint around until you are done with it to keep from loading ! the file multiple times.<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'>Getting ! Access to Instantiated Object Pointers<o:p></o:p></span></b></p> ! <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'>Once a ! Blueprint is instantiated, you may want to get pointers to all the individual ! objects that were just created.<span style='mso-spacerun:yes'> </span>There ! are two ways to do this: getting a pointer by name and looping over the ! pointers.<span style='mso-spacerun:yes'> </span>The following examples ! demonstrate these methods.<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'>Here ! we will load a Blueprint from a file, instantiate it, and get pointers to ! specific objects by name (note that the objects must have been given names in ! order to find them after instantiation):<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 *************** *** 293,335 **** 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> </td> --- 558,584 ---- 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::Blueprint ! sailboatBP;<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'>// Load ! the Blueprint from a file.<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::loadFile(sailboatBP, ! sailboat.xml);<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'>// ! Instantiate the Blueprint.<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::BlueprintInstance ! instance;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>sim->instantiateBlueprint(instance, ! sailboatBP);<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* ! hullSolid = instance.getSolid(hull);<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::Solid* ! mastSolid = instance.getSolid(mast);<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::ThrusterMotor* ! engine = instance.getMotor(main engine);<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> </td> *************** *** 337,341 **** </table> <p class=MsoNormal><span style='font-family:"Book Antiqua";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:"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> --- 586,589 ---- *************** *** 351,370 **** <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 --- 599,606 ---- <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'>The ! next example loops through every Solid in the instance, creating and storing an ! application-specific object for each:<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 *************** *** 378,448 **** 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> <p class=MsoNormal><span style='font-family:"Book Antiqua";color:black'><o:p> </o:p></span></p> </td> --- 614,648 ---- 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::Blueprint ! sailboatBP;<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'>// Load ! the Blueprint from a file.<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::loadFile(sailboatBP, ! sailboat.xml);<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'>// ! Instantiate the Blueprint.<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>opal::BlueprintInstance ! instance;<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'>sim->instantiateBlueprint(instance, ! sailboatBP);<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'>for (int ! i=0; i<instance.getNumSolids(); ++i)<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'><span ! style='mso-spacerun:yes'> </span>opal::Solid* solid = ! instance.getSolid(i);<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'><span ! style='mso-spacerun:yes'> </span>PhysicalPart* newPart = new ! PhysicalPart();<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'><span ! style='mso-spacerun:yes'> </span>newPart->setOPALSolid(solid);<o:p></o:p></span></p> ! <p class=MsoNormal><span style='font-family:Courier;color:black'><span ! style='mso-spacerun:yes'> </span>AppSceneManager::addPart(newPart);<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:"Book Antiqua";color:black'><o:p> </o:p></span></p> </td> *************** *** 450,456 **** </table> <p class=MsoNormal><span style='font-family:"Book Antiqua";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:"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'><o:p> </o:p></span></p> --- 650,653 ---- *************** *** 471,489 **** <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'><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-sp... [truncated message content] |