åºæ¬çãªã¬ãã«ã§ã¯ãæ¡å¼µç¾å®ã¾ãã¯ä»®æ³ç¾å®ã®ã³ã³ããã¹ãã§ã® WebXR ãã¬ã¼ã³ãã¼ã·ã§ã³ã®ã·ã¼ã³ã®ã¬ã³ããªã³ã°ã¯ WebGL ã使ç¨ãã¦å®è¡ãããããã 2 ã¤ã® API ã¯åãè¨è¨è¨èªã®å¤ããå ±æãã¾ãããã ããXR ãããã»ãããªã©ã®æ©å¨ã使ç¨ãã¦çã®ä¸æ¬¡å ã§ã·ã¼ã³ãæç¤ºããæ©è½ãæä¾ããããã«ãWebXR ã«ã¯çè§£ããå¿ è¦ããã追å ã®æ¦å¿µãããã¾ãã
ãã®è¨äºã§ã¯ã WebXR ã WebGL ã®å½¢ç¶ãæ¡å¼µããæ¹æ³ã¨ããªãã¸ã§ã¯ãã®ä½ç½®ã¨æ¹åï¼ç©ççããã³ä»®æ³çï¼ã空éãç¹ã«åç §ç©ºéã使ç¨ãã¦ç¸äºã«ã©ã®ããã«è¨è¿°ãããããç´¹ä»ãã¾ãã
WebXR ã§ã®ç©ºé追跡ã®è¨äºã¯ãã¦ã¼ã¶ã¼ã®é ã®ç©ççãªä½ç½®ã¨åãã ãã§ãªããæãªã©ã®æ½å¨çã«èº«ä½ã®ä»ã®é¨åããã¸ã¿ã«ä¸çã«ãããã³ã°ãããç©çãªãã¸ã§ã¯ãã¨ä»®æ³ãªãã¸ã§ã¯ãã®ä¸¡æ¹ãåãåãã¨ãã«è¿½è·¡ãããããã«ãã¼ãããããããã§æä¾ãããæ å ±ã«åºã¥ãã¦ãã·ã¼ã³ãé©åã«ã¬ã³ããªã³ã°ãã¦åæã§ããããã«ãã¾ãã
䏿¬¡å å½¢ç¶ã®åºç¤ããã§ã¯ãä»®æ³ç©ºéå ã®ãªãã¸ã§ã¯ãã®ä½ç½®ãæ¹åãåããè¨ç®ããããã«ä½¿ç¨ãããå¿ è¦ãªæ°å¦æ¼ç®ã«å ãã¦ãã·ã¼ã³ã®äººéã®ãã¥ã¼ã¢ã¼ãæ··åç©ã®ä¸ã«çµ±åããå¿ è¦æ§ã«ã¤ãã¦èª¬æãã¾ãããå½¢ç¶ãã·ã¼ã³ã®ä¸æ¬¡å 表ç¾ã管çããããã®è¡åã¨ãã¯ãã«ã¯ããã®è¨äºã§éæã§ãããã¨ã®ç¯å²ãã¯ããã«è¶ ãã¦ãã¾ãã ã¦ã§ãã®è¡åè¨ç®ã§åã ã®æ¼ç®ã«ã¤ãã¦è©³ããç¥ããã¨ãã§ãã¾ãã
åä½WebXR ã§ä½¿ç¨ããã 䏿¬¡å 空éã®å½¢ç¶ã®è©³ç´°ã«ã¤ãã¦èª¬æããåã«ã䏿¬¡å ã®ä¸çã«é©ç¨ãããæ¸¬å®åä½ãçè§£ãã¦ããã¨å½¹ã«ç«ã¡ã¾ãã
é·ãã¨è·é¢WebGL ã¯ãã¹ã¦ã®è·é¢ã¨é·ããã¡ã¼ãã« (meters) ã§æ¸¬å®ãã¾ãã WebXR ã¯ãã®æ¨æºãç¶æ¿ãã¦ãã¾ãã ã¾ããä¸çã¯å¹ 2 ã¡ã¼ãã«ãé«ã 2 ã¡ã¼ãã«ã奥è¡ã 2 ã¡ã¼ãã«ã®ç«æ¹ä½ã§ããã¨ããäºå®ãç¶æ¿ãã¦ãã¾ãã 3 ã¤ã®è»¸ã®ããããã®æå°å¤ã¯ -1.0ãæå¤§å¤ã¯ 1.0 ã§ãç«æ¹ä½ã®ä¸å¿ã¯ (0, 0, 0) ã«ããã¾ãã
ãã® 8 ç«æ¹ã¡ã¼ãã«ã®ç©ºéã¯ãã³ã¼ãã®ããã«å®å®å ¨ä½ãå²ãã§ãã¾ãã æç»ãããã¹ã¦ã®ãã®ã¯ãã³ã¼ãå ã§æç¤ºçã«ãã¾ãã¯å¤æã使ç¨ãã¦ãã¹ã¦ã®é ç¹ã®åº§æ¨ã調æ´ãããã¨ã«ããããã®ç©ºéã«åã¾ãããã«åº§æ¨ããããã³ã°ããå¿ è¦ãããã¾ãã ãã¡ãããæãå¹ççãªæ¹æ³ã¯ãWebGL ã¨åã座æ¨ç³»ã使ç¨ããããã«ãªãã¸ã§ã¯ãã¨ã³ã¼ããè¨è¨ãããã¨ã§ãã
WebGL ã®åº§æ¨ã¨é·ãã¯ãã¬ã³ããªã³ã°æã«ã·ã¼ã³ãã¬ã³ããªã³ã°ããã¦ãããã¥ã¼ãã¼ãã®å¤§ããã«èªåçã«å¤æããã¾ãã
è§åº¦è§åº¦ã¯ ã©ã¸ã¢ã³ (radians) ã使ç¨ãã¦æå®ãã¾ãã 度ãã©ã¸ã¢ã³ã«å¤æããã«ã¯ã度ã®å¤ã« Ï/180
ãæããã ãã§ãã æ¬¡ã®ã³ã¼ãã¹ããããã¯ã 2 ã¤ã®åç´ãªé¢æ°ãdegreesToRadians()
㨠radiansToDegrees()
ã示ãã¦ãã¾ãã ãããã¯ãè§åº¦ã測å®ããããã«2ã¤ã®åä½éã§ç¸äºã«å¤æãã¾ãã
const RADIANS_PER_DEGREE = Math.PI / 180.0;
let degreesToRadians = (deg) => deg * RADIANS_PER_DEGREE;
let radiansToDegrees = (rad) => rad / RADIANS_PER_DEGREE;
æå»ã¨æç¶æé
ã¡ã¢: ã»ãã¥ãªãã£ä¸ã®çç±ãããDOMHighResTimeStamp
ã¯é常ããã£ã³ã¬ã¼ããªã³ããã¿ã¤ãã³ã°ãã¼ã¹ã®æ»æã§ä½¿ç¨ãããªãããã«ããããã«ãã¯ããã¯ã«å°ãã®ä¸æ£ç¢ºããå°å
¥ãã¾ãã
WebXR ã®ãã¹ã¦ã®æå»ã¨æç¶æéã¯ã DOMHighResTimeStamp
åã使ç¨ãã¦æ¸¬å®ãã¾ãã ããã¯ãéå§æå»ãåºæºã«ããªç§åä½ã§æå»ãæå®ããå精度浮åå°æ°ç¹å¤ã§ãã å¤ã¯æµ®åå°æ°ç¹æ°ã§ããããããã©ãããã©ã¼ã ã¨ãã¼ãã¦ã§ã¢ã«ãã£ã¦ã¯ãããªç§ã¬ãã«ãããæ£ç¢ºã§ããå ´åãããã¾ãã
æå»ã¯ä¸»ã«ãã·ã¼ã³ã®åã®ã¢ãã¡ã¼ã·ã§ã³ãã¬ã¼ã ãæç»ããã¦ããã®çµéæéãæ±ºå®ããããã«ä½¿ç¨ãã¾ãã ãã®ãããæå»ã¯é常ããã£ã¹ãã¬ã¤ã®ãªãã¬ãã·ã¥ã¬ã¼ãã«å調ããããã©ã¼ãã³ã¹ã®åé¡ã«ãããã¬ã¼ã ã¬ã¼ããå¶éããå¿ è¦ãããå ´åã¯ããã®ä¸é¨ã«å調ãã¾ãã ããã¯ã60 FPS ã®ãã¬ã¼ã ã¬ã¼ããæ³å®ãã¦ãæå»ã¯é常 1/60 ç§ã®ééã§é²ããã¨ãæå³ãã¾ãã è¨ç®ããã¨ãããã¯åãã¬ã¼ã ã 16.6667 ããªç§ééã§çæ³çã«ã¬ã³ããªã³ã°ããããã¨ãæå³ãããã¨ããããã¾ãã
è¡åã使ç¨ããå½¢ç¶æä½ä»¥ä¸ã«ã䏿¬¡å ã·ã¼ã³ã®ã¬ã³ããªã³ã°æã«å®è¡ããå¿ è¦ããã3ã¤ã®ä¸»è¦ãªå¤æã«è¡åã使ç¨ããæ¹æ³ãªã©ã䏿¬¡å å½¢ç¶ã«é¢é£ããè¡åæ°å¦ã®ã¬ã¤ããæä¾ãã¾ãã
夿ãç¹ã«é©ç¨ãããã¨è¨ãã¨ãããã®å»¶é·ç·ä¸ã§èããã¨ãç¹ã®éã¾ãã«é©ç¨ã§ãããã¨ã«æ³¨æãã¦ãã ããã ãªãã¸ã§ã¯ãã¯ç©ºéå ã®ããã¤ãã®ç¹ã§æ§æãããããã¤ãã®ããªã´ã³ã§è¡¨ãããããããªãã¸ã§ã¯ããæ§æãããã¹ã¦ã®ç¹ã«åã夿ãé©ç¨ããã¨ããªãã¸ã§ã¯ãå ¨ä½ã«åã夿ãé©ç¨ããã¾ãã ãã¯ãã«ã¯åº§æ¨å¤ã使ç¨ãã¦è¨è¿°ããããã¯ãã«ã®æ¹åã¨å¤§ãããå®ç¾©ããããã夿ããã¯ãã«ã«é©ç¨ãããã¨ãã§ãã¾ãã
空éã®åç¹ã«ã¤ãã¦XR ã§è¡¨ç¾ãããã·ã¼ã³ã¯ãä»®æ³ã§ããæ¡å¼µã§ããã 1 ããæ°åãã¬ã¼ã ã®åç §æ å ±ãåæãããã®ã§ããä½ç½®ã¨æ¹åã®ãã¼ã¿ã WebXR ã·ã¹ãã ã¨ç´æ¥äº¤æããå¿ è¦ãããã·ã¼ã³å ã®åãªãã¸ã§ã¯ãã¯ãã·ã¼ã³å ã®ä»ã®ãªãã¸ã§ã¯ããçè§£ã§ããããã«ãå¿ è¦ã«å¿ãã¦çè§£ããã³é©å¿ã§ããæ¹æ³ã§ãã®æ å ±ãå ±åã§ããå¿ è¦ãããã¾ãã
æ¡å¼µç¾å® (AR) ã§ã¯ãããã¯ãä»®æ³ãªãã¸ã§ã¯ããç¾å®ã®ä¸çã«æ¿å ¥ããå¿ è¦ãããããã§ãã ä»®æ³ãªãã¸ã§ã¯ããæ£ããé ç½®ããã ãã§ãªããã¦ã¼ã¶ã¼ã®è¦ç¹ãå¤åãã¦ããä»®æ³ãªãã¸ã§ã¯ããèªåã§ãã¾ãã£ã¦ããããã«è¦ããªãããã«ãã¾ãã ä»®æ³ç¾å® (VR) ã§ã¯ãã¦ã¼ã¶ã¼ã®åãã¨ä»®æ³ãã£ã¹ãã¬ã¤ã®æ åãä¸è´ãããããªç©ºéæ¼åºããããã¨ã§ãéåæããºã¬ãé²ããã¨ãéè¦ã§ãã
ãããã£ã¦ãããã¯ç©ºéæè¦ãä½ãåºããã¨ããã¹ã¦ã§ãã XR éçºè ã®è¦³ç¹ããè¦ãã¨ãã¹ãã¼ã¸ã®è¨è¨ã¯ã¦ã¼ã¶ã¼ã«ã¨ã£ã¦æãéè¦ãªé¨åã§ãã 建ç¯å®¶ãã»ãããã¶ã¤ãã¼ã®ããã«ãããªãã¯ç©ççãªç°å¢ãéãã¦æ°åãä½é¨ãçã¿åºãåãæã£ã¦ãã¾ãã ãã®ç©ºéãã©ã®ããã«æ§ç¯ãããã¯ãã¦ã¼ã¶ã¼ãã©ã®ããã«å¯¾è©±ãã¦æ¢ç´¢ã§ãããã«ä¾åããå½±é¿ãä¸ãã¾ãã
ã¡ã¢: 空éã«ã¯é常ã忝ãä¸è·é¢ãèæ¯ã®è¦ç´ ãããã¾ãã é©åãªãã©ã³ã¹ã¯ãã¦ãã¼ã¯ãªå卿ãçã¿åºããã¦ã¼ã¶ã¼ãå°ããã¨ãã§ãã¾ãã 忝ã«ã¯ãç´æ¥å¯¾è©±ã§ãããªãã¸ã§ã¯ãã¨ã¤ã³ã¿ã¼ãã§ã¤ã¹ãå«ã¾ãã¦ãã¾ãã ä¸è·é¢ã«ã¯ãããç¨åº¦å¯¾è©±ã§ãããªãã¸ã§ã¯ããã¾ãã¯ãã坿¥ã«èª¿æ»ãã¦é¢ä¸ããããã«è¿ã¥ããã¨ãã§ãããªãã¸ã§ã¯ããå«ã¾ãã¾ãã 䏿¹ãèæ¯ã¯é常ãå°ãªãã¨ãã¦ã¼ã¶ã¼ãä¸è·é¢ã¾ãã¯åæ¯ã®ç¯å²ã«ç§»åãã¦è¿ã¥ããã¨ãã§ããªãéããã»ã¨ãã©ã¾ãã¯å®å ¨ã«é対話ã§ãã
WebXR ã§ã¯ãï¼ã·ã¼ã³ãèµ·ãã座æ¨ç©ºéãªã©ï¼ç©ºé (space) ã®åºæ¬çãªæ¦å¿µã¯ãXRSpace
ã®ã¤ã³ã¹ã¿ã³ã¹ã«ãã£ã¦è¡¨ããã¾ãã ãã®ç©ºéã¯ãã¦ã¼ã¶ã¼ã®ç°å¢å
ã®ãªãã¸ã§ã¯ãã¨ï¼å
æºãã«ã¡ã©ãªã©ï¼ä»ã®ã¨ã³ãã£ãã£ã®ç¸å¯¾ä½ç½®ã¨åããæ±ºå®ããããã«ä½¿ç¨ãã¾ãã
䏿¬¡å 空éå ã®ç¹ã¯ãåè¿°ã®ã¨ããã 3 ã¤ã®æåã§æ§æãããããããã 3 ã¤ã®è»¸ã® 1 ã¤ã«æ²¿ã£ãç¹ã®è·é¢ãèå¥ãã¾ãã
ããã¯ç©ºéã®ãã¤ãã£ãã®åç¹ (native origin) ã§ãããã¦ã¼ã¶ã¼ã®ç°å¢å ã®ç¹å®ã®ç©ççãªå ´æã«å¯¾å¿ãã¦ãã¾ãã å空éã«ã¯ãXR æ©å¨ã®è¿½è·¡ã·ã¹ãã ã«ãã£ã¦è¿½è·¡ãããç¬èªã®ãã¤ãã£ãã®åç¹ãããã¾ãã ããã¯ã空éã®ãã¼ã«ã«åº§æ¨ç³»ã®åç¹ã§ããå®è³ªçãªåç¹ (effective origin) ã¨ã¯ç°ãªãå ´åãããã¾ãã
座æ¨ç³»ã®æ¹åæ§ã次ã®å³ã«ç¤ºãã¾ãã
åç¹ãªãã»ãã (origin offset) ã¨å¼ã°ãã XRRigidTransform
ã使ç¨ãã¦ãç¹ã空éèªä½ã®å®è³ªçãªåº§æ¨ç³»ãã XR æ©å¨ã®ãã¤ãã£ã座æ¨ç³»ã«å¤æãã¾ãã é常ã 2 ã¤ã®åç¹ã¯ç©ºéãæåã«ç¢ºç«ãããã¨ãã«ä½ç½®åããããããããåç¹ãªãã»ããã¯æåã¯åç´ã«æç夿ã§ãã ãã ããä½ç½®åããã®å¤åã¯æéã¨ã¨ãã«èç©ããããããè£æ£ããããã«åç¹ãªãã»ãããå¤åããå ´åãããã¾ãã
åç¹ã«å¯¾ãã空éå ã®ç¹ã®ä½ç½®ã¯ãä¸ã®å³ã«ç¤ºã 3 ã¤ã®ç©ºé軸ã®ããããã«æ²¿ã£ãç¹ã®è·é¢ã決å®ãããã¨ã«ãã£ã¦æ±ºå®ããã¾ãã 空éã®åç¹ã¯ã空éã®ä¸å¿ã«ãããåè»¸ã«æ²¿ã£ã¦ã¼ãã®ä½ç½®ã«ããç¹ (0, 0, 0) ã§ãã å ·ä½çã«ã¯ãåæã®éå§æ¡ä»¶ã®ä¸ã§ã空éã«å¯¾ããé²è¦§è ã®æ¢å®ã®åãã使ç¨ãã¾ãã
ãã¹ã¦ã®ãªãã¸ã§ã¯ãã¯ãæãåç´ãªã¬ãã«ã§ã¯ã䏿¬¡å 空éå ã®ç¹ã¨ãªãã»ãã夿ã«ãã£ã¦å®ç¾©ãããä¸é£ã®ããªã´ã³ã§ããããªãã¸ã§ã¯ããç§»åããã³å転ãã¦ç©ºéå ã®ç®çã®ç¹ã«é ç½®ããæ¹æ³ã示ãã¾ãã ãªãã»ãã夿ãåä½è¡åã®å ´åããªãã¸ã§ã¯ãã¯åç¹ã«é ç½®ããã¾ãã
ãã ãã空é追跡ãã·ã¼ã³å½¢ç¶ã«å½¹ç«ã¤ããã«ã¯ãXR æ©å¨ã®ç¥è¦ä½ç½®ã空éã®åº§æ¨ç³»ã¨ç¸é¢ãããå¿ è¦ãããã¾ãã ããã§åç §ã¹ãã¼ã¹ã®åºçªã§ãã
åç §ç©ºéãã¾ãã¾ãª XR ãã¼ãã¦ã§ã¢ãå©ç¨å¯è½ã§ãããå¤ãã®éçºè
ãããã¾ãã¾ãªãã©ã¼ã ä¿æ°ã§æä¾ããããããéçºè
ã使ç¨ãã¦ãã追跡æè¡ã¨ç´æ¥éä¿¡ããå¿
è¦ããããã¨ãæå¾
ãããã¨ã¯éç¾å®çã§ãããæ¡å¼µæ§ãããã¾ããã 代ããã«ãWebXR æ©å¨ API ã¯ãéçºè
ãã¦ã¼ã¶ã¼ã¨ã¯ã¹ããªã¨ã³ã¹ãè¨ç»ãããããã®ãã¼ãºãæããã表ãé©åãªåç
§ç©ºéãè¦æ±ããããã«è¨è¨ããã¦ãã¾ãã ããã¯ãã¦ã¼ã¶ã¼ã¨ã¼ã¸ã§ã³ãã«å¯¾ãã¦ãããã®ãã¼ãºã«ä¸è´ãã XRReferenceSpace
ãè¦æ±ãããã¨ã«ãã£ã¦è¡ããã¾ãã
XRReferenceSpace
ãªãã¸ã§ã¯ãã¯ã 1 ã¤ã®åº§æ¨ç³»ã®åºæºç³»ãå¥ã®åº§æ¨ç³»ã®åºæºç³»ã«é©åãããææ®µã¨ãã¦æ©è½ãã¾ãã ãããã»ãããè£
çããå¾ãããªãã®å¨ãã®ä»®æ³ä¸çããããªãã®ä½ç½®ã (0, 0, 0) ã§ãã座æ¨ç³»ãæã£ã¦ããã¨èãã¦ãã ããã ã¤ã¾ããããªãã¯ãã¹ã¦ã®ä¸å¿ã«ãã¾ãã ããã¯åå¼·ããæãã¾ãããï¼ ãããã»ããã«åãã£ã¦ çæ£é¢ã -Z 軸ã§ã+Z ãå¾ãã«ããã¾ãã X ã¯å³ãæ£ãå·¦ãè² ã§ãã Y ã¯ä¸ã«è¡ãã¨è² ãä¸ã«è¡ãã¨æ£ã«ãªãã¾ãã ããã¯ãXRã·ã¹ãã ã®ä½¿ç¨éå§æã®ç©ºéã«ããããããã»ããã®ä½ç½®ã示ããåç¹ (0, 0, 0) ã¯åºæ¬çã«ã¯é¼»çã«é
ç½®ããã¦ãã¾ãã ãã®ç©ºéãä¸ç空é (world space) ã§ãã
次ã«ãå·¦æã«ãã XR ã³ã³ããã¼ã©ã¼ã«ã¤ãã¦èãã¾ãã åãã¨ãã®åããå ±åããæ©è½ãããã¾ããããããã»ããã®ä½ç½®ããããéè¦ãªãã¨ã«ããã®åº§æ¨ç³»ã«ã¤ãã¦ã¯ä½ãç¥ãã¾ããã ãã ããã³ã³ããã¼ã©ã¼ã«ã¯ãã®ä½ç½®ãã¢ããªã«å ±åããæ¹æ³ãå¿ è¦ã§ãã ãããã£ã¦ãç¬èªã®åº§æ¨ç³»ãããã¾ãã ããã¯ãå ¥åã¤ãã³ããçºçããã¨ãã«ã¢ããªã«æä¾ãããåç §ç©ºéã§ãã ãã®åç §ç©ºéã¯ãã³ã³ããã¼ã©ã¼ã®åº§æ¨ããããã»ããã®åº§æ¨ã«ãããããæ¹æ³ãå é¨çã«èªèãã¦ãããããWebXR ã¯åº§æ¨ãç¸äºã«å¤æã§ãã¾ãã
XRReferenceSpace
ã使ããã¨ãã¢ã¼ã·ã§ã³ã¨ãªãªã¨ã³ãã¼ã·ã§ã³ã®è¿½è·¡ãä¸å®ã¬ãã«ä¿è¨¼ãã XRViewerPose
ãåå¾ããæ©æ§ãæä¾ãã¾ãããã®ç©ºéãã¦ã¼ã¶ã¼ã®ãããã»ããã観å¯è
ã®ãããã»ãããä»®æ³ã«ã¡ã©ãªã©ã®ãã¥ã¼ã¢ã表ãå ´åãã¯ã¼ã«ã空éã«å¯¾ããä½ç½®ã¨åãã表ãè¡åãåå¾ãããã¨ãã§ãã¾ãã
ããã¯ãã¹ã¦ãã©ã¦ã¶ã¼ã®å¦ç責任ã§ãããåºç¤ã¨ãªãååç §ç©ºéã®è½åã«é¢ä¿ãªããä¸è²«ããæ¯ãèããæä¾ãã¾ãã åã ã® XR æ©å¨ãã©ãã»ã©å¼·åã§ãã£ããã·ã³ãã«ã§ãã£ã¦ããWebXR ã使ç¨ãã¦è¨è¿°ãããã³ã¼ãã¯ãå©ç¨å¯è½ãªãã¼ãã¦ã§ã¢ã®å¶éå ã§æ©è½ãã¾ãã
鏿ããåç
§ç©ºéã®ç¨®é¡ã«é¢ä¿ãªãããã®å㯠XRReferenceSpace
ã¾ã㯠XRReferenceSpace
ããæ´¾çããåã§ããç¾å¨å©ç¨å¯è½ãªåç
§ç©ºéåã以ä¸ã«ç¤ºãã¾ãã
bounded-floor
XRBoundedReferenceSpace
ã§ã local
åã¨åæ§ã§ãããè¿ããããªãã¸ã§ã¯ãã® boundsGeometry
ã«ãã£ã¦æå®ãããæå®ã®å¢çã®å¤ã«ã¦ã¼ã¶ã¼ãç§»åãããã¨ã¯æ³å®ããã¦ãã¾ããã
local
XRReferenceSpace
ã§ãã»ãã·ã§ã³ã使ãããæã®é²è¦§è
ã®ä½ç½®ã®è¿ãã«åç¹ãæã¤è¿½è·¡ç©ºéã§ããæ£ç¢ºãªä½ç½®ã¯ãã©ãããã©ã¼ã ã¨å®è£
ã«ä¾åãã¾ããã¦ã¼ã¶ã¼ã¯éå§ä½ç½®ãããã¾ãåããã¨ã¯ãªãã¨æããã¾ãã®ã§ã追跡ã¯ãã®ç¨éã«æé©åããã¦ãã¾ãã 6 ã¤ã®èªç±åº¦ (6DoF) 追跡æ©è½ãæã¤æ©å¨ã®å ´åãlocal
åç
§ç©ºéã¯ãç°å¢ã«å¯¾ãã¦åç¹ãå®å®ã«ä¿ã¨ãã¨ãã¾ãã
local-floor
local
åã«ä¼¼ã XRReferenceSpace
ã§ãéå§ä½ç½®ãé²è¦§è
ãå®å
¨ã«ç«ã¦ãå ´æã«ç½®ããã y 軸ã®å¤ãåºé¢ã 0 ã¨ãããã¨ãé¤ãã¾ãããã®åºã¬ãã«ãåãããªãå ´åãã¦ã¼ã¶ã¼ã¨ã¼ã¸ã§ã³ãã¯åºã¬ãã«ãæ¨å®ãã¾ããæ¨å®ãããåºã¬ãã«ã 0 ã§ãªãå ´åããã©ã¦ã¶ã¼ã¯ãã£ã³ã¬ã¼ããªã³ããé¿ãããããªæ¹æ³ã§ãããï¼ããããæãè¿ãã»ã³ãã¡ã¼ãã«ã«ï¼ä¸¸ãããã¨ãæå¾
ããã¦ãã¾ãã
unbounded
XRReferenceSpace
ã§ãåç¹ããé常ã«é·ãè·é¢ãèªç±ã«ç§»åãããã¨ãã§ãã追跡空éã§ããé²è¦§è
ã¯å
¨ã追跡ããã¾ããã追跡ã¯ã¦ã¼ã¶ã¼ã®ç¾å¨ä½ç½®ã®å®å®æ§ã®ããã«æé©åããã¦ããããã¤ãã£ãã®åç¹ã¯ãã®å¿
è¦æ§ã«å¿ãã¦ããªãããããã¨ãã§ãã¾ãã
viewer
XRReferenceSpace
ã§ãé²è¦§è
ã®ä½ç½®ã¨åããåç¹ã¨ãã¦è¿½è·¡ãã追跡空éã§ããããã¯ã¦ã¼ã¶ã¼ãç©ççã«ç§»åã§ããç°å¢ã§ä½¿ç¨ãããæ²¡å
¥åãã¤ã³ã©ã¤ã³ååãã XRSession
ã®å
¨ã¦ã®ã¤ã³ã¹ã¿ã³ã¹ã§å¯¾å¿ãã¦ãã¾ãããã¤ã³ã©ã¤ã³ã»ãã·ã§ã³ã§æãæç¨ã§ããããã¯ãé²è¦§è
ã¨å
¥åã®éã®è·é¢ã決å®ããã¨ããã¾ãã¯ãªãã»ãã空éãæ±ãã¨ãã«ç¹ã«ä¾¿å©ã§ãããã以å¤ã§ã¯ãé常ãä»ã®åç
§ç©ºéåã®ãããããããé »ç¹ã«ä½¿ç¨ããã¾ãã
ãã®ã¬ã¤ãã®æ®ãã®é¨åã§ã¯ãã¢ããªã®ãã¼ãºã«é©ããåç §ç©ºéã鏿ããæ¹æ³ã«ã¤ãã¦èª¬æãã¾ãã
åç §ç©ºéã使ç¨ãã空éé¢ä¿ã®å®ç¾©ç°å¢ã«å¯¾ãããªãã¸ã§ã¯ãã®ä½ç½®ã¨æ¹åãåç §ããããç°å¢èªä½ãå¶ç´ãããããããã«ä¸è¬çã«ä½¿ç¨ãããæ¹æ³ãããã¤ãããã¾ãã ãã®ããã«ãWebXR ã¯ãåç §ç©ºé (reference space) ã¨å¼ã°ããæ¨æºç©ºéã®ã»ãããå®ç¾©ãã¾ãã ããããã®æ¨æºç©ºéã¯ããã¼ã«ã«ç©ºéã®åºæºç³»ã®åº§æ¨ç³»ãããããåå¨ãã空éã®åº§æ¨ç³»ã«é¢é£ä»ãããã¾ãã¾ãªææ³ãã«å¯¾å¿ãã¦ãã¾ãã
ãã ãã使ç¨ãã¦ããåç §ç©ºéã®åã«é¢ä¿ãªããåã颿°ã使ç¨ãã¦åº§æ¨ã空éãã親空éã«å¤æã§ãã¾ãã
åç §ç©ºéåã®é¸æã¾ãã使ç¨ããåç
§åãæ±ºå®ããããã»ã¹ã®æãç°¡åãªã¹ãããã説æãã¾ãããã 使ç¨ããå¯è½æ§ãæãé«ãåç
§ç©ºéã¯ãlocal
ãlocal-floor
ãunbounded
ãbounded-floor
ã§ãã
ååã« -floor
ãå«ã¾ãã¦ããåç
§ç©ºéåã¯ã対å¿ããéåºç©ºéã¨åãããã«æ©è½ãã¾ããããã¥ã¼ã¢ã¼ãå°é¢ã¾ãã¯ãã®è¿ãï¼å¸¸ã«ä¸ï¼ã®å®å
¨ãªå ´æã«èªåçã«é
ç½®ãããããã«ãã¾ãã ããã¯ãä»ã«åºã確ç«ããã¦ããªãéããy
座æ¨ã常㫠0 ã§ããå¹³é¢ã§ãã ãããã®ç©ºéåã¯ãé¨å±ã®åºãå¹³ãã§ãªãå ´åããå°ä¸ã®é«ããå¤åããåºã®å ´åãã¢ãã¿ã¼ã®åç´ä½ç½®ã®å¤æ´ãã«å¯¾å¿ããªããããå®è¡ã§ãã¾ããã
viewer
åç
§ç©ºéã¯ããã¥ã¼ã¢ã¼ã®ç©ºéå
ã®ä½ç½®ã«å¯¾å¿ãã¾ãã XRFrame
ã¡ã½ãã getViewerPose()
ã«ãã£ã¦è¿ããã XRViewerPose
ã«ãã£ã¦ä½¿ç¨ããã¾ãã ãã以å¤ã®å ´åãé常ã¯ç´æ¥ä½¿ç¨ããã¾ããã å¯ä¸ã®å®è³ªçãªä¾å¤ã¯ãã¦ã§ãã³ã³ãã³ãå
ã§ XR ã·ã¼ã³ãã¤ã³ã©ã¤ã³ã§å®è¡ããã¨ãã« viewer
åç
§ç©ºéã使ç¨ããå¯è½æ§ãé«ããã¨ã§ãã
local
åç
§ç©ºéã¯ãé常ãã·ã³ã°ã«ã«ã¼ã ãªã©ã®æ¯è¼çå°ããªã¨ãªã¢ãè¨è¿°ããããã«ä½¿ç¨ããã¾ãã æ²¡å
¥åã»ãã·ã§ã³ã¢ã¼ãï¼immersive-vr
ã¾ã㯠immersive-ar
ï¼ã使ç¨ãã¦ããå ´åã¯å¸¸ã«ä½¿ç¨ã§ããã ãã§ãªããæ°ããã»ãã·ã§ã³ãè¦æ±ããã¨ãã«å¸¸ã«ãªãã·ã§ã³æ©è½ã«å«ã¾ãã¾ãã ãããã£ã¦ãnavigator.xr.requestSession()
ã«ãã£ã¦ä½æããããã¹ã¦ã®ã»ãã·ã§ã³ã¯ãlocal
åç
§ç©ºéåãã«å¯¾å¿ãã¾ãã
è¤æ°ã®é¨å±ãå«ã¾ããå¯è½æ§ã®ãã大ããªé åã表ãã«ã¯ããã¥ã¼ã¢ã¼ã®åãã«å¶ç´ãæå®ããªã unbounded
åç
§ç©ºéåã使ç¨ã§ãã¾ãã ã¦ã¼ã¶ã¼ãç¹å®ã®é åã«ç§»åã§ããªãããã«ããå ´åã¯ãèªåã§å¦çããå¿
è¦ãããã¾ãã
bounded-floor
åç
§ç©ºéåã«ã¯ã対å¿ããåºã«å¶éãããªãåã¯ããã¾ããã ã¦ã¼ã¶ã¼ã® XR ãã¼ãã¦ã§ã¢ãç¾å®ä¸çã®ç©ºéå
ãç§»åãããã¨ã許å¯ãããããå¯è½ã§ããå ´åãbounded-floor
åç
§ç©ºéã使ç¨ããã¨ãééã許å¯ããå®å
¨ãªé åã®å¢çãæç¢ºã«å®ç¾©ã§ãããã便å©ã§ãã å¶éä»ãåç
§ç©ºéã®ä½¿ç¨ã®è©³ç´°ã«ã¤ãã¦ã¯ãå¶éä»ãåç
§ç©ºéã®ä½¿ç¨ã®è¨äºãåç
§ãã¦ãã ããã
åç §ç©ºéã使ç¨ãã¦ãªãã¸ã§ã¯ãã®ä½ç½®ã¨æ¹åãè¨è¿°ãããã¨ã«ãããWebXR ã¯ãåºç¤ã¨ãªã XR ãã¼ãã¦ã§ã¢ã«é¢ä¿ãªãããããã®è¨è¿°ã«ä½¿ç¨ãããã¼ã¿ã®å½¢å¼ãæ¨æºåã§ãã¾ãã åç §ç©ºéã®æ§æã¯ã空éã®ã³ã³ãã³ããæ£ããã¬ã³ããªã³ã°ããããã«å¿ è¦ãªãã¥ã¼è¡åã¨ãªãã¸ã§ã¯ããã¼ãºãæä¾ãã¾ãã
åç §ç©ºéã®ç¢ºç«æä¸ä½ã®ç©ºéï¼XRSession
ã®ã¡ã½ãã requestReferenceSpace()
ãå¼ã³åºããã¨ã«ãã£ã¦åå¾ããã空éï¼ã¯ãä¸ç空éå
¨ä½ã«ä½¿ç¨ããã座æ¨ç³»ã表ãã¾ãã ãã¹ã¦ã¯åºæ¬çã«ãã®åº§æ¨ç³»ã«é¢é£ä»ããããã¦ã¼ã¶ã¼ã®æ©å¨ã®ä½ç½®ã¨ä»®æ³ä¸çã®éã®é¢ä¿ã表ãã¾ãã
WebXR ã使ç¨ãã¦ãã¢ããã¼ã·ã§ã³ã«ããä¸çã®æ¡å¼µãã 360°åç»åçãç§å¦ã·ãã¥ã¬ã¼ã·ã§ã³ãä»®æ³ç¾å®ãã¬ã¼ãã³ã°ã·ã¹ãã ãªã©ãæ³åã§ãããããããã®ã«å¯¾å¿ã§ãã¾ããã䏿¬¡å ãããªã²ã¼ã ãå ¸åç㪠WebXR ã¢ããªã±ã¼ã·ã§ã³ã®ä¾ã¨ãã¦åãä¸ãã¾ãããã ã²ã¼ã ä¸çã®ç©ºéã«ç«ã£ã¦ãããã¬ã¤ã¤ã¼ã®ã¢ãã¿ã¼ã®ã¢ãã«ãèãã¦ã¿ã¾ãããã ä¸ç空éãåºæºã«ãã¦ã¢ãã¿ã¼ãé ç½®ããã«ã¯ãä¸çã®åç §ç©ºéã§å®ç¾©ããã座æ¨ç³»ã使ç¨ãã¾ãã
ãã¬ã¼ã¤ã¼ãæ°ããä½ç½®ã«ç§»åããã«ã¯ããã¹ã¦ã®åº§æ¨ãæ¸ãæããããç§»åãããã³ã«æåã§å¤æãé©ç¨ãã¾ãããåç
§ç©ºéã¨ããããç¸äºã«ä½æã§ãããããããç°¡åãªæ¹æ³ãããã¾ãã ãã¬ã¼ã¤ã¼ã®ã¢ãã¿ã¼ã®æ°ããä½ç½®ã¨æ¹åã表ã XRRigidTransform
ãªãã¸ã§ã¯ãã使ãã¦ãããXRReferenceSpace
ã¡ã½ãã getOffsetReferenceSpace()
ã使ç¨ãã¦ãæ°ããä½ç½®ã«ã¢ãã¿ã¼ã®è¦ç¹ãè¡¨ãæ°ããåç
§ç©ºéã使ãã¾ãã ããã¯ããã¼ãã¼ãããã¦ã¹ãªã©ã®é XR æ©å¨ã使ç¨ãã¦ãã¬ã¼ã¤ã¼ã®ã¢ãã¿ã¼ãä¸çä¸ã«ç§»åããããã®ãµãã¼ããå®è£
ããå ´åã«ç¹ã«ä¾¿å©ã§ãã
æ°ãã使ãããåç §ç©ºéã使ç¨ããã¨ãã¢ãã¿ã¼ã¯åã座æ¨ã«çã¾ããã¨ãã§ãã¾ãããæ°ããä½ç½®ã«é ç½®ããï¼ããã¦ä¸çããã®è¦ç¹ããè¦ããã¨ãã§ããããã«ï¼ä¸çã«ç¾ãã¾ãã åç §ç©ºéã使ç¨ãã¦ãã¬ã¼ã¤ã¼ã®è¦ç¹ã管çããæ¹æ³ã®è©³ç´°ã«ã¤ãã¦ã¯ãã®è¨äºãåç §ãã¦ãã ããã
ç§ãã¡ã®ã²ã¼ã ã¢ãã¿ã¼ã®ä¾ã®å ´åãã¢ãã¿ã¼ï¼ã¾ãã¯ä»ã®åãã¦ããã¯ãªã¼ãã£ã¼ãæ©æ¢°ï¼ãä¸çä¸ãæ»èµ°ããåç´ãªãããã«ãªããã¨ã¯ã¾ãã§ãã ãããã¯é常ã追å ã®å½¢ã ãã§ãªããåãèãæ©ãã¨ãã«æºããè
ãå転ãããç´ æ©ãä¸ä¸ããé ãåãåãæ¦å¨ãªã©ã®å
é¨ã®åããæã£ã¦ãã¾ãã æ¨æºã® WebGL ææ³ã使ç¨ãã¦ããããå®ç¾ããä½ç½®æ±ºãè¡åã¾ã㯠XRRigidTransform
ãªãã¸ã§ã¯ãã§å®è³ªçãªåç¹ã«å¯¾ãã¦æ£ããä½ç½®ã«ã·ãããã¾ãã
ä¸é¨ã® XR æ©å¨ã¯ãAPI ãä¸è¶³ãã¦ããæ©è½ãè£ãããã«åªåãã¦ããã«ãããããããç¹å®ã®ä½é¨ãã«å¯¾å¿ããããã«ä½æã§ããªããã®ãããã¾ãã ä¾ãã°ãGearVR ããã¤ã¹ãªã©ã®åºæ¬çãªãããã»ããããã¦ã¼ã¶ã¼ãå®è³ªçãªåãã追跡ãã¦ç°å¢ãæ©ãåãã®ãã«å¯¾å¿ããå¿ è¦ãããã¢ããªã§æ©è½ãããæ¹æ³ã¯ããã¾ããã
ããã°ã¬ãã·ãã¨ã³ãã³ã¹ã¡ã³ããã«å¯¾å¿ããããã«ãã£ã¦ã¢ããªã¾ãã¯ãµã¤ãã®å¯ç¨æ§ãåºããã«ã¯ãå¿ è¦ãªæ©è½ã®éãæãå°ãªãåç §ç©ºéã鏿ããããåç §ç©ºéã®åå¾ã®å¤±æãæ¤åºãããã¾ãå¼·åã§ãªãä»£æ¿ææ®µã§å試è¡ãããã©ã¼ã«ããã¯ã¡ã«ããºã ãæä¾ãã¾ãã
çºçããäºææ§ã®åé¡ã¯ãVR ã®ã¿ã®ãããã»ããã§ immersive-ar
ã¢ã¼ãï¼æ¡å¼µç¾å®ã»ãã·ã§ã³ï¼ãã«å¯¾å¿ã§ããªãã®ã¨åããããæ ¹æ¬çãªãã®ã§ããããXR ã»ãã·ã§ã³ã使ãããã¨ããã¨ãã«æºãããã¨ãã§ããªã1ã¤ä»¥ä¸ã®å¿
é ãªãã·ã§ã³ã®è¦æ±ãå«ã¾ããå ´åãããã¾ãã
XR ã»ãã·ã§ã³ã¯ãnavigator.xr.requestSession()
ã¡ã½ããã使ç¨ãã¦ä½æãã¾ãã ãªãã·ã§ã³ã®å¼æ°ã® 1 ã¤ã¯ãXRSessionInit
è¾æ¸ã«æºæ ãããªãã¸ã§ã¯ãã§ãããããã使ç¨ãã¦ãã»ãã·ã§ã³ã対å¿ããå¿
è¦ãããï¼ã¾ãã¯çæ³çã«ã¯å¯¾å¿ãã¹ãï¼å¿
é ã¾ãã¯ãªãã·ã§ã³ã®æ©è½ãæå®ã§ãã¾ãã ç¾å¨å¯¾å¿ãã¦ãããªãã·ã§ã³ã¯ãæ¨æºåç
§ç©ºéãèå¥ããæååã®ã¿ã§ãã ãããã使ç¨ããã¨ãã³ã¼ããå®è¡ããåã«ãå¿
è¦ãªãã¾ãã¯åªå
ããåç
§ç©ºéåãã«å¯¾å¿ã§ãã WebXR ã»ãã·ã§ã³ã«ã¢ã¯ã»ã¹ã§ãããã¨ãä¿è¨¼ã§ãã¾ãã
ã¡ã¢: ç¾å¨ãXRSession
ã使ããã¨ãã«ä½¿ç¨ã§ãããªãã·ã§ã³ã¯ã使ç¨ã¾ãã¯åªå
ããåç
§ç©ºéã®ã¿ã§ãã å°æ¥çã«ã¯ãããå¤ãã®ãªãã·ã§ã³ãå©ç¨å¯è½ã«ãªãå¯è½æ§ãããã¾ãã
ã¢ããªã¨ WebXR API ã®éã§äº¤æããããã¹ã¦ã®ç©ºéï¼ä½ç½®ãæ¹åãããã³åãï¼æ å ±ã¯ããã¬ã¼ã ã®ã¬ã³ããªã³ã°æã«ç¹å®ã®ç©ºéã«é¢é£ãã¦è¡¨ç¾ããã¾ãã ãã以ä¸ã®ä½ç½®ã¨æ¹åã®ç®¡çã¯ã¦ã¼ã¶ã¼ã¨ WebGL ã®éã§è¡ããã¾ããããªãã¸ã§ã¯ãã 䏿¬¡å ä¸çã«æ£ããé ç½®ããããã«ãåç §ç©ºéããã®åç¹ãªãã»ãããå©ç¨ãã¾ãã
ã¢ãã¡ã¼ã·ã§ã³ãã¬ã¼ã ãã¬ã³ããªã³ã°ããã¨ãã¯ãWebXR ã»ãã·ã§ã³ã® XRSession
ãªãã¸ã§ã¯ãã® requestAnimationFrame()
ã¡ã½ãããå¼ã³åºããã¨ãã«æå®ãããã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºããã¾ãã ã³ã¼ã«ããã¯ã¯ããã®å¼æ°ã®1ã¤ã¨ãã¦ããã¬ã¼ã ãçºçããæå»ã示ãã¿ã¤ã ã¹ã¿ã³ããåãåãã対å¿ããã¢ãã¡ã¼ã·ã§ã³ãã¬ã¼ã ã®ãã¹ã¦ã®ã¬ã³ããªã³ã°ãå®è¡ããå¿
è¦ãããã¾ãã
æå»å¤ãå¢ãããªããã³ã¼ã«ããã¯ãç¹°ãè¿ãå¼ã³åºãããã¨ãã³ã¼ã«ããã¯ã¯ XR ãã¼ãã¦ã§ã¢ã使ç¨ãã¦æç¤ºãããä¸é£ã®ãã¬ã¼ã ãçæããããã«ãã£ã¦ 䏿¬¡å ã·ã¼ã³ãã¦ã¼ã¶ã¼ã«è¡¨ç¤ºããã¾ãã
ã¢ãã¡ã¼ã·ã§ã³ããã»ã¹ã®è©³ç´°ã«ã¤ãã¦ã¯ãã¬ã³ããªã³ã°ã¨ WebXR ãã¬ã¼ã ã¢ãã¡ã¼ã·ã§ã³ã³ã¼ã«ããã¯ã®è¨äºãåç §ãã¦ãã ããã
ä»®æ³ç©ºéã§ãªãã¸ã§ã¯ããé ç½®ãæ¹åä»ããç§»åããæ¹æ³ã®ä¾ã¨ãã³ã¼ãã¬ãã«ã§ã®è©³ç´°ãªèª¬æã«ã¤ãã¦ã¯ãç§»åãåããã¢ã¼ã·ã§ã³ã®è¨äºãåç §ãã¦ãã ããã
é¢é£æ å ±RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4