ããã«ã¡ã¯HabrïŒ ããã¯ã空ãæéã«ãã£ãå°ããªè¶£å³ã®ãããžã§ã¯ãã«é¢ããã¡ã¢ã§ãã ç°¡åãªã¢ã«ãŽãªãºã ã䜿çšããŠæ·±åºŠããããã深床ãããã楜ããã¿ã€ãã®ã³ã³ãã³ã-åçãª3Dã·ãŒã³ïŒ4Dãããªãããªã¥ãŒã ãã£ããã£ããŸãã¯èªç±èŠç¹ãããªãšãåŒã°ããŸãïŒã«å€æããæ¹æ³ã説æããŸãã ãã®äœåã§ç§ã®ãæ°ã«å ¥ãã®éšåã¯ããããŒãäžè§åœ¢åå²ã¢ã«ãŽãªãºã ã§ããããã«ãããçãªç¹çŸ€ãå¯ãªããªãŽã³ã¡ãã·ã¥ã«å€æã§ããŸãã ã¢ã«ãŽãªãºã ãC ++ 11ã®èªäœèªè»¢è»ããããŠãã¡ããã3次å ã·ãŒã«ã«ã€ããŠèŠãŠã¿ãããšæã人ãæåŸ ããŸãã
ãŸã第äžã«ãããã¯RealSense R200ã䜿çšããŠããå Žåã«èµ·ãããŸãïŒ skfb.ly/6snzt ïŒæ°ç§åŸ ã£ãŠãããã¯ã¹ãã£ãããŒãããããŠã¹ã䜿çšããŠã·ãŒã³ãå転ãããŸãïŒã ã«ããã®äžã«ã¯ãã£ãšãããŸãïŒ
éãããã¬ãŒãã®ææè ã泚æããŠãã ããã ãã®èšäºã«ã¯ãããŸããŸãªç»åãã€ã©ã¹ãããããããããŸãã
å 責äºé ïŒãã®èšäºã§ã¯ã人工ç¥èœããããã¯ãã§ãŒã³ããŸãã¯éåæ³¢ã«ã€ããŠã¯èšåããŸããã ããã¯ãç§ãäž»ã«C ++ãšOpenGLãæŽæ°ããããã«æžããå°ããªããã¡ãã§ãã ããã ãã§ããæåŸ ã圢æãããŸãããè¡ããŸãããïŒ
å°ãåã«ã3Dã»ã³ãµãŒãåããããã€ã¹ãã€ãŸãæ§é åãããã©ã€ããã¯ãããžãŒãåããGoogle Tangoéçºãããã¿ãã¬ãããæã«å ¥ããŸããã åœç¶ã®ããšãªããããã®èå³æ·±ãããã€ã¹çšã«äœããããã°ã©ã ããããã«ç§ã®æãããã¿ãèŠããŸããã
ã»ãŒåææã«ãç§ã¯åããŠæ°ããçš®é¡ã®ã³ã³ãã³ã-4Dãããªã«åºäŒããŸããã ã4Dãããªããšã¯ãæéããããã«é²åãã3次å ã·ãŒã³ãæå³ããŸãã ãããã®åäœã¯ãéªšæ Œã¢ãã¡ãŒã·ã§ã³ãããŒããªã©ã®åçŽãªã¢ãã«ã§ã¯èª¬æã§ããŸããã èŠããã«ãããã«äŒŒããã®ïŒ
ãã®ãããªã³ã³ãã³ãã¯ç§ã«ãšã£ãŠéåžžã«èå³æ·±ããã®ã§ããã å°ãå®éšããŠã4Dãããªãçæããããã®ã¢ããªã±ãŒã·ã§ã³ãäœæããããšã«ããŸããã ãã¡ãããMicrosoft Researchã®ãããªã¹ã¿ãžãªãšãªãœãŒã¹ã¯ãããŸãããã»ã³ãµãŒã¯1ã€ãããªããããçµæã¯ã¯ããã«æ§ããã«ãªããŸãã ããããããã¯ããã°ã©ãã³ã°ã®æ人ãæ¢ãããã®ã§ã¯ãããŸããããïŒ ç§ãããããšã«ã€ããŠã¯ããã®èšäºã§èª¬æããŸãã
èšäºã®ã¿ã€ãã«ã«ã€ããŠ
確ãã«ãã4Dãããªããšããååã¯æé«ã§ã¯ãããŸããã æåã®è³ªåã¯ãã3Dãã§ã¯ãªãã4Dãã§ããçç±ã§ãã çµå±ã®ãšãããéåžžã®ãããªã¯ããã©ãããªç»åãæéãšãšãã«å€åãããšããçç±ã ãã§ã3次å
ãšåŒã°ããŸããã å®éãæ·±å»ãªäœåã§ã¯ããèªç±èŠç¹ãããªããšããçšèªãé垞䜿çšãããŸãã ããããã¿ã€ãã«ã«ã€ããŠã¯ãããã¯ããŸãã«ãéå±ãªã®ã§ãã¯ãªãã¯ãã€ã4Dãæ®ãããšã«ããŸããïŒãã ããæ ç»ã¯ãŸã 11Dããã¯çšé ãïŒ
ã»ãšãã©ã®èŽè¡ã¯3Dã»ã³ãµãŒã«ééããªã粟éããŠããŸãã ãã®ã«ããŽãªã§æã倧èŠæš¡ãªããã€ã¹ã¯ãéåžžã«æåãããã€ã¯ããœãã補åã§ããæåãªKinectã§ãã ãã ããæ¯èŒçæ®åããŠããã«ããããããã深床ã»ã³ãµãŒã¯å€ãã®äººã«ãšã£ãŠå¥åŠãªãŸãŸã§ãã ã¢ããªã±ãŒã·ã§ã³ã®äœæãéå§ããåã«ã圌ãã®ä»äºã®åçãç解ããŠãããšåœ¹ã«ç«ã¡ãŸãã
Google Tangoããã³ãã®ä»ã®æ§é åãããã©ã€ãããã€ã¹ã䜿çšãããšããã¹ãŠãæ¯èŒçæ確ã«ãªããŸãã ããã€ã¹ã«çµã¿èŸŒãŸããèµ€å€ç·ã¹ãããã©ã€ãã¯ããããã次ã®å³ã®ããã«ãå ç¹ã®äžèŠåãªãã¿ãŒã³ãã·ãŒã³ã«æ圱ããŸãã
次ã«ãç¹å¥ãªãœãããŠã§ã¢ããIRã«ã¡ã©ããã®ç»åäžã®ããŸããŸãªåœ¢ç¶ã®ãªããžã§ã¯ãã«èµ·å ãããã®ãã¿ãŒã³ã®æªã¿ãäžé£ã®3D枬å®å€ã«å€æããŸãã ç»åå ã®åå ç¹ã«ã€ããŠãã¢ã«ãŽãªãºã ã¯ç©ºé座æšã埩å ããåºåã§3Dç¹çŸ€ãååŸããŸãã å éšã§ã¯ããã¡ããããã¹ãŠãã¯ããã«èå³æ·±ãã§ãããããã¯å¥ã®èšäºå šäœã®ãããã¯ã§ãã
ããŠãå®éã«ã©ã®ããã«æ©èœãããã確èªããå¿ èŠããããŸãïŒ æ°æ©ãAndroidã®Tangoã¿ãã¬ããçšã®ç°¡åãªã°ã©ããŒã¢ããªã±ãŒã·ã§ã³ãèã®äžã«æžãããŸããããããŠä»ãç§ã¯æåã®ããŒã¿ã»ãããæã«å ¥ããŸããã
ã°ã©ããŒã®æåã®ããŒãžã§ã³ã¯éåžžã«ç²éã§ããããäž»ãªããšã¯éæãããŸããïŒãã€ã³ãã®åº§æšã¯ãã€ããªãã¡ã€ã«ã«èšé²ãããŸããã ã¹ã¯ãªãŒã³ã·ã§ããã¯ãåäžãã¬ãŒã ã®ãã€ã³ãã¯ã©ãŠããMeshlabããã°ã©ã ã§ã©ã®ããã«èŠãããã瀺ããŠããŸãã
ããŠãç¹çŸ€ã¯ãã§ã«èå³æ·±ããã®ã§ãã ãã ããææ°ã®æ§é åå ã»ã³ãµãŒã®è§£å床ã¯éåžžã«äœãããïŒéåžžã¯çŽ100x100ãã¯ã»ã«ããã©ã¹ãŸãã¯ãã€ãã¹ïŒãç¹çŸ€ã¯ã·ãŒã³ã®éåžžã«ããŸã°ããªãè¡šçŸã§ãã ãããŠäžè¬çã«ãã³ã³ãã¥ãŒã¿ãŒã°ã©ãã£ãã¯ã¹ã®äžçã§ã¯ã3Dãªããžã§ã¯ããšã·ãŒã³ã®å¥ã®è¡šçŸãã€ãŸãããªãŽã³ã¡ãã·ã¥ããŸãã¯ã¡ãã·ã¥ãæã€ããšã¯ã¯ããã«ããç¥ãããŠããŸãã
èããŠã¿ããšã1ã€ã®3Dã«ã¡ã©ãããã€ã³ãã¯ã©ãŠãäžã®ã¡ãã·ã¥ãååŸããã¿ã¹ã¯ã¯éåžžã«ç°¡åã§ã3Dã§ã®ä»»æã®ã¡ãã·ã¥äœæãããã¯ããã«ç°¡åã§ãã ãããè¡ãã«ã¯ã ããŒãã³ã°ãã¥ãŒãããã¢ãœã³åæ§æã¯å¿ èŠãããŸããã ç¹ã¯1å°ã®IRã«ã¡ã©ã䜿çšããŠååŸãããçŠç¹é¢ã«èªç¶ã«æ圱ãããããšãæãåºããŠãã ããã
ããã§ãZ座æšã«ã€ããŠãã°ããå¿ããŠã2Dã§åé¡ã解決ã§ããŸãã ããªãŽã³ãååŸããã«ã¯ãå¹³é¢äžã®å€ãã®ãã€ã³ããäžè§åããã ãã§ãã ãããå®äºãããã IRã«ã¡ã©ã®å éšãã©ã¡ãŒã¿ãŒãšåãã€ã³ãã§æ¢ç¥ã®æ·±åºŠã䜿çšããŠãé ç¹ã3Dã«æ圱ãçŽããŸã ã äžè§åœ¢åå²ã«ãããé ç¹éã®æ¥ç¶æ§ã決ãŸããŸãã åäžè§åœ¢ãã¡ãã·ã¥ã®é¢ãšããŠè§£éããŸãã ãããã£ãŠãåãã¬ãŒã ã§ã·ãŒã³ã®å®éã®3Dã¢ãã«ãååŸããOpenGLã§ã¬ã³ããªã³ã°ããããBlenderã§éãããããããšãã§ããŸãã
ãã®ãããåãã¬ãŒã ã®ãã€ã³ãã®äžè§åœ¢åå²ãèŠã€ããã ãã§ãã 2Dã§å€ãã®ãã€ã³ããäžè§åœ¢åå²ããæ¹æ³ã¯ãããããããŸãããåºæ¬çã«äžè§åœ¢åå²ã¯äœããã®ã¡ãã·ã¥ãæäŸããŸãã ãã ããããªãŽã³ã¡ãã·ã¥ã®æ§ç¯ã«ã¯ãããããŒäžè§åœ¢åå²ãšãã1ã€ã®æ¹æ³ãæé©ã§ãã
ãã®èå³æ·±ããã¶ã€ã³ã¯Habréã§ç¹°ãè¿ãèšåãããŸããããç§ã¯ãŸã ããã€ãã®èšèãæžããŸãã ç§ãã¡å šå¡ããããã€å³ãèŠãŠããŸããã ç¹Sã®ã»ããã®ãããã€å³ã¯ããã®ãããªå¹³é¢ã®ã»ã«ãžã®åå²ã§ããåã»ã«ã«ã¯ãSã®èŠçŽ ã®1ã€ã«æãè¿ããã¹ãŠã®ç¹ãå«ãŸããŸãã
ãããŠãããããŒäžè§åœ¢åå²ã¯ãã®ãããªäžè§åœ¢åå²ã§ãããã°ã©ãçè«ã®æå³ã§ã¯ãããã€å³ãšäºéã§ãïŒ
Delaunayã®äžè§åœ¢åå²ã«ã¯å€ãã®çŽ æŽãããç¹æ§ããããŸãããç¹ã«æ¬¡ã®2ã€ã«èå³ããããŸãã
- äžè§åœ¢ã®ããããã®è¿ãã«èšè¿°ãããåã¯ãäžè§åœ¢èªäœã®é ç¹ãé€ããã»ããã®ãã€ã³ããå«ã¿ãŸããã
- ãããŒãäžè§åœ¢åå²ã¯ããã¹ãŠã®äžè§åœ¢ã®ãã¹ãŠã®è§åºŠã®äžã§æå°ã®è§åºŠãæ倧åããããšã«ãããçž®éãããèããäžè§åœ¢ãåé¿ããŸãã
ããããã£ïŒ2ã¯ïŒ1ããååçŽæçã«ç解ã§ããŸãã å®éãå€æ¥åã«äœåãªç¹ãå«ãŸããªãããã«ããããã¯å¯èœãªéãå°ããããå¿ èŠããããŸããéã«ããèããäžè§åœ¢ïŒçž®éã«è¿ãïŒã®åååŸã¯éåžžã«å€§ãããªããŸãã ãããã£ãŠãDelaunayã®äžè§åœ¢åå²ã¯ãçž®éã«ã¯ã»ã©é ããè¯ããäžè§åœ¢ã®æ°ãæ倧åããŸãã ããã¯ãã¡ãã·ã¥ãèŠæ ããè¯ãããšãæå³ããŸãã
ããã«èšãããããã«ãããããŒäžè§åœ¢åå²ãæžããŸãã å€ãã®æåãªã¢ã«ãŽãªãºã ããããŸãããæãåçŽãªãã®ã¯ã©ããã§å§ãŸããŸã ã ãããã人ã ã¯ãããã®äžè§æž¬éã é ãããããšã¯ã§ããŸããïŒ
ä»ã®å€ãã®åæ§ã®ã¿ã¹ã¯ãšåæ§ã«ãã¢ã«ãŽãªãºã ã¯ãåå²ããŠåŸæããããšããååã«åºã¥ããŠæ§ç¯ãããŠããŸãã x座æšãšy座æšã§ãã€ã³ãã䞊ã¹æ¿ããŠããã1ã€ã®å€§ããªã°ã©ããåŸããããŸã§ãäžè§åœ¢åå²ãååž°çã«çæããŠããŒãžããŸãã ããã§äœãèµ·ãã£ãŠããã®ããç解ããã«ã¯ããã®ã³ãŒããããã«ç€ºãã ãã§ååã§ãã
const uint16_t numRight = numPoints / 2, numLeft = numPoints - numRight; EdgeIdx lle; // CCW convex hull edge starting at the leftmost vertex of left triangulation EdgeIdx lre; // CW convex hull edge starting at the rightmost vertex of left triangulation EdgeIdx rle; // CCW convex hull edge starting at the leftmost vertex of right triangulation EdgeIdx rre; // CW convex hull edge starting at the rightmost vertex of right triangulation triangulateSubset(lIdx + numLeft, numRight, rle, rre); triangulateSubset(lIdx, numLeft, lle, lre); mergeTriangulations(lle, lre, rle, rre, le, re);
ååãšããŠããã¹ãŠãåå²ããå¯èœæ§ããããŸãã
å®éã«ã¯ããã§ã¯ãããŸããããªããªãã楜ããéšåã¯mergeTriangulationsé¢æ°ã§å§ãŸãããã§ãã å®éãååãªåæ°ã§ã»ãããååã«åå²ãããšã2ã€ãŸãã¯3ã€ã®ç¹ã®æçãæ®ããŸããã
ããããäœïŒ
ã€ã©ã¹ãã«ã€ããŠ
以äžã説æã«ãç§ã®ããã°ã©ã ãçæããGIFã¢ãã¡ãŒã·ã§ã³ãããã³1ã€ã®è¯ãèšäºã®ã€ã©ã¹ããæ·»ä»ããŸãã ã¢ã«ãŽãªãºã ã«ã€ããŠèª¬æãããšãã¯ããã®èšäºã®å€§éšåãç¹°ãè¿ããŸãã質åãããå Žåã¯ã圌女ãšå®å
šã«çžè«ã§ããŸãã
å®éãããã»ã©è€éã§ã¯ãããŸããã åååž°ã·ãŒãã§ã¯ããã§ã«æå¹ãªãµãã¿ã¹ã¯ãœãªã¥ãŒã·ã§ã³ãæäŸãããŠããŸãã å·Šãšå³ã®ããŒãã£ã·ã§ã³ãåäžã®å šäœã«ããŒãžããéäžã§ãã¹ã¿ãã¯ãç»ãå¿ èŠããããŸãã ãã ãããããæ éã«è¡ãå¿ èŠããããŸãã ãã¹ãŠã®ããŒãžæ¹æ³ã§Delaunayã®äžè§åœ¢åå²ãè¡ãããããã§ã¯ãããŸããã
Gibas and Stolphiã¢ã«ãŽãªãºã ã¯ããã®åé¡ã«å¯Ÿããéåžžã«ãšã¬ã¬ã³ããªãœãªã¥ãŒã·ã§ã³ãæäŸããŸãã ã¢ã€ãã¢ã¯ãäžèšã§èª¬æããããããã£ïŒ1ã䜿çšããããšã§ãããæåã«æåã«è¡ãããšã§ãã
ãŸããè¡šèšæ³ã å·Šã®äžè§æž¬éãLãå³ã®RãåŒã³åºããŸããããå·Šã®äžè§æž¬éã«å±ãããšããžã¯LLãšåŒã°ããŸãã å·Šã®ãµãã»ããã®ãã€ã³ãã§éå§ããã³çµäºããŸãã å³ã®äžè§åœ¢åå²ã®ãšããžã¯RRãšåŒã°ããå³ã®ããã«ãå·Šååãšå³ååã®éã«è¿œå ãããšããžã¯LRã§ãã
ã芧ã®ãšãããããã§ã¯ãæ倧4ã€ã®äžè§åœ¢å šäœã®äžè§åœ¢åå²ã®éå§äžè§åœ¢ãšãšããžãæ¢ã«ãåçµãããŠããŸãã åã®æé ã§ååšãããã¹ãŠã®ãšããžã¯LLãŸãã¯RRãšããŠããŒã¯ããããã¹ãŠã®æ°ãããšããžã¯LRãšããŠããŒã¯ãããŸãã ããŒãžããã»ã¹ã¯éåžžã«ç°¡åã§ãããã¢ã«ãŽãªãºã ã®æ©èœã衚瀺ã§ããªãããããã®ã¹ãããã§ã¯ããŒãžããã»ã¹ã¯è¡šç€ºãããŸããã ãããã次ã®ã¹ãããã¯ããèå³æ·±ããã®ã«ãªããšèããŠã¿ãŸãããã ããã¯ãå䜵ãå§ãŸãåã®ã¿ã¹ã¯ã®æ§åã§ãã
å·Šååãšå³ååã®äž¡æ¹ã®ãå€åŽãã®ãšããžïŒ1-2ã2-5ã5-4ã6-8ãªã©ïŒããã€ã³ãã®ãµãã»ããã®åžå ã圢æããããšã«æ³šæããŠãã ããã ãã®ãããªãšããžãåžžã«ããããŒäžè§åœ¢åå²ã«å±ããå®éã«äžè§åœ¢åå²ã«å±ããããšã¯æããã§ãã ãŸãã2ã€ã®ã°ãã°ãã®ããŒãã£ã·ã§ã³ãããŒãžããå Žåãçµåã»ããã®åžå ãå®æãããããã«2ã€ã®æ°ãããšããžãåžžã«è¿œå ããå¿ èŠãããããšã«æ³šæããŠãã ããïŒå€§ãŸãã«èšããšãäžäžã®æ°ãããšããžã§ãã€ã³ãããã«ããŒãïŒã çŽ æŽãããããã§ã«2ã€ã®æ°ããLRãªãããããŸãïŒ ãã®ãã¡ã®1ã€ãäžã®1ã€ãéžæããããããããŒã¹ããšåŒã³ãŸãïŒã³ãŒãã§ã¯-ããŒã¹ïŒã
次ã«ãããŒã¹ã«é£æ¥ãã次ã®ãšããžãè¿œå ããå¿ èŠããããŸãããã®äžæ¹ã®ç«¯ã¯ããŒã¹ã®ç«¯ãšäžèŽããããäžæ¹ã®ç«¯ã¯LãŸãã¯Rã®ããããã®ç¹ã§ããå®éã2ã€ã®ãªãã·ã§ã³ã®ã©ã¡ããæ£ãããã決å®ããå¿ èŠããããŸãã å³åŽããå§ããŸãããã æåã®åè£ã¯ãããŒã¹ã«å¯ŸããŠå³åãã®è§åºŠãæå°ã®RRãšããžãæã€ããŒã¹ã®å³ç«¯ã«é¢é£ä»ãããããã€ã³ãã«ãªããŸãã 次ã®åè£ã¯ãå³ã«ç€ºãããŠããããã«ãããŒã¹ã®å³é ç¹ã«æ¥ç¶ããããã€ã³ãRã§ãããããŒã¹ã«å¯ŸããŠçžå¯Ÿçã«è§åºŠã倧ãããªãRRãšããžãæã¡ãŸãã
次ã«ãåè£è ããšã«2ã€ã®æ¡ä»¶ã確èªããå¿ èŠããããŸãã
- ããŒã¹ãšåè£ãšã®éã®è§åºŠã¯180床ãè¶ ããŠã¯ãªããŸããïŒããŒã¹ã®ãäžãã«ãããã€ã³ãã«ã®ã¿é¢å¿ããããŸãïŒã
- ããŒã¹ãšåè£ç¹ãå²ãå€æ¥åã«ã¯ã次ã®åè£ç¹ãå«ãŸããŠããŠã¯ãªããŸããã
é ç¹ã®æ§æã«å¿ããŠãããã€ãã®ãªãã·ã§ã³ããããŸãã
- äž¡æ¹ã®åºæºãæºããåè£ç¹ããããŸããã ãŸããããã¯å³åŽã®ç§ãã¡ã®éžæã«ãªããŸãã
- èŠä»¶ïŒ1ïŒè§åºŠ<180床ïŒãæºããããŠããªãå Žåããã§ã«ãããããã«å°éããŠãããããå³åŽã§ãã€ã³ããéžæããå¿ èŠã¯ãããŸããã å·Šäžè§åã®ã¿ãèæ ®ããŸãã
- æãèå³æ·±ãã±ãŒã¹ã¯ãæ¡ä»¶2ã§ãªãæ¡ä»¶1ãæºããããããšã§ãïŒå³ãåç §ïŒã ãã®å ŽåãããŒã¹ãåè£ãã€ã³ãã«æ¥ç¶ããRRãšããžãåé€ããŠãå床æ€çŽ¢ãç¹°ãè¿ãå¿ èŠããããŸãã
åœç¶ãå·Šååã®ããã»ã¹ã¯å®å šã«å¯Ÿç§°çã§ãã
ãããã£ãŠãæ°ããLRãšããžãè¿œå ããããã³ã«ãå·Šååãšå³ååããåè£ç¹ãéžæããŸãã ããã«é©åãªãã€ã³ãããªãã£ãå Žåãå䜵ãå®äºããã®ã§ãã¹ã¿ãã¯ãããã«äžã«ç§»åããå¿ èŠããããŸãã 1ã€ã®ãã€ã³ããããå ŽåïŒå·ŠåŽã®ã¿ããŸãã¯å³åŽã®ã¿ïŒãLRãšããžãè¿œå ãããã®äžã«ç«¯ãè¿œå ããŸãã ç¹ãäž¡åŽã§èŠã€ãã£ãå Žåãåã䜿çšããŠãã¹ããç¹°ãè¿ããŸããããŒã¹ãšLãšRããåè£ç¹ãå²ãå€æ¥åãäœæããŸããåã®å察åŽããåè£ãå«ãŸããŠããªãç¹ãéžæããŸãã äºå®ïŒ4ã€ã®é ç¹ã®ã¿ãé·æ¹åœ¢ã圢æããªãå Žåããã®ãããªç¹ã¯åžžã«äžæã«ãªããŸãã ãã®å Žåãä»»æã®ãªãã·ã§ã³ãéžæã§ããŸãã
ãã®äŸã§ã¯ã察å¿ããåã«Rããã®åè£ç¹ãå«ãŸããŠããªããããLããåè£ãéžæããŸãã
æ°ããLRãšããžãè¿œå ããããšãæ°ãããããŒã¹ãã«ãªããŸãã åžå ã®äžç«¯ã«å°éãããŸã§ããŒã¹ã®æŽæ°ãç¹°ãè¿ããŸãã
ã¢ã«ãŽãªãºã ã説æãããã«ãŒã«ã«æ³šææ·±ãåŸã£ãŠããå Žåãå·Šå³ã®ååã®ããŒãžã®åŸãLâªRã®æå¹ãªDelaunayäžè§åœ¢åå²ãåŸãããããšãããããŸãã
ãããã«ã€ããŠæ¬åœã«çŽ æŽããã蚌æ ãèŠã€ããŸãããããã®æ¬ã®äœçœã¯åœŒã«ãšã£ãŠçãããŸããã å®éãããšãã°ãšããžãåé€ããå¿ èŠæ§ãªã©ããã¹ãŠã®ã¹ããŒãã¡ã³ããã©ãããæ¥ããã«èå³ãããå Žåã¯ãæ°å9.2ã9.3ã9.4ã8.3ã®äž»èŠãªè£é¡ã§ããGibasãšStolphiã®äœæ¥ã調æ»ããããšããå§ãããŸãã
ããã§ã¯ããã¹ãŠããŸãšããŠãäœãèµ·ãããèŠãŠã¿ãŸãããã
ããã¯ç§ãåŸãã¢ã«ãŽãªãºã ã®èŠèŠåã§ãã ããã§ã¯ãããŒã¹ãšããžã¯ãªã¬ã³ãžè²ã§ããŒã¯ãããLLåè£ã¯ç·ãRRåè£ã¯éã§ãã åºæº2ãæºããããåé€ããããªãã¯èµ€ã§ããŒã¯ãããŸãã
ã¢ã«ãŽãªãºã ã®èª¬æã¯ãŸã ã¡ã¢ãªã«ä¿åãããŠããŸãããå®éã«äœãããã®ããç解ããã®ã¯éåžžã«ç°¡åã§ã ã 確ãã«ãé åºããããŸã å䜵äºæ¥; ãããã®ããããã§ãäžè¬çã«ãã¹ãŠã®ãšããžãåé€ããŠåæ§ç¯ããããšã匷å¶ãããå Žåã§ããã¢ã¯ã·ã§ã³ã®æ°ã¯ãŸã é åºã®ãŸãŸã§ã ïŒããã¯ä»»æã®ã°ã©ãã§ã¯ãªããäžè§åœ¢åå²ã§ããããããšããžã®æ°ã¯ãã€ã³ãã®æ°ã«å¯ŸããŠç·åœ¢ã§ãïŒã å®éãã»ãšãã©ã®å®éã®ã¿ã¹ã¯ã§ã¯ãé床㯠ãããŠç·åœ¢ã«è¿ã; ããŒãžã®å段éã§ã¢ã«ãŽãªãºã ããŒãããäžè§åœ¢åå²ãåæ§ç¯ããããã«ãç¹ã«åé¡ã®ããããŒã¿ã»ãããå¿ èŠã§ãã
ãã1ã€ã®æ³šæç¹-åŸãããäžè§åœ¢åå²ããã察å¿ãããã€ã³ãã»ããã®åžå ãšãããã€å³ã®äž¡æ¹ãç°¡åã«ååŸã§ããŸãã çŽ æµãªããŒãã¹ã
ã°ã©ããæäœããããã«äœ¿çšããããŒã¿æ§é ã«ã€ããŠããã€ãã®èšèãèšãã®ã¯èå³æ·±ãã§ãã éåžžãã°ã©ãã¯ãªã¹ããŸãã¯é£æ¥è¡åãšããŠè¡šãããŸããããã®åé¡ã§ã¯ãæ¥ç¶æ§ã ãã§ãªããã°ã©ãã®ããã€ãã®å¹ŸäœåŠçç¹æ§ã«ãé¢å¿ããããŸãã ããã«ç§ãåŸããã®ããããŸãïŒ
struct TriEdge { uint16_t origPnt; // index of edge's origin point EdgeIdx symEdge; // index of pair edge, with same endpoints and opposite direction EdgeIdx nextCcwEdge; // next counterclockwise (CCW) edge around the origin EdgeIdx prevCcwEdge; // previous CCW edge around the origin (or next CW edge) };
ããã¯ãGibasãšStolphiãæäŸããæ§é ã®ããåãæšãŠãããããŒãžã§ã³ã§ãã 圌ããèšãããã«ããã¹ãŠã®ç¬åµçãªããšã¯ç°¡åã§ãã åãšããžã«å¯ŸããŠããåç¹ããšãªããã€ã³ããå察æ¹åã«åãããããã¢ã®ãšããžã®ã€ã³ããã¯ã¹ãããã³åç¹ã®ãåšå²ãã®ååŸã®ãšããžã®ã€ã³ããã¯ã¹ãä¿åããŸãã å®éãäºéã«ãªã³ã¯ããããªã¹ããååŸããŸããã端ã®åšãã®ãšããžã®çžå¯Ÿçãªé 眮ãç¶æãããããã¢ã«ãŽãªãºã ã®å€ãã®ã¹ãããã¯åçŽã«ãšã³ã³ãŒããããŸãã
ä»ã®ããã€ãã®äœåã¯ããšããžã§ã¯ãªãäžè§åœ¢ãä¿åããããšãææ¡ããŠããŸãã ãã®ãªãã·ã§ã³ãè©ŠããŠã¿ãŸããããã³ãŒãã®éãå€§å¹ ã«å¢å ãããšèšããŸãã ç¹å¥ãªå ŽåïŒéåããäžè§åœ¢ãç¡éé ã®ãã€ã³ããªã©ïŒã«ã¯ãå€ãã®æŸèæãå°å ¥ããå¿ èŠããããŸãã ãã®ãªãã·ã§ã³ã«ã¯ã¡ã¢ãªäœ¿çšéã®ç¹ã§æœåšçãªå©ç¹ããããŸãããäºéã«ãªã³ã¯ããããšããžãªã¹ãã䜿çšããããšã匷ããå§ãããŸãã 圌ããšäžç·ã«åãããšã¯ãã¯ããã«æ¥œããã§ãã
ããããã¯ã誰ããã¢ã«ãŽãªãºã ã®å®è£ ã®è©³çŽ°ã«èå³ãæã£ãŠãããµããããã®ããããããšãã§ãããšæããŸãã ãªã©ãã¯ã¹ããŠããããã®çŽ æŽãããã¢ãã¡ãŒã·ã§ã³ã«åºå·ããããšãã§ããŸãã
éåžžã®ã°ãªããã¯ã©ãã§ããïŒ
ããã§ã¯ããã€ã³ãã¯ãµãã»ããã«æ£åžžã«åå²ããããšããžããŸã£ããåé€ããå¿ èŠããããŸããã§ããã ããããããã¯åžžã«èµ·ãããšã¯éããŸããã
ãããããããã æ Œåã®åŽé¢ã®ç¹ã®æ°ã¯å¥æ°ã«ãªãããã®ãããã¢ã«ãŽãªãºã ã¯ããªãã®æ°ã®ä¿®æ£ã匷å¶ãããŸãã ãããã®åã¯ã©ãã§ããïŒ
ãããããïŒ ããããç§ã¯äžå¿ã«ç¹ãããããããã奜ãã§ãïŒ
ãã®æç¹ã§ãèšäºã«ã¯ååãªGIFãå«ãŸããŠãããšæããŸãã ãã®èšäºãããŠã³ããŒãããåŸã ãã©ãã£ãã¯å¶éã®ããèªè ãå°ãªããšãå°ãã€ã³ã¿ãŒããããå©çšã§ããããã«ããããã«ãæ®ãã®ã¢ãã¡ãŒã·ã§ã³ããããªãã¹ãã£ã³ã°ã«ã¢ããããŒãããŸããã
1080pãš60fpsã«åºå·ããããšããå§ãããŸããããã¯ãããªã®å ã®è§£å床ã§ãã ãããŠãå šç»é¢è¡šç€ºã«æ¡å€§ããããšããå§ãããŸããããããªããšãã°ã©ãã®ç«¯ããšã€ãªã¢ã¹ãããŸãã
ãããã®ãããªã«èª°ããèå³ãæã£ãŠããããã§ã¯ãªãããšãç解ããŠããŸãããå€ãããŒãžã§ã³ã®Windowsã®ããã€ãã©ã€ã³ãã¹ã¯ãªãŒã³ã»ãŒããŒãšåãå¹æãç§ã«ãããããŸãã å£ãã®ã¯é£ããã§ã
ãããã®ã¢ãã¡ãŒã·ã§ã³ã¯ããã®èšäºãé·ãéæžãããŠããäž»ãªçç±ãšãªã£ãŠããŸãã èªå·±ãžã®æ³šæïŒæ¬¡åããããã¬ãŒãšãã¬ãŒã¹ãè¡ãããããã°ã®èŠèŠåãè¡ãã®ã¯å±éºã§ã:)ä»ã®ãã€ã³ãæ§æã§ã¢ã«ãŽãªãºã ãåäœããããšã確èªãããå Žåã¯ãã³ã¡ã³ããæžããŠãã ãããåãã§ã¢ãã¡ãŒã·ã§ã³ãçæããŸãã
èŠèŠåã楜ããã§ããã®ã¯æ¥œããã£ãã§ãããã¢ã«ãŽãªãºã ãæåã«äœæãããçç±ãæãåºããŠãã ããã 深床ã»ã³ãµãŒããã®ããŒã¿ããããªãŽã³ã¡ãã·ã¥ãçæããŸãã ããŠãã»ã³ãµãŒããç¹çŸ€ãååŸããã«ã¡ã©ã®å¹³é¢ã«æ圱ããŠãäžè§æž¬éã¢ã«ãŽãªãºã ãå®è¡ããŸãããã
ïŒãã®ãããªãã©ãã ãã¬ã³ããªã³ã°ãããããèããªãã§ãã ããã貧匱ãªffmpegãïŒ
ãããïŒ ãã®æ®µéã§ã¯ãã€ã³ããšãšããžã®ã°ã©ããããããŸããããåºæ¬çãªæ¹æ³ã§äžè§åœ¢ã®é åãçæã§ããŸãã ãªããžã§ã¯ãã®å¢çã§çºçããZ座æšã«åŒã䌞ã°ãããfilterãããªãŽã³ããã£ã«ã¿ãªã³ã°ããOpenGLã§åçŽãªãã¬ãŒã€ãŒãäœæããããã«ã®ã¿æ®ããŸãã
ããã§ã¯ãã°ã©ããŒã®æåã®ããŒãžã§ã³ãéåžžã«æªå å·¥ã§ãã£ãããšãã¯ã£ãããšããããŸããããã¯ãç»åãããªãŒãºããããããã¬ãŒã ã®ååã«èšé²ããæéããããŸããã§ããã èŠããã«ãã»ãšãã©ç£ç£ã®åäœã§ã¯ãããŸããã ããããããã¯åé¡ã§ã¯ãããŸãã-ã¢ã«ãŽãªãºã ãã€ãã«å®çŸããŸããïŒ ç§ã«ãšã£ãŠããã¯æ¬åœã®ãåè»å°çãã§ããïŒ
ãã®åŸãç§ã¯ããã«2ã3ã®ãããªãæ®åœ±ããã¿ã€ã ãã¬ãŒã ã¢ãã¡ãŒã·ã§ã³åœ¢åŒã§SketchfabãªãœãŒã¹ã«ã¢ããããŒãããŸãããããã¯ãã£ãšé¢çœããšæããŸãã
WebGLã®ããŒã¿ã»ããïŒ2
WebGLã®ããŒã¿ã»ããïŒ3
ããŠããã€ãã©ã€ã³ã¯æ©èœããéã®å¯èœæ§ã«ãã£ãŠãããªãéçºãå¶éãããŠããããšãæããã«ãªããŸããã å®éãTangoã¿ãã¬ããã§ã¯ãéåžžã«äœããã¬ãŒã ã¬ãŒãïŒ5 fpsïŒã§ã®ã¿æ®åœ±ã§ããŸãããäž»ãªã¢ã€ãã¢ã¯ã·ãŒã³ã®åçãªæ§è³ªããã£ããã£ããããšã§ããã ãã1ã€ã®éèŠãªå¶éããããŸããTangoã¯RGBã«ã¡ã©ãšIRã«ã¡ã©ãåæããŸãããã€ãŸãããã¬ãŒã ã¯ç°ãªãæç¹ã§åä¿¡ãããŸãã ããã¯ãéçãªããžã§ã¯ãã®ã¹ãã£ã³ãªã©ã§ã¯éèŠã§ã¯ãããŸããããªããªãã Tango SDKã䜿çšãããšãé«åšæ³¢å é床èšãšéçŒã«ã¡ã©ã«åºã¥ããçµã¿èŸŒã¿ã®è¿œè·¡æ©èœã䜿çšããŠãé£æ¥ãã¬ãŒã ã®RGBããŒãºãšIRããŒãºéã®å€æãèŠã€ããããšãã§ããŸãã ããããåããŠãããªããžã§ã¯ãã§ã¯ãããã¯ãŸã£ãã圹ã«ç«ã¡ãŸãããç§ã«ãšã£ãŠã¯ãåæãåããŠããªãããããã¯ã¹ãã£ãã¡ãã·ã¥ã«åŒã£åŒµãããšãã§ããŸããã§ããã
幞ããªããšã«ãå¥ã®ããã€ã¹-Intel RealSense R200ããããŸãã ã å¥è·¡çã«ãR200ã«ã¯äž¡æ¹ã®æ¬ ç¹ããããŸããã æ倧60ïŒïŒïŒfpsãéçºãããã¹ãŠã®ã«ã¡ã©ã®åªããåæãå®çŸããŸãã ããã§ãR200ã®ã°ã©ããŒã¢ããªã±ãŒã·ã§ã³ïŒä»åã¯Javaã§ã¯ãªãC ++ã§ïŒãäœæããå®éšãç¶ããããšã«ããŸããã
ãã€ãã©ã€ã³ã«å°ããªåé¡ãããããšãããã«æããã«ãªããŸããã R200ã§èš±å®¹ããã解å床ãšé«ãæ®åœ±é »åºŠã®å¢å ã«ããããªã¢ã«ã¿ã€ã ã§ãã¹ãŠã®ãã¬ãŒã ã«ã¡ãã·ã¥ãçæããã«ã¯ããã©ãŒãã³ã¹ãååã§ã¯ãããŸããã§ããã ãããã¡ã€ãªã³ã°ã¯ãããã«ããã¯ããã¡ããäžè§æž¬éã§ããããšã瀺ããŸããã åæããŒãžã§ã³ã¯ãSTLã䜿çšãããªã©ãã¡ã¢ãªãåçã«å²ãåœãŠãŠãããªãããªã©ãã¯ã¹ãããŠæžãããŠããŸããã ããã«ãæåã®ããŒãžã§ã³ã¯floatåã®åº§æšã§åäœããŸããããç§ã®ã¿ã¹ã¯ã§ã¯ããã€ã³ãã¯åžžã«æŽæ°åº§æšïŒç»åå ã®ãã¯ã»ã«åäœã®äœçœ®ïŒãæã¡ãŸãã ã ããã挞è¿æ§ã®ç¹ã§åªããã¢ã«ãŽãªãºã ãç§ã®ã©ãããããã§TangoïŒçŽ12,000ãã€ã³ãïŒã䜿çšãããã¹ããã¬ãŒã ã§æ倧30ããªç§åäœããã®ã¯é©ãããšã§ã¯ãããŸããã å éã®å¯èœæ§ã¯æããã§ãããç§ã¯ç±å¿ã«æé©åã®ããã«åº§ã£ãã ãã®ãããªãã®ãéçºãããŸããïŒ
- é床ã®ç¥å£ã§æåã«ããããšã¯ãæµ®åå°æ°ç¹æ°ã§ãã ãã¹ãŠã®ã¢ã«ãŽãªãºã ïŒå¯èœãªå ŽåïŒãæŽæ°èšç®ã«åãæ¿ãããŸããã
- 2çªç®ã®è¡ã¯ãã¡ã¢ãªã®åçå²ãåœãŠã§ãã ããã§ãã¢ã«ãŽãªãºã ã®ãã¹ãŠã®ã¡ã¢ãªããææªã®å Žåãã«äžåºŠå²ãåœãŠãããåå©çšãããŸããã ïŒACM ICPCã®ç²Ÿç¥ã§ïŒã¡ã¢ãªæ¶è²»ã®èŠ³ç¹ããã¯æãå¹æçãªãœãªã¥ãŒã·ã§ã³ã§ã¯ãããŸããããå€§å¹ ã«å éããŸããã
- å°éã®æ°å€ã·ãã¥ã¬ãŒã·ã§ã³ã«ç¹åãããããžã§ã¯ãã®ãµã€ãã§ãäžè§åœ¢ã®å€æ¥åå
ã®ãã€ã³ããèŠã€ããããã®çŽ æŽããããã¹ããèŠã€ãããŸããã
ãã®å®è£ ã¯æ¬¡ã®ãšããã§ãã
FORCE_INLINE bool inCircle(int x1, int y1, int x2, int y2, int x3, int y3, int px, int py) { // reduce the computational complexity by substracting the last row of the matrix // ref: https://www.cs.cmu.edu/~quake/robust.html const int p1p_x = x1 - px; const int p1p_y = y1 - py; const int p2p_x = x2 - px; const int p2p_y = y2 - py; const int p3p_x = x3 - px; const int p3p_y = y3 - py; const int64_t p1p = p1p_x * p1p_x + p1p_y * p1p_y; const int64_t p2p = p2p_x * p2p_x + p2p_y * p2p_y; const int64_t p3p = p3p_x * p3p_x + p3p_y * p3p_y; // determinant of matrix, see paper for the reference const int64_t res = p1p_x * (p2p_y * p3p - p2p * p3p_y) - p1p_y * (p2p_x * p3p - p2p * p3p_x) + p1p * (p2p_x * p3p_y - p2p_y * p3p_x); assert(std::abs(res) < std::numeric_limits<int64>::max() / 100); return res < 0; }
ãããã®3ã€ã®ã€ãã³ãã¯ããã¬ãŒã ããã30,000ãã€ã¯ãç§ãã6,100ãã€ã¯ãç§ã®éåžžã«å€§ããªå éãæäŸããŸããã ããããããã«å éããããšãã§ããŸããã
- ããã€ãã®å°ããªé¢æ°__forceinlineã6100-> 5700ãã€ã¯ãç§ãäœæããŸãããããã¯ãã³ã³ãã€ã©ãŒèªèº«ãæšæž¬ããªãã£ããŸããªã±ãŒã¹ã§ãã
- TriEdgeãã¬ãŒã ã¯ãŒã¯ã®#pragma packïŒpushã1ïŒãåé€ããŸããã ãããŠããªã梱å ãéããªããšæ±ºããã®ã§ããïŒ 5700-> 4800ãã€ã¯ãç§ã
- std ::ããåºæ°ã«äŒŒãèªå·±èšè¿°ãœãŒãã§ãã€ã³ãã®ãœãŒãã«çœ®ãæããŸããã 4800-> 3700ãã€ã¯ãç§ã
åèšã§ãã³ãŒããã»ãŒ10åé«éåããããšãå€æããŸããããããã¯å¶éã§ã¯ãªããšæããŸãã ã¡ãªã¿ã«ãAndroidçšã®ã³ãŒããåéããã®ã¯é¢åã§ã¯ãããŸããã§ãããåæ§ã®ã¿ã¹ã¯ARMã§ã¯ãTangoããã»ããµã¯ãã¬ãŒã ãããçŽ10ããªç§ã§åäœããŸããã 100 fpsïŒ èŠããã«ãããã¯å°ãããéãã§ããããšãå€æããŸãããã誰ããéåžžã«é«éãªãæŽæ°ããããŒãäžè§åœ¢åå²ãå¿ èŠãšãããªãããªããžããªãžããããã
ããã§ç§ã®ã¢ã«ãŽãªãºã ã¯R200ã«å¯Ÿå¿ããŸãããæåã«æ®åœ±ããããŒã¿ã»ããã¯æ¬¡ã®ãšããã§ãã
åœç¶ãä»ã®äººãããã«ç¶ããŸããã OpenGLãã¥ãŒã¢ã®ãããªã¯æ·»ä»ããŸããããSketchfabãããã«èŠãã»ããé¢çœããšæããŸãïŒ skfb.ly/6s6Ar
次ã®ããã«ãäžåºŠã«1ã€ã®ã¯ãªããã®ã¿ãéãããšããå§ãããŸãã Sketchfabã¯ãããŒã¿ã»ããã®ãã¹ãŠã®ãã¬ãŒã ãäžåºŠã«ã¡ã¢ãªã«ããŒãããŸããäžè¬ã«ããã¥ãŒã¢ã¯éåžžã«é«éã§ã¯ãããŸããã ãšããã§ãçŽæã®4Dç«ïŒVasyaïŒã¯æ¬¡ã®ãšããã§ãã
ç¬ããã·ã¥ã«ã¯ãã¬ãŒã¶ãŒã§èŒããŠããããšã«ããŸãæºè¶³ããŠããŸããã§ããã ãããã圌ã«ã¯éžæè¢ããããŸããã§ããã
Sketchfabã¢ã«ãŠã³ãã«ã¯ããã«ããã€ãã®ã¯ãªããããããŸãã ãã¡ãããã»ã³ãµãŒããã®ãã€ãºãæ éã«ãã£ã«ã¿ãªã³ã°ããã°ãã¢ãã«ã®å質ãåäžãããããšãã§ãããµã€ãã®ãã¬ã€ã€ãŒãããã»ã©é ããªããªãããã«ãã€ã³ãæ°ãæžããããšãã§ããŸãã ãããã圌ããèšãããã«ãå®ç§ã«å¶éã¯ãããŸããã ç§ã¯ãã§ã«ãã®ããããããžã§ã¯ãã«å€ãã®æéãè²»ãããŸããã
ãšã«ãããARãšVRã®æ»æçãªæ»æãèãããšãéçºè ããããã®ã¿ã¹ã¯ãã泚æã奪ãããšã¯ãªããšç¢ºä¿¡ããŠããŸãã CGã®ãããªWebã«ã¯ãããå€ãã®ããªã¥ãŒã ã³ã³ãã³ãããããŸãã
å®ç掻ã§ã®æ®åœ±ïŒ
åæããŠããšãŠãå°è±¡çã§ãïŒ äžè¬ã«ãèªç±èŠç¹ãããªã®å°æ¥ã«ã€ããŠå¿é ããå¿ èŠã¯ãããŸããã
æåŸã«ããã®ãããžã§ã¯ãã®ããã«æžããããã¹ãŠã®ã³ãŒãã¯ãç¡æã©ã€ã»ã³ã¹ã®äžã§Githubã§å©çšå¯èœã§ãããšèšããªããã°ãªããŸããã çæããã4Dãããªã¯ã»ãšãã©å°è±¡çã§ã¯ãããŸããã§ããããã¢ã«ãŽãªãºã ã¯ããã«äœ¿çšããã³éçºãããå¯èœæ§ããããŸãã
ãã®èšäºã§èª¬æãããŠããã¢ãããŒãã®äž»ãªå©ç¹ã¯ããã¬ãŒã€ãŒèªäœã§ãªã¢ã«ã¿ã€ã ã«3Dã·ãŒã³ãçæãããããšã§ãã ãã®ãããå§çž®ããã圢åŒã§ã¯ããããªãå ããã¹ããŒã¹ã¯ãããããã§ãããå®éã«ã¯ãåæ§ã®åŸæ¥ã®ãããªãšã»ãšãã©åãã§ãã
å®éããã¯ã¹ãã£ã«ã¯éåžžã®RGBãããªã®ã¿ãå¿ èŠã§ããããã€ã³ãã®3D座æšã¯ã¹ããŒã¹ããã¹ããããšããŠä¿åããæ¢ã«ã°ã¬ãŒã¹ã±ãŒã«ã®ãããªãã¡ã€ã«ã«ãšã³ã³ãŒãããããšãã§ããŸãã ãããã£ãŠã1ã€ã®ãã¬ãŒã ã3Dã§ã¬ã³ããªã³ã°ããã«ã¯ã2ã€ã®ãããªããã®ãã¬ãŒã ãšããã€ãã®ã¡ã¿ããŒã¿ïŒã«ã¡ã©ãã©ã¡ãŒã¿ãŒãªã©ïŒã®ã¿ãå¿ èŠã§ãã ããã«åºã¥ããŠãæ¡åŒµçŸå®ã®Skypeãªã©ã®ã¯ãŒã«ãªã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãã 察è«è ã¯æ·±åºŠã«ã¡ã©ã䜿çšããiPhoneã¯ãªã¢ã«ã¿ã€ã ã§ãARKitã䜿çšããŠè©±ããŠãã3Dããããã¬ã³ããªã³ã°ããŸãã ã¹ã¿ãŒãŠã©ãŒãºã®ããã°ã©ã ã®ããã§ãã
TangoãŠãŒã¶ãŒã«ãšã£ãŠäŸ¿å©ãªå¥ã®ãªãã·ã§ã³ããããŸãã å®éãTango SDKã¯ããŒã¿ã3Dã®ãã€ã³ãã¯ã©ãŠãã®åœ¢åŒã§æäŸããŸãïŒäžèšã§èª¬æããããã«ïŒããå€ãã®ã¢ã«ãŽãªãºã ã§ã¯é«å¯åºŠã®æ·±åºŠããããå¿ èŠã§ãã ãããååŸããæãäžè¬çãªæ¹æ³ã¯ãçŠç¹é¢ã«ãã€ã³ããæ圱ããæ¢ç¥ã®é£æ¥ãã€ã³ãéã®æ·±åºŠå€ãè£éããããšã§ãã ãããã£ãŠãããããŒäžè§åœ¢åå²ãšOpenGLã®çµã¿åããã«ããããã®è£éãæ£ç¢ºãã€å¹ççã«è¡ãããšãã§ããŸãã GPUã§ã©ã¹ã¿ã©ã€ãºãè¡ããããããã¹ããŒããã©ã³ã§ãé«è§£å床ã§æ·±åºŠããããçæã§ããŸãã
ããããããã¯ãã¹ãŠã®æè©ã§ãã ãããŸã§ã®ãšããããã®èšäºãè¿œå ã§ããããšãéåžžã«å¬ããæããŸãã æèŠããã£ãŒãããã¯ãããå Žåã¯ãã³ã¡ã³ãã§è°è«ããããšããå§ãããŸãã