Browse Source

lovr.headset.getSkeleton;

bjorn 4 years ago
parent
commit
43706476d6
2 changed files with 176 additions and 0 deletions
  1. 1 0
      api/lovr/headset/getPose.lua
  2. 175 0
      api/lovr/headset/getSkeleton.lua

+ 1 - 0
api/lovr/headset/getPose.lua

@@ -57,6 +57,7 @@ return {
     'lovr.headset.getOrientation',
     'lovr.headset.getVelocity',
     'lovr.headset.getAngularVelocity',
+    'lovr.headset.getSkeleton',
     'lovr.headset.isTracked',
     'lovr.headset.getDriver'
   }

+ 175 - 0
api/lovr/headset/getSkeleton.lua

@@ -0,0 +1,175 @@
+return {
+  tag = 'input',
+  summary = 'Get skeletal joint poses tracked by a device.',
+  description = [[
+    Returns a list of joint poses tracked by a device.  Currently, only hand devices are able to
+    track joints.
+  ]],
+  arguments = {
+    device = {
+      type = 'Device',
+      description = 'The Device to query.'
+    },
+    t = {
+      type = 'table',
+      description = 'A table to fill with the joint poses, instead of allocating a new one.'
+    }
+  },
+  returns = {
+    poses = {
+      type = 'table',
+      description = [[
+        A list of joint poses for the device.  Each pose is a table with 3 numbers for the position
+        of the joint followed by 4 numbers for the angle/axis orientation of the joint.
+      ]]
+    }
+  },
+  variants = {
+    {
+      arguments = { 'device' },
+      returns = { 'poses' }
+    },
+    {
+      arguments = { 'device', 't' },
+      returns = { 'poses' }
+    }
+  },
+  notes = [[
+    If the Device does not support tracking joints or the poses are unavailable, `nil` is returned.
+
+    Hand joints are returned in the following order:
+
+    <table>
+      <thead>
+        <tr>
+          <td>Joint</td>
+          <td>Index</td>
+        </tr>
+      </thead>
+      <tbody>
+        <tr>
+          <td>Palm</td>
+          <td>1</td>
+        </tr>
+        <tr>
+          <td>Wrist</td>
+          <td>2</td>
+        </tr>
+        <tr>
+          <td rowspan="4">Thumb</td>
+          <td>Metacarpal</td>
+          <td>3</td>
+        </tr>
+        <tr>
+          <td>Proximal</td>
+          <td>4</td>
+        </tr>
+        <tr>
+          <td>Distal</td>
+          <td>5</td>
+        </tr>
+        <tr>
+          <td>Tip</td>
+          <td>6</td>
+        </tr>
+        <tr>
+          <td rowspan="4">Index</td>
+          <td>Metacarpal</td>
+          <td>7</td>
+        </tr>
+        <tr>
+          <td>Proximal</td>
+          <td>8</td>
+        </tr>
+        <tr>
+          <td>Intermediate</td>
+          <td>9</td>
+        </tr>
+        <tr>
+          <td>Distal</td>
+          <td>10</td>
+        </tr>
+        <tr>
+          <td>Tip</td>
+          <td>11</td>
+        </tr>
+        <tr>
+          <td rowspan="4">Middle</td>
+          <td>Metacarpal</td>
+          <td>12</td>
+        </tr>
+        <tr>
+          <td>Proximal</td>
+          <td>13</td>
+        </tr>
+        <tr>
+          <td>Intermediate</td>
+          <td>14</td>
+        </tr>
+        <tr>
+          <td>Distal</td>
+          <td>15</td>
+        </tr>
+        <tr>
+          <td>Tip</td>
+          <td>16</td>
+        </tr>
+        <tr>
+          <td rowspan="4">Ring</td>
+          <td>Metacarpal</td>
+          <td>17</td>
+        </tr>
+        <tr>
+          <td>Proximal</td>
+          <td>18</td>
+        </tr>
+        <tr>
+          <td>Intermediate</td>
+          <td>19</td>
+        </tr>
+        <tr>
+          <td>Distal</td>
+          <td>20</td>
+        </tr>
+        <tr>
+          <td>Tip</td>
+          <td>21</td>
+        </tr>
+        <tr>
+          <td rowspan="4">Pinky</td>
+          <td>Metacarpal</td>
+          <td>22</td>
+        </tr>
+        <tr>
+          <td>Proximal</td>
+          <td>23</td>
+        </tr>
+        <tr>
+          <td>Intermediate</td>
+          <td>24</td>
+        </tr>
+        <tr>
+          <td>Distal</td>
+          <td>25</td>
+        </tr>
+        <tr>
+          <td>Tip</td>
+          <td>26</td>
+        </tr>
+      </tbody>
+    </table>
+  ]],
+  example = [[
+    function lovr.draw()
+      for _, hand in ipairs({ 'left', 'right' }) do
+        for _, joint in ipairs(lovr.headset.getSkeleton(hand) or {}) do
+          lovr.graphics.points(unpack(joint, 1, 3))
+        end
+      end
+    end
+  ]],
+  related = {
+    'lovr.headset.getPose',
+    'lovr.headset.animate'
+  }
+}