[Opal-commits] web tutorial6.html,NONE,1.1 tutorial7.html,NONE,1.1 tutorial8.html,NONE,1.1 tutorial9
Status: Inactive
Brought to you by:
tylerstreeter
|
From: tylerstreeter <tyl...@us...> - 2005-03-26 17:35:17
|
Update of /cvsroot/opal/web In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15778 Modified Files: documentation.html todo.txt Added Files: tutorial6.html tutorial7.html tutorial8.html tutorial9.html Log Message: added template pages for the rest of the tutorials Index: todo.txt =================================================================== RCS file: /cvsroot/opal/web/todo.txt,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** todo.txt 23 Mar 2005 20:26:22 -0000 1.7 --- todo.txt 26 Mar 2005 17:34:52 -0000 1.8 *************** *** 13,16 **** --- 13,17 ---- - 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 *************** *** 41,46 **** * write a "tutorial 0" or "tutorial intro" containing these notes, or just integrate them into the tutorials - * all objects are created with default parameters, including structs, so you don't have to initialize anything you don't want to - * describe the different between contacts and collision events - contacts are physical constraints that keep objects from passing through each other --- 42,45 ---- --- NEW FILE: tutorial7.html --- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40"> <head> <meta http-equiv=Content-Type content="text/html; charset=windows-1252"> <meta name=ProgId content=Word.Document> <meta name=Generator content="Microsoft Word 10"> <meta name=Originator content="Microsoft Word 10"> <link rel=File-List href="tutorial7_files/filelist.xml"> <link rel=Edit-Time-Data href="tutorial7_files/editdata.mso"> <!--[if !mso]> <style> v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} </style> <![endif]--> <title>OPAL: Open Physics Abstraction Layer</title> <!--[if gte mso 9]><xml> <o:DocumentProperties> <o:Author>Tyler Streeter</o:Author> <o:LastAuthor>Tyler Streeter</o:LastAuthor> <o:Revision>172</o:Revision> <o:TotalTime>364</o:TotalTime> <o:Created>2004-06-05T15:20:00Z</o:Created> <o:LastSaved>2005-03-26T17:17:00Z</o:LastSaved> <o:Pages>1</o:Pages> <o:Words>540</o:Words> <o:Characters>3084</o:Characters> <o:Company>none</o:Company> <o:Lines>25</o:Lines> <o:Paragraphs>7</o:Paragraphs> <o:CharactersWithSpaces>3617</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:GrammarState>Clean</w:GrammarState> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--> <style> <!-- /* Font Definitions */ @font-face {font-family:Courier; panose-1:2 7 4 9 2 2 5 2 4 4; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Book Antiqua"; panose-1:2 4 6 2 5 3 5 3 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman"; color:white;} a:link, span.MsoHyperlink {color:#3366FF; text-decoration:underline; text-underline:single;} a:visited, span.MsoHyperlinkFollowed {color:#000066; text-decoration:underline; text-underline:single;} span.SpellE {mso-style-name:""; mso-spl-e:yes;} @page Section1 {size:8.5in 11.0in; margin:1.0in 1.25in 1.0in 1.25in; mso-header-margin:.5in; mso-footer-margin:.5in; mso-paper-source:0;} div.Section1 {page:Section1;} --> </style> <!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman";} </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> <o:shapelayout v:ext="edit"> <o:idmap v:ext="edit" data="1"/> </o:shapelayout></xml><![endif]--> </head> <body bgcolor=white lang=EN-US link="#3366FF" vlink="#000066" style='tab-interval: .5in' alink="#ffcc33"> <div class=Section1> <table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0 width="95%" style='width:95.58%;mso-cellspacing:0in;mso-padding-alt:7.5pt 7.5pt 7.5pt 7.5pt'> <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes'> <td width=1295 valign=top style='width:777.0pt;padding:7.5pt 7.5pt 7.5pt 7.5pt'> <p class=MsoNormal align=center style='text-align:center'><span style='font-family:"Book Antiqua";mso-bidi-font-family:Arial;color:black'><o:p> </o:p></span></p> <p class=MsoNormal align=center style='text-align:center'><span style='font-family:"Book Antiqua";mso-bidi-font-family:Arial;color:black'><o:p> </o:p></span></p> <p class=MsoNormal align=center style='text-align:center'><span style='font-family:"Book Antiqua";mso-bidi-font-family:Arial;color:#333333'><img width=534 height=129 id="_x0000_i1025" src="files/opal_logo.jpg" border=0><o:p></o:p></span></p> <p class=MsoNormal align=center style='text-align:center'><span style='font-family:"Book Antiqua";mso-bidi-font-family:Arial;color:black'><o:p> </o:p></span></p> <p class=MsoNormal align=center style='text-align:center'><span style='font-family:"Book Antiqua";mso-bidi-font-family:Arial;color:black'><o:p> </o:p></span></p> <p class=MsoNormal align=center style='text-align:center'><span style='font-size:22.0pt;font-family:"Book Antiqua";mso-bidi-font-family:Arial; color:black'>Tutorial 7: Event Handlers<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 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 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> </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: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 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 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> </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: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> <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'>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 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 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> </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: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> <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 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 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 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> </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: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> <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'>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> </table> <p class=MsoNormal align=center style='margin-bottom:12.0pt;text-align:center'><span style='font-size:10.0pt;font-family:"Book Antiqua";mso-bidi-font-family:Arial; color:#333333'><o:p> </o:p></span></p> <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> </body> </html> --- NEW FILE: tutorial9.html --- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40"> <head> <meta http-equiv=Content-Type content="text/html; charset=windows-1252"> <meta name=ProgId content=Word.Document> <meta name=Generator content="Microsoft Word 10"> <meta name=Originator content="Microsoft Word 10"> <link rel=File-List href="tutorial9_files/filelist.xml"> <link rel=Edit-Time-Data href="tutorial9_files/editdata.mso"> <!--[if !mso]> <style> v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} </style> <![endif]--> <title>OPAL: Open Physics Abstraction Layer</title> <!--[if gte mso 9]><xml> <o:DocumentProperties> <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> </xml><![endif]--> <style> <!-- /* Font Definitions */ @font-face {font-family:Courier; panose-1:2 7 4 9 2 2 5 2 4 4; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Book Antiqua"; panose-1:2 4 6 2 5 3 5 3 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman"; color:white;} a:link, span.MsoHyperlink {color:#3366FF; text-decoration:underline; text-underline:single;} a:visited, span.MsoHyperlinkFollowed {color:#000066; text-decoration:underline; text-underline:single;} span.SpellE {mso-style-name:""; mso-spl-e:yes;} @page Section1 {size:8.5in 11.0in; margin:1.0in 1.25in 1.0in 1.25in; mso-header-margin:.5in; mso-footer-margin:.5in; mso-paper-source:0;} div.Section1 {page:Section1;} --> </style> <!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman";} </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> <o:shapelayout v:ext="edit"> <o:idmap v:ext="edit" data="1"/> </o:shapelayout></xml><![endif]--> </head> <body bgcolor=white lang=EN-US link="#3366FF" vlink="#000066" style='tab-interval: .5in' alink="#ffcc33"> <div class=Section1> <table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0 width="95%" style='width:95.58%;mso-cellspacing:0in;mso-padding-alt:7.5pt 7.5pt 7.5pt 7.5pt'> <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes'> <td width=1295 valign=top style='width:777.0pt;padding:7.5pt 7.5pt 7.5pt 7.5pt'> <p class=MsoNormal align=center style='text-align:center'><span style='font-family:"Book Antiqua";mso-bidi-font-family:Arial;color:black'><o:p> </o:p></span></p> <p class=MsoNormal align=center style='text-align:center'><span style='font-family:"Book Antiqua";mso-bidi-font-family:Arial;color:black'><o:p> </o:p></span></p> <p class=MsoNormal align=center style='text-align:center'><span style='font-family:"Book Antiqua";mso-bidi-font-family:Arial;color:#333333'><img width=534 height=129 id="_x0000_i1025" src="files/opal_logo.jpg" border=0><o:p></o:p></span></p> <p class=MsoNormal align=center style='text-align:center'><span style='font-family:"Book Antiqua";mso-bidi-font-family:Arial;color:black'><o:p> </o:p></span></p> <p class=MsoNormal align=center style='text-align:center'><span style='font-family:"Book Antiqua";mso-bidi-font-family:Arial;color:black'><o:p> </o:p></span></p> <p class=MsoNormal align=center style='text-align:center'><span style='font-size:22.0pt;font-family:"Book Antiqua";mso-bidi-font-family:Arial; color:black'>Tutorial 9: Blueprints and OPAL XML Files<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-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 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 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> </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: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 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 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> </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: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> <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'>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 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 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> </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: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> <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 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 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 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='... [truncated message content] |