Guest User

Untitled

a guest
Jul 22nd, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.74 KB | None | 0 0
  1. import processing.opengl.*;
  2.  
  3. import oscP5.*;
  4. import netP5.*;
  5.  
  6. OscP5 oscP5;
  7.  
  8. int ballSize = 6;
  9. Hashtable<Integer, Skeleton> skels = new Hashtable<Integer, Skeleton>();
  10.  
  11. void setup() {
  12. size(screen.height*4/3/2, screen.height/2, OPENGL); //Keep 4/3 aspect ratio, since it matches the kinect's.
  13. oscP5 = new OscP5(this, "127.0.0.1", 7110);
  14. hint(ENABLE_OPENGL_4X_SMOOTH);
  15. noStroke();
  16. }
  17.  
  18.  
  19. /* incoming osc message are forwarded to the oscEvent method. */
  20. // Here you can easily see the format of the OSC messages sent. For each user, the joints are named with
  21. // the joint named followed by user ID (head0, neck0 .... r_foot0; head1, neck1.....)
  22. void oscEvent(OscMessage msg) {
  23. msg.print();
  24.  
  25. if (msg.checkAddrPattern("/joint") && msg.checkTypetag("sifff")) {
  26. // We have received joint coordinates, let's find out which skeleton/joint and save the values ;)
  27. Integer id = msg.get(1).intValue();
  28. Skeleton s = skels.get(id);
  29. if (s == null) {
  30. s = new Skeleton(id);
  31. skels.put(id, s);
  32. }
  33. if (msg.get(0).stringValue().equals("head")) {
  34. s.headCoords[0] = msg.get(2).floatValue();
  35. s.headCoords[1] = msg.get(3).floatValue();
  36. s.headCoords[2] = msg.get(4).floatValue();
  37. }
  38. else if (msg.get(0).stringValue().equals("neck")) {
  39. s.neckCoords[0] = msg.get(2).floatValue();
  40. s.neckCoords[1] = msg.get(3).floatValue();
  41. s.neckCoords[2] = msg.get(4).floatValue();
  42. }
  43. else if (msg.get(0).stringValue().equals("r_collar")) {
  44. s.rCollarCoords[0] = msg.get(2).floatValue();
  45. s.rCollarCoords[1] = msg.get(3).floatValue();
  46. s.rCollarCoords[2] = msg.get(4).floatValue();
  47. }
  48. else if (msg.get(0).stringValue().equals("r_shoulder")) {
  49. s.rShoulderCoords[0] = msg.get(2).floatValue();
  50. s.rShoulderCoords[1] = msg.get(3).floatValue();
  51. s.rShoulderCoords[2] = msg.get(4).floatValue();
  52. }
  53. else if (msg.get(0).stringValue().equals("r_elbow")) {
  54. s.rElbowCoords[0] = msg.get(2).floatValue();
  55. s.rElbowCoords[1] = msg.get(3).floatValue();
  56. s.rElbowCoords[2] = msg.get(4).floatValue();
  57. }
  58. else if (msg.get(0).stringValue().equals("r_wrist")) {
  59. s.rWristCoords[0] = msg.get(2).floatValue();
  60. s.rWristCoords[1] = msg.get(3).floatValue();
  61. s.rWristCoords[2] = msg.get(4).floatValue();
  62. }
  63. else if (msg.get(0).stringValue().equals("r_hand")) {
  64. s.rHandCoords[0] = msg.get(2).floatValue();
  65. s.rHandCoords[1] = msg.get(3).floatValue();
  66. s.rHandCoords[2] = msg.get(4).floatValue();
  67. }
  68. else if (msg.get(0).stringValue().equals("r_finger")) {
  69. s.rFingerCoords[0] = msg.get(2).floatValue();
  70. s.rFingerCoords[1] = msg.get(3).floatValue();
  71. s.rFingerCoords[2] = msg.get(4).floatValue();
  72. }
  73. else if (msg.get(0).stringValue().equals("r_collar")) {
  74. s.lCollarCoords[0] = msg.get(2).floatValue();
  75. s.lCollarCoords[1] = msg.get(3).floatValue();
  76. s.lCollarCoords[2] = msg.get(4).floatValue();
  77. }
  78. else if (msg.get(0).stringValue().equals("l_shoulder")) {
  79. s.lShoulderCoords[0] = msg.get(2).floatValue();
  80. s.lShoulderCoords[1] = msg.get(3).floatValue();
  81. s.lShoulderCoords[2] = msg.get(4).floatValue();
  82. }
  83. else if (msg.get(0).stringValue().equals("l_elbow")) {
  84. s.lElbowCoords[0] = msg.get(2).floatValue();
  85. s.lElbowCoords[1] = msg.get(3).floatValue();
  86. s.lElbowCoords[2] = msg.get(4).floatValue();
  87. }
  88. else if (msg.get(0).stringValue().equals("l_wrist")) {
  89. s.lWristCoords[0] = msg.get(2).floatValue();
  90. s.lWristCoords[1] = msg.get(3).floatValue();
  91. s.lWristCoords[2] = msg.get(4).floatValue();
  92. }
  93. else if (msg.get(0).stringValue().equals("l_hand")) {
  94. s.lHandCoords[0] = msg.get(2).floatValue();
  95. s.lHandCoords[1] = msg.get(3).floatValue();
  96. s.lHandCoords[2] = msg.get(4).floatValue();
  97. }
  98. else if (msg.get(0).stringValue().equals("l_finger")) {
  99. s.lFingerCoords[0] = msg.get(2).floatValue();
  100. s.lFingerCoords[1] = msg.get(3).floatValue();
  101. s.lFingerCoords[2] = msg.get(4).floatValue();
  102. }
  103. else if (msg.get(0).stringValue().equals("torso")) {
  104. s.torsoCoords[0] = msg.get(2).floatValue();
  105. s.torsoCoords[1] = msg.get(3).floatValue();
  106. s.torsoCoords[2] = msg.get(4).floatValue();
  107. }
  108. else if (msg.get(0).stringValue().equals("r_hip")) {
  109. s.rHipCoords[0] = msg.get(2).floatValue();
  110. s.rHipCoords[1] = msg.get(3).floatValue();
  111. s.rHipCoords[2] = msg.get(4).floatValue();
  112. }
  113. else if (msg.get(0).stringValue().equals("r_knee")) {
  114. s.rKneeCoords[0] = msg.get(2).floatValue();
  115. s.rKneeCoords[1] = msg.get(3).floatValue();
  116. s.rKneeCoords[2] = msg.get(4).floatValue();
  117. }
  118. else if (msg.get(0).stringValue().equals("r_ankle")) {
  119. s.rAnkleCoords[0] = msg.get(2).floatValue();
  120. s.rAnkleCoords[1] = msg.get(3).floatValue();
  121. s.rAnkleCoords[2] = msg.get(4).floatValue();
  122. }
  123. else if (msg.get(0).stringValue().equals("r_foot")) {
  124. s.rFootCoords[0] = msg.get(2).floatValue();
  125. s.rFootCoords[1] = msg.get(3).floatValue();
  126. s.rFootCoords[2] = msg.get(4).floatValue();
  127. }
  128. else if (msg.get(0).stringValue().equals("l_hip")) {
  129. s.lHipCoords[0] = msg.get(2).floatValue();
  130. s.lHipCoords[1] = msg.get(3).floatValue();
  131. s.lHipCoords[2] = msg.get(4).floatValue();
  132. }
  133. else if (msg.get(0).stringValue().equals("l_knee")) {
  134. s.lKneeCoords[0] = msg.get(2).floatValue();
  135. s.lKneeCoords[1] = msg.get(3).floatValue();
  136. s.lKneeCoords[2] = msg.get(4).floatValue();
  137. }
  138. else if (msg.get(0).stringValue().equals("l_ankle")) {
  139. s.lAnkleCoords[0] = msg.get(2).floatValue();
  140. s.lAnkleCoords[1] = msg.get(3).floatValue();
  141. s.lAnkleCoords[2] = msg.get(4).floatValue();
  142. }
  143. else if (msg.get(0).stringValue().equals("l_foot")) {
  144. s.lFootCoords[0] = msg.get(2).floatValue();
  145. s.lFootCoords[1] = msg.get(3).floatValue();
  146. s.lFootCoords[2] = msg.get(4).floatValue();
  147. }
  148. }
  149. else if (msg.checkAddrPattern("/new_user") && msg.checkTypetag("i")) {
  150. // A new user is in front of the kinect... Tell him to do the calibration pose!
  151. println("New user with ID = " + msg.get(0).intValue());
  152. }
  153. else if(msg.checkAddrPattern("/new_skel") && msg.checkTypetag("i")) {
  154. //New skeleton calibrated! Lets create it!
  155. Integer id = msg.get(0).intValue();
  156. Skeleton s = new Skeleton(id);
  157. skels.put(id, s);
  158. }
  159. else if(msg.checkAddrPattern("/lost_user") && msg.checkTypetag("i")) {
  160. //Lost user/skeleton
  161. Integer id = msg.get(0).intValue();
  162. println("Lost user " + id);
  163. skels.remove(id);
  164. }
  165. }
  166.  
  167. float[] vertexFromJoint(float[] jointValues){
  168. float[] r = {jointValues[0] * width, jointValues[1] *height, -jointValues[2] * 300};
  169. return r;
  170. }
  171.  
  172. void draw()
  173. {
  174. background(0);
  175. ambientLight(64, 64, 64);
  176. lightSpecular(255,255,255);
  177. directionalLight(224,224,224, .5, 1, -1);
  178.  
  179. for (Skeleton s: skels.values()) {
  180. fill(s.colors[0], s.colors[1], s.colors[2]);
  181. for (float[] j: s.allCoords) {
  182. pushMatrix();
  183. translate(j[0]*width, j[1]*height, -j[2]*300);
  184. sphere(2 * ballSize/j[2]);
  185. popMatrix();
  186. }
  187.  
  188. //headCoords, neckCoords, rCollarCoords, rShoulderCoords, rElbowCoords, rWristCoords,
  189. // rHandCoords, rFingerCoords, lCollarCoords, lShoulderCoords, lElbowCoords, lWristCoords,
  190. // lHandCoords, lFingerCoords, torsoCoords, rHipCoords, rKneeCoords, rAnkleCoords,
  191. // rFootCoords, lHipCoords, lKneeCoords, lAnkleCoords, lFootCoords
  192. // head
  193. // |
  194. // neck -- rCollar -- rShoulder -- rElbow -- rWrist -- rHand - rFinger
  195. // |
  196. // torso
  197. // /\
  198. // lHip rHip
  199. // |
  200. // rKnee
  201. // |
  202. // rAnkle
  203. // |
  204. // rFoot
  205.  
  206. float[] headVerts = vertexFromJoint(s.headCoords);
  207. float[] neckVerts = vertexFromJoint(s.neckCoords);
  208. float[] rCollarVerts = vertexFromJoint(s.rCollarCoords);
  209. float[] lCollarVerts = vertexFromJoint(s.lCollarCoords);
  210. float[] rShoulderVerts = vertexFromJoint(s.rShoulderCoords);
  211. float[] lShoulderVerts = vertexFromJoint(s.lShoulderCoords);
  212. float[] rElbowVerts = vertexFromJoint(s.rElbowCoords);
  213. float[] lElbowVerts = vertexFromJoint(s.lElbowCoords);
  214. float[] rWristVerts = vertexFromJoint(s.rWristCoords);
  215. float[] rHandVerts = vertexFromJoint(s.rHandCoords);
  216. float[] lHandVerts = vertexFromJoint(s.lHandCoords);
  217. float[] torsoVerts = vertexFromJoint(s.torsoCoords);
  218.  
  219. float[] rHipVerts = vertexFromJoint(s.rHipCoords);
  220. float[] lHipVerts = vertexFromJoint(s.lHipCoords);
  221.  
  222. float[] rKneeVerts = vertexFromJoint(s.rKneeCoords);
  223. float[] lKneeVerts = vertexFromJoint(s.lKneeCoords);
  224.  
  225. float[] rFootVerts = vertexFromJoint(s.rFootCoords);
  226. float[] lFootVerts = vertexFromJoint(s.lFootCoords);
  227.  
  228. stroke(0,255,0);
  229. strokeWeight(3);
  230. beginShape(LINES);
  231. vertex(headVerts[0], headVerts[1], headVerts[2]);
  232. vertex(neckVerts[0], neckVerts[1], neckVerts[2]);
  233.  
  234. vertex(neckVerts[0], neckVerts[1], neckVerts[2]);
  235. vertex(rShoulderVerts[0], rShoulderVerts[1], rShoulderVerts[2]);
  236.  
  237. vertex(neckVerts[0], neckVerts[1], neckVerts[2]);
  238. vertex(lShoulderVerts[0], lShoulderVerts[1], lShoulderVerts[2]);
  239.  
  240. vertex(rShoulderVerts[0], rShoulderVerts[1], rShoulderVerts[2]);
  241. vertex(rElbowVerts[0], rElbowVerts[1], rElbowVerts[2]);
  242.  
  243. vertex(lShoulderVerts[0], lShoulderVerts[1], lShoulderVerts[2]);
  244. vertex(lElbowVerts[0], lElbowVerts[1], lElbowVerts[2]);
  245.  
  246.  
  247. vertex(rElbowVerts[0], rElbowVerts[1], rElbowVerts[2]);
  248. vertex(rHandVerts[0], rHandVerts[1], rHandVerts[2]);
  249.  
  250. vertex(lElbowVerts[0], lElbowVerts[1], lElbowVerts[2]);
  251. vertex(lHandVerts[0], lHandVerts[1], lHandVerts[2]);
  252.  
  253. vertex(neckVerts[0], neckVerts[1], neckVerts[2]);
  254. vertex(torsoVerts[0], torsoVerts[1], torsoVerts[2]);
  255.  
  256. vertex(torsoVerts[0], torsoVerts[1], torsoVerts[2]);
  257. vertex(rHipVerts[0], rHipVerts[1], rHipVerts[2]);
  258.  
  259. vertex(torsoVerts[0], torsoVerts[1], torsoVerts[2]);
  260. vertex(lHipVerts[0], lHipVerts[1], lHipVerts[2]);
  261.  
  262.  
  263. vertex(lHipVerts[0], lHipVerts[1], lHipVerts[2]);
  264. vertex(lKneeVerts[0], lKneeVerts[1], lKneeVerts[2]);
  265.  
  266. vertex(rHipVerts[0], rHipVerts[1], rHipVerts[2]);
  267. vertex(rKneeVerts[0], rKneeVerts[1], rKneeVerts[2]);
  268.  
  269.  
  270. vertex(rKneeVerts[0], rKneeVerts[1], rKneeVerts[2]);
  271. vertex(rFootVerts[0], rFootVerts[1], rFootVerts[2]);
  272.  
  273. vertex(lKneeVerts[0], lKneeVerts[1], lKneeVerts[2]);
  274. vertex(lFootVerts[0], lFootVerts[1], lFootVerts[2]);
  275.  
  276. endShape();
  277. noStroke();
  278. }
  279. }
Add Comment
Please, Sign In to add comment