{"id":364,"date":"2016-01-08T00:26:44","date_gmt":"2016-01-08T00:26:44","guid":{"rendered":"http:\/\/multimedia.uoc.edu\/blogs\/rv\/?p=364"},"modified":"2016-01-08T00:26:44","modified_gmt":"2016-01-08T00:26:44","slug":"prototip-joc-rv-amb-deteccio-de-moviment-per-llum","status":"publish","type":"post","link":"http:\/\/multimedia.uoc.edu\/blogs\/rv\/2016\/01\/08\/prototip-joc-rv-amb-deteccio-de-moviment-per-llum\/","title":{"rendered":"Prototip joc RV amb detecci\u00f3 de moviment per llum"},"content":{"rendered":"<p><img decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/i291.photobucket.com\/albums\/ll314\/Z3lg4d1s\/RV_Practica.png\" alt=\"Pantalla de Game Over de la Pr\u00e0ctica realitzada per Xavi Medina Torregrosa\" \/><\/p>\n<h6 style=\"text-align: center\"><em>Captura de pantalla del prototip de la pr\u00e0ctica de l&#8217;<del>asignatura<\/del> assignatura de realitat virtual realitzada per Xavi Medina Torregrosa<\/em><\/h6>\n<p><strong>Autor: <\/strong>Xavi Medina Torregrosa<\/p>\n<p style=\"text-align: justify\"><strong>Descripci\u00f3: <\/strong>Aquest prototip de realitat mixta \u00e9s un petit joc que fa servir una c\u00e0mera web com a interf\u00edcie l\u00f2gica, i processant la imatge de la c\u00e0mera mapeja el moviment del punt amb m\u00e9s lluentor de la imatge per fer-lo servir com a interf\u00edcie l\u00f2gica, i aquest punt \u00e9s marca en l&#8217;aplicaci\u00f3 amb una rodona vermella. Amb aix\u00f2, podem interactuar amb objectes virtuals que es troben integrats dins de la imatge de la c\u00e0mera web processada que ens retorna l&#8217;aplicaci\u00f3, formant el nostre entorn virtual conjuntament amb les lleis f\u00edsiques reals que sens aplica a nosaltres al ser el nostre cos amb el que apliquem la interacci\u00f3 com lleis f\u00edsiques irreals que s&#8217;apliquen als objectes virtuals amb els que interactuem. Per a fer el prototip m\u00e9s senzill i com no disposo de sensors de moviment, faig servir directament la imatge de la c\u00e0mera per obtenir el punt m\u00e9s brillant, encara i que no \u00e9s del tot prec\u00eds si la il\u00b7luminaci\u00f3 de la sala no \u00e9s <del><\/del>adient.<\/p>\n<p style=\"text-align: justify\">El joc, \u00e9s un tipus arcade on l&#8217;objectiu \u00e9s fer el\u00a0<del><\/del>major nombre de punts abans de perdre totes les vides, per aix\u00f2, sens presenten en pantalla dos objectes virtuals (sense imatge en el prototip), els quadrats taronges s\u00f3n els enemics, que van donant voltes per la imatge, i els altres s\u00f3n dos quadrats verds que representen les nostre vides, cada vida t\u00e9 dos &#8220;cops&#8221; abans de morir, i quan li donen un cop t\u00e9 uns tres segons d&#8217;invulnerabilitat on no rep danys. Els enemics li treuen un punt de vida cada cop que col\u00b7lapsen amb ells, i nosaltres hem d&#8217;anar eliminant als enemics abans de que acabin amb les dues vides, per aix\u00f2, hem de tocar-los amb el punt m\u00e9s <del><\/del>llumin\u00f3s (recomanable fer servir un guant negre amb algun element reflectant reflectint i que la llum vingui de davant). A m\u00e9s, podem empentar les vides tocant-les per a moure-les a zones m\u00e9s segures o m\u00e9s f\u00e0cils de defensar.<\/p>\n<p style=\"text-align: justify\">En quant a la realitzaci\u00f3 t\u00e8cnica, el joc est\u00e0 realitzat en processing, fent servir la pr\u00f2pia llibreria per a capturar la imatge de la webcam aconseguim una imatge per cada frame processat pel codi, d\u2019aquest imatge, anem mirant cada un dels p\u00edxels i fem servir la pr\u00f2pia funci\u00f3 del processing per a obtenir la lluentor. Un cop tenim el punt m\u00e9s brillant, dibuixem una esfera vermella en aquest punt per a indicar a l\u2019usuari el punt d\u2019interacci\u00f3. Per a millorar un poc la sensaci\u00f3 de moviment anem guardant les posicions m\u00e9s brillants dels frames processats anteriorment en un Array per a pintar esferes m\u00e9s petites que la principal, aix\u00ed queda com un rastre del moviment. Per a afegir m\u00e9s els objectes digitals amb els que l\u2019usuari interactuar\u00e0, dibuixem dos objectes que hem definit en una altra classe anomenada \u2018Heart\u2019, que contindr\u00e0 les coordenades en els que es troba, la vida que li queda i si es invulnerable o no. Llavors generarem aleat\u00f2riament aquests objectes dintre dels l\u00edmits de la imatge de la webcam, aquest objectes es representaran com rectangles de color verd sobre la imatge. Despr\u00e9s farem apar\u00e8ixer els enemics, que els definirem tamb\u00e9 en una classe que anomenarem \u2018Enemy\u2019, que farem apar\u00e8ixer igualment de manera aleat\u00f2ria per\u00f2 a una distancia prudencial dels objectes \u2018Heart\u2019. Aix\u00ed doncs, els objectes enemics s\u2019aniran movent pel mapa en una direcci\u00f3 aleat\u00f2ria i rebotaran en els l\u00edmits de la imatge, llavors en cada frame processat, anem comprovant si hi ha deteccions, mirant per cada objecte si qualsevol de les coordenades que comprenen l\u2019objecte entra dins de les coordenades d\u2019un altre objecte. En cas de que el p\u00edxel m\u00e9s brillant toqui un \u2018Enemy\u2019, aquest es destruir\u00e0 sumant 100 punts al marcador i tornar\u00e0 a apar\u00e8ixer en algun lloc aleatori, si toca un \u2018Heart\u2019 el mour\u00e0 segons la direcci\u00f3 en la que hagi tocat (mirem si la coordenada del punt amb el que toquem est\u00e0 m\u00e9s a la dreta\/esquerra o amunt\/avall de l\u2019objecte), aix\u00ed podem apartar un \u2018Heart\u2019 a un lloc m\u00e9s f\u00e0cil de defensar durant la partida. En cas de que un \u2018Enemy\u2019 entri dins de les coordenades d\u2019un \u2018Heart\u2019, aquest perdr\u00e0 una vida i canviar\u00e0 a color blau durant uns segons, els quals \u00e9s invulnerable i no pot perdre m\u00e9s vides. Aix\u00ed doncs, el lloc acaba quan tots els objectes \u2018Heart\u2019 tenen la vida a 0 i llavors apareixer\u00e0 el missate de \u2018Game Over\u2019.<\/p>\n<p style=\"text-align: justify\"><strong>Referents: <\/strong>Aquest prototip parteix d&#8217;un projecte d&#8217;entrenament quir\u00fargic, que fa servir uns perif\u00e8rics espec\u00edfics com a interf\u00edcies f\u00edsiques de manera que els moviments d&#8217;aquests es reflecteixen a la imatge de la simulaci\u00f3. L&#8217;empresa a c\u00e0rrec d&#8217;aquests entrenaments quir\u00fargics per simulaci\u00f3 \u00e9s: <a href=\"http:\/\/www.mentice.com\/\" target=\"_blank\">Mentice<\/a>.<\/p>\n<p style=\"text-align: justify\"><strong>Resultat final: <\/strong> <a href=\"https:\/\/www.youtube.com\/watch?v=pSYHOg4k2fc\" target=\"_blank\">V\u00eddeo del resultat final<\/a><\/p>\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>Captura de pantalla del prototip de la pr\u00e0ctica de l&#8217;asignatura assignatura de realitat virtual realitzada per Xavi Medina Torregrosa Autor: Xavi Medina Torregrosa Descripci\u00f3: Aquest prototip de realitat mixta \u00e9s un petit joc que fa servir una c\u00e0mera web com a interf\u00edcie l\u00f2gica, i processant la imatge de la c\u00e0mera mapeja el moviment del punt &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/multimedia.uoc.edu\/blogs\/rv\/2016\/01\/08\/prototip-joc-rv-amb-deteccio-de-moviment-per-llum\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Prototip joc RV amb detecci\u00f3 de moviment per llum&#8221;<\/span><\/a><\/p>\n","protected":false},"author":93,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[107,104,103,102,106,105,53,11,83],"class_list":["post-364","post","type-post","status-publish","format-standard","hentry","category-estudiants","tag-arcade","tag-camera-web","tag-deteccio-de-moviment","tag-deteccio-per-llum","tag-joc","tag-processament-dimatge","tag-processing","tag-realitat-mixta","tag-rv","entry"],"_links":{"self":[{"href":"http:\/\/multimedia.uoc.edu\/blogs\/rv\/wp-json\/wp\/v2\/posts\/364","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/multimedia.uoc.edu\/blogs\/rv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/multimedia.uoc.edu\/blogs\/rv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/multimedia.uoc.edu\/blogs\/rv\/wp-json\/wp\/v2\/users\/93"}],"replies":[{"embeddable":true,"href":"http:\/\/multimedia.uoc.edu\/blogs\/rv\/wp-json\/wp\/v2\/comments?post=364"}],"version-history":[{"count":5,"href":"http:\/\/multimedia.uoc.edu\/blogs\/rv\/wp-json\/wp\/v2\/posts\/364\/revisions"}],"predecessor-version":[{"id":597,"href":"http:\/\/multimedia.uoc.edu\/blogs\/rv\/wp-json\/wp\/v2\/posts\/364\/revisions\/597"}],"wp:attachment":[{"href":"http:\/\/multimedia.uoc.edu\/blogs\/rv\/wp-json\/wp\/v2\/media?parent=364"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/multimedia.uoc.edu\/blogs\/rv\/wp-json\/wp\/v2\/categories?post=364"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/multimedia.uoc.edu\/blogs\/rv\/wp-json\/wp\/v2\/tags?post=364"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}