1幎ã»ã©åã«ãç§ãã¡ã®å€§åŠãéçºããES1 Lastochkaé»è»ã®æè²ç 究æïŒULKïŒã«ã€ããŠè©±ãã
åºçç©ãåºçãããŸããã 次ã«ãããããã®ãããã¯ã«é¢ããæåŸã®åºçç©ã§ã¯ãªãããšãçŽæããŸãããç¹ã«ããã®ãããªã·ãã¥ã¬ãŒã¿ã®3次å
èŠèŠåã®äœæã®åé¡ã«ã€ããŠè©±ãããããã解決ããäž»ãªã¢ãããŒãã®æŠèŠã説æãããšè
ããŸããã
æšå¹Žãç§ãã¡ã¯æ¬¡ã®ãªãªãŒã¹ã«æºè¶³ããŸãã-æšå¹Ž8æã«éå¬ãããSapsané«éé»æ°ééEVS2ã®ULKã§ãã ãã®é»è»ã®æè²ãšå®éšå®€èªäœã¯å¥ã®è©±ã«å€ããŸããããã®åºçç©ã®æèã§ã¯ãçã¿ã«ã€ããŠè©±ããŸã-3次å
å¯èŠåã®é©åãªãµãã·ã¹ãã ãäœæããåé¡ãç§ãã¡ã®ããŒã ãçŽ2幎éããŸããŸãªåŽé¢ããã¢ãããŒãããŸããã Peregrine Falconã·ãã¥ã¬ãŒã¿ãŒã®ãªãªãŒã¹ã¯ããã®åéã§ã®éçºã®éçºãã¯ãã«ã決å®ãããããç¹ã«éèŠã§ãã
1. ULK EVS2 "Sapsan"ã«ã€ããŠç°¡åã«èª¬æããŸã
ç§ã¯ãç§ãã¡ã®å€§åŠã§éçºãããééè»äž¡ã®æè²çšããã³å®éšçšã®è€åæœèšãæ©é¢è»æ
å£ã®æºåãç®çãšããŠããªãããšãå床匷調ããŸãïŒããããŸããé »åºŠã§è¡ããŸãïŒã åã®èšäºã®
解説è
ã®äžäººãæ£ãã
ææããããã« ãç§ãã¡ã®ULKã¯ã·ãã¥ã¬ãŒã¿ã§ã¯ãªããåè»ã®åãã®ç©çåŠã®æèœãªå®è£
ãšããã®åããšåæ¢ãä¿èšŒããè»äž¡ãµãã·ã¹ãã ã®åäœã®ã·ãã¥ã¬ãŒã·ã§ã³ã«äž»ãªéç¹ã眮ããŠããã·ãã¥ã¬ãŒã¿ã§ãã Sapsanã·ãã¥ã¬ãŒã¿ãŒã¯äŸå€ã§ã¯ãªãã次ã®ã¿ã¹ã¯ã解決ãããŸãã
- 瞊æ¹åã®åãšè»éãããã¡ã€ã«ãèæ
®ããŠãåè»ã®æ©æ¢°éšåã®åçã¢ãã«ãå®è£
ãããŸãã
- é»è»ã®äž»èŠãªãµãã·ã¹ãã ã®åäœã®è©³çŽ°ãªã³ã³ãã¥ãŒã¿ãŒã¢ãã«ãæ§ç¯ãããŸããïŒé»åé»æ°åè·¯ããã©ã¯ã·ã§ã³é»æ°é§åã空æ°å§ããã³é»ç©ºãã¬ãŒã
- ããŸããŸãªã¬ãã«ã§ã®é»è»å¶åŸ¡ã·ã¹ãã ã®åäœã®åºæ¬çãªã¢ã«ãŽãªãºã ãåçŸãããŠããŸãã
ããã«ãèšç·Žããã³å®éšæœèšã«ã¯ãäž»å¶åŸ¡ããã³æ
å ±è¡šç€ºèšåãåããé»è»ã®ãã£ãã³ã®ãã«ãµã€ãºã®ã¢ãã¯ã¢ãããå«ãŸããŸãã Swallowsã·ãã¥ã¬ãŒã¿ãŒãšã¯ç°ãªãããã®ãã£ãã³ã¯ç§ãã¡ãç¬èªã«äœæãããã®ã§ã¯ãªãã2015幎ã«ãã¬ãŒãã³ã°ã·ãã¥ã¬ãŒã¿ãŒã®è£œé ã«æºããåœå
ã®æåãªãªãã£ã¹ã®1ã€ãã賌å
¥ããŸããã ãããã£ãŠãã·ãã¥ã¬ãŒã¿ãŒã®éçºããã»ã¹ã¯ããœãããŠã§ã¢ã®äœæã«çŠç¹ãåãããŸããã
ãã£ãã³åçãã£ãã³å
éšã®æŠèŠ³
ããã³ãã¬ã©ã¹ãéããŠèŠã
çµ±åæ©é¢è»å®å
šè£
眮ïŒCLUB-UïŒã衚瀺ããŸãã èµ€ãã290ãã¯ãCLUB-Ué»åã«ãŒãããååŸããçŸåšã®å¶éé床ã§ãã ãããŸã§ã®ãšããã10æã®ééã§ãµããµã³ãå°éããå¶éé床ã¯ããã§èªç€ºãããŸãã å°æ¥çã«ã¯ãé»åã«ãŒãã¯ç掻ã®äžã§è¡ãããããã«å®è£
ãããŸãã
ã¡ã€ã³ãã£ã¹ãã¬ã€ããã¥ãŒãã³ãã·ã³ã€ã³ã¿ãŒãã§ãŒã¹ã
é»è»ã®ãã¬ãŒãã·ã¹ãã ã®ç¶æ
ã瀺ããã£ã¹ãã¬ã€
ã¹ããŒãã¢ãžã£ã¹ã¿ãŒãšãã©ã¯ã·ã§ã³ã³ã³ãããŒã©ãŒ
é»è»ãã¬ãŒãå¶åŸ¡ã³ã³ãããŒã©ãŒ
é»æµã³ã¬ã¯ã¿ãŒããã³ä¿è·ããã€ã¹ïŒBV / GVïŒã®å¶åŸ¡çšã®ãã°ã«ã¹ã€ãã-é床èšå®åšã®è¿ãã«ããé»ã®ãã°ã«ã¹ã€ãã
ãã¬ãŒãã³ã°ç®¡çã€ã³ã¿ãŒãã§ã€ã¹-ã«ãŒãéžæç»é¢
ãªãŒãã£ãªãšãã§ã¯ãã®ããªã¥ãŒã ã³ã³ãããŒã«ç»é¢
ãã€ã¬ãŒãžã«ãŠã³ã¿ãŒã é¢çœã話ã¯åœŒã®å€èŠã«é¢é£ããŠããŸãã 2TE116ãã£ãŒãŒã«æ©é¢è»ã®æåã®ã·ãã¥ã¬ãŒã¿ãŒãåŒãæž¡ãããšãã顧客ã®ä»£è¡šè
ã¯äœæ¥èšŒææžã«çœ²åãããšãã«è³ªåã«åè«ãèšããŸããããããŠã人çã®ããã«ãã£ãŠã¿ãŸããããæ°ããæ©é¢è»ãé転ããããšã5000ããèµ°è¡ããå¿
èŠããããŸãã ããã¯åæ ŒããŸã...ãã ãã¡ããããã®è¡çºã¯ãã£ãšæ©ãææã«çœ²åãããŸããããç¶æ³ã®ãŠãŒã¢ã¢ãç解ããã®ã§ãSwallowsã·ãã¥ã¬ãŒã¿ãŒã§åæ§ã®ã«ãŠã³ã¿ãŒãäœæããŸããã ãµãŒãã¹ãã¹ã¯ãŒããå
¥åãããšãã«ãŠã³ã¿ãŒãã0ãã«ãªã»ããã§ããŸãã
ãã¬ãŒãå§åèšãšç·æ¥ãã¬ãŒããã«ããåããå³åŽã®ã¢ã¯ã»ãµãªããã«ã ãã®Sapsanã«åºæã®ãã¹ãŠã®èŠçŽ ãããã«ã€ã³ã¹ããŒã«ãããããã§ã¯ãããŸãã-ãã®ãããªãªã¢ãŒãã³ã³ãããŒã«ã¯ãµãã©ã€ã€ãŒããç§ãã¡ã«åãåãããŸãã
ãããã£ãŠãç§ãã¡ã«ãšã£ãŠéèŠãªå¶åŸ¡ã®äžéšã¯ãç¹ã«ã¿ããã¹ã¯ãªãŒã³ããå¶åŸ¡ããããã€ãã¹ã¹ã€ããã®ããã«ãªã©ããœãããŠã§ã¢ã«å®è£
ãããŠããŸããã
ãã®ãããªã·ãã¥ã¬ãŒã¿ã·ãã¥ã¬ãŒã¿çšã®ãœãããŠã§ã¢ã®éçºã¯éåžžã«åºç¯ãªè³ªåã§ãããå°æ¥ïŒããããã°ïŒãããã®åé¡ã«å¯Ÿããèªè
ã®é¢å¿ãæºè¶³ãããããã«ïŒã§ããéãïŒè©Šã¿ãŸãããä»ã¯èšäºã®ã¡ã€ã³ãããã¯ã§ããåè»ã®ç§»åããã»ã¹ã®3次å
èŠèŠåã«æ»ããŸãããã
2.éå»ã®èæ¯ãšæè¡
æåŸã®èšäºãžã®ã³ã¡ã³ãã§ã¯ãççŽã«èšã£ãŠãç§ããšãŠã楜ããŸã
ã質åãå°ããããŸããã ã¯ãã確ãã«ãä»æ¥ãŸã 䜿çšãããŠããå€ãã®ã·ãã¥ã¬ãŒã¿ãŒã§ã¯ããã®ã¢ãããŒãããŸã 䜿çšãããŠããŸãããããªã¯ééã®å®éã®ã»ã¯ã·ã§ã³ã§æ®åœ±ããã移åã®é床ã«æ¯äŸããé床ã§ã·ãã¥ã¬ãŒã¿ãŒäžãã¹ã¯ããŒã«ããŸãã ãããè¡ãããã®ã¯ããã®ãããªã·ãã¥ã¬ãŒã¿ãäœæãããåœæã3次å
ã°ã©ãã£ãã¯ã¹ã®å質ãæãŸããŠããªãã£ãããã§ãããããã¯åçšUnixã®éé
·ãªã°ã©ãã£ãã¯ã¹ããŒã·ã§ã³ã«ãåœãŠã¯ãŸããPCã®åé¡ã¯ãªãã£ãããã§ãã ãããã£ãŠãã³ã³ãã¥ãŒã¿ãŒã²ãŒã ã®ã¡ãŒã«ãŒãããšãã°
ãã®ã¡ãŒã«ãŒã§ãããã®ã¢ãããŒãã䜿çšããããšããããããŸããã§ããã
ããã¯ãä»æ¥ã§ã¯æå³ããããŸãããçç±ã¯æ¬¡ã®ãšããã§ãã
- äœãåè»é床ã§ã®äžååãªãã¬ãŒã ã¬ãŒãã¯ãç»åæŽæ°ã®æãŸããæ»ããããæäŸããŸããã 倧åãª25 fpsã¯ãé転åžãããããªãæ®åœ±ãããé床ã§ã®ã¿åŸãããŸãã ãããŠããã®èŽåœçãªæ¬ é¥ã¯ãé«éã«ã¡ã©ïŒæ¯ç§120ãã¬ãŒã ã§æ®åœ±ããããããªã®ééã¯ã©ããããã§ããïŒåãããšã§ã...ïŒã«ãã£ãŠããäžéãã¬ãŒã ã®ããã°ã©ã çæã«ãã£ãŠãã決ããŠå
æããããšã¯ã§ããŸããã åŸè
ã¯OpenCVãã¯ãããžãŒã䜿çšããŠè¡ãããŸããããéåžžã®çµæã«ã¯ãªããŸããã§ããã ãã®è³ªåã¯ããããåŽé¢ããç¹°ãè¿ãç 究ããããã®çµæããã®ãããªã·ã¹ãã ãäœæããããã®ãªãœãŒã¹ã®ã³ã¹ãã¯ã3Dã°ã©ãã£ãã¯ã¹ã«åºã¥ããåæ§ã®ã·ã¹ãã ã®éçºãã¯ããã«äžåããšçµè«ä»ããããŸãã
- ãããªãã¹ã ãŒãºã«åŸæ¹ã«ã¹ã¯ããŒã«ããããšã®é£ããã ãããŠã圌ããå
æãããããšãèæ
®ããŠãããã©ãããã©ãŒã ã«æ²¿ã£ãŠèµ°ã£ãŠããç¬ã¯ã©ãã§èµ°ããŸãããç§ãã¡ã¯éã«è¡ãã¹ãã ãšæããŸããïŒ
- ãã¹ãŠã®ã察話æ§ãã®æ¬ åŠã ä¿¡å·æ©ã®å€åãã«ãããã®åãã察åè»ãšééåè»ã®åããã©ããããïŒ
ãããã£ãŠãä»æ¥ã®ãœãããŠã§ã¢ãŸãã¯ããŒããŠã§ã¢ã®èŠ³ç¹ããã¯é害ããªãããããã¹ãŠã®ææ°ã®ã·ãã¥ã¬ãŒã¿ãŒããã³ã·ãã¥ã¬ãŒã¿ãŒã¯å¯Ÿè©±å3Dã°ã©ãã£ãã¯ã䜿çšããŠäœæãããŸãã
ããŒããŠã§ã¢ã®èŠ³ç¹ãããã¹ãŠãéåžžã«æ確ãªå Žå-ããã³ãã¬ã©ã¹ã®ä»£ããã«ã€ã³ã¹ããŒã«ãããã¢ãã¿ãŒã¯ãéåžžã®ãããªã«ãŒãïŒããããšã³ãã®ãã®ã§ããªãïŒã§PCã«æ¥ç¶ãããŸãããœãããŠã§ã¢ã®èŠ³ç¹ãããã¿ã¹ã¯ãå®çŸããããã®ãã¯ãããžãŒãéžæãããšããåé¡ãçããŸãã
3.ã°ã©ãã£ãã¯ãšã³ãžã³ãšã²ãŒã ãšã³ãžã³ããŸãã¯OpenSceneGraphãéžã°ããçç±
誀解ãããå¯èœæ§ããããŸãããäºåã«ã³ã¡ã³ããäºæ³ããŠããŸãããããã¯å®å
šã«è«ççãªè³ªåãããŸããæ¢åã®ãã¯ãããžãŒãåæãããšãã«ãUnityãUnreal Engine 4ãªã©ã®ãã¹ããã³ã§éžæãæ¢ãŸããªãã£ãã®ã¯ãªãã§ããïŒ ãã®è³ªåã«çããŸããããã«ãçããæ£åœåããŸãã
ç°¡åã«èª¬æãããšãUnityãUnreal Engineãã解決ããã¿ã¹ã¯ã®èŠä»¶ãæºãããŠããŸããã ãã詳现ãªåçã¯ããŸããåé¡ã®èŠä»¶ã®ãªã¹ããæäŸããŸãã 3次å
èŠèŠåã®ãµãã·ã¹ãã ã§ç§ãã¡ãã³ã³ãã€ã«ããTKã«ã¯ã次ã®èŠå®ãïŒéèŠåºŠã®éé ã§ïŒå«ãŸããŠããŸãã
- èŠèŠåãµãã·ã¹ãã ã®ãœãããŠã§ã¢éçºããã»ã¹ãšããã®ããã®ãªãœãŒã¹ãäœæããããã»ã¹ã®ç¬ç«æ§ã ãã®å Žåã®ãªãœãŒã¹ã«ã¯ã3次å
ã¢ãã«ããã¯ã¹ãã£ãããããã«ãŒããå«ãŸããŸãã ã«ãŒãã¯ããããªãµãã·ã¹ãã ãééã®ç®çã®ã»ã¯ã·ã§ã³ã衚瀺ããããã«æ²¿ã£ãåè»ã®åãã®ã·ãã¥ã¬ãŒã·ã§ã³ãæäŸã§ããããã«ããæ§æãªããžã§ã¯ããšãªãœãŒã¹ã®çµã¿åãããšããŠç解ãããŸãã ããã«ã¯ããããªãµãã·ã¹ãã ã®ãœãããŠã§ã¢éšåãåçµã¿ç«ãŠããã«ã«ãŒããå€æŽããå¯èœæ§ãå«ãŸããŸãã
- é·ãç¡å¶éã®ã«ãŒããäœæããŸãã ããŒããŠã§ã¢ãªãœãŒã¹ãéãããŠãããããååãšããŠç¡å¶éã®é·ãã¯éæã§ããªãããšãäºçŽããŸãã ãã®èŠä»¶ã¯ãã«ãŒãã®é·ããå°ãªããšã1ã€ã®ãè©ãå
ãã€ãŸãæ¹å転æç¹éã®éè·¯ã®ã»ã¯ã·ã§ã³å
ã«ããå¿
èŠãããããšãç解ããå¿
èŠããããããã¯ããŸããŸãªèŠå ã«å¿ããŠã100ããã¡ãŒãã«ä»¥äžãšæšå®ãããååã«é·ãè·é¢ã§ãã ãã®èŠä»¶ã«ãããããã°ã©ã ãªãœãŒã¹ã®åçãªããŒã/ã¢ã³ããŒããé©åãªã¡ã¢ãªæ¶è²»ã§ååã«ã¹ã ãŒãºã«è¡ãå¿
èŠããããŸãã ãããŠããšã³ãžã³ã«ã¯ãç®±ããåºããŠããã«ããã®ãããªæ©èœãå«ãŸããŠããããšãæãŸãã
- 䜿çšæžã¿æè¡ã¹ã¿ãã¯ãšã®äŸ¿å©ãªçµ±åã åŸæ¥ã客芳çãªçç±ãããåã³ULK PSãœãããŠã§ã¢ã®éçºã®ããã«ãç§ãã¡ã®ããŒã ã¯QtCreator IDEãšããŠQtãã¬ãŒã ã¯ãŒã¯ã䜿çšããããŒãžã§ã³ç®¡çã·ã¹ãã ãšããŠGitã䜿çšããŸãã ã·ã¹ãã ãã©ãããã©ãŒã ULK PSãšããŠãLinuxã«ãŒãã«ã«åºã¥ãOSã䜿çšãããŸã
UnityãšUEã®äœãåé¡ã«ãªã£ãŠããŸããïŒ ä»ã®ãšã³ãžã³ãå®å
šã«ç°ãªã圢åŒã®ãªãœãŒã¹ãã€ã³ããŒãã§ãããšããäºå®ã¯äœã§ããã ãã ãããããžã§ã¯ããã¢ã»ã³ãã«ããå Žåããããã¯å
éšãã€ããªåœ¢åŒã«äžå¯éçã«å€æãããããããããžã§ã¯ããåã¢ã»ã³ãã«ããã«ãªãœãŒã¹ãè¿œå ããã³å€æŽããããšã¯ã§ããŸããã ãšã³ãžã³ãšãã£ã¿ãŒã¯ééã®å Žæãäœæããã®ã«æé©ãªå Žæã§ã¯ãªããããUnityã§å©çšå¯èœãªãã¬ãããã¢ã»ãããã³ãã«ãªã©ã®æè¡ã§ã¯åé¡ã解決ã§ããŸããããã®ããããšãã£ã¿ãŒã®æ¡åŒµãå¿
èŠã«ãªããããšã³ãžã³å
ã®ãšã³ãžã³ããèšè¿°ããå¿
èŠãçããŸãã ããã«ãUnityãšãã£ã¿ãŒã䜿çšããªããšããã¬ãããšãã³ãã«ã®äœæã¯äžå¯èœã§ããããã¯ãå®è·µã瀺ããŠããããã«ãç¹ã«çŽç²ãªã¢ãã©ãŒãã¬ãã«ãã¶ã€ããŒã«ãšã£ãŠã¯ããŸã䟿å©ã§ã¯ãããŸããã UEã«ã€ããŠã¯ããããžã§ã¯ãã®æ§ç¯ããã»ã¹ãã䜿çšãããªãœãŒã¹ã®è¿œå /å€æŽããã»ã¹ãããããžã§ã¯ããåé¢ããæ¹æ³ã«ã€ããŠã2幎以äžã«ããã£ãŠãã®ãªãœãŒã¹ãä»ã®ãªãœãŒã¹ã«ã€ããŠéåžžã«å€ãã®è³ªåãããŸããããããã¥ã¡ã³ããŸãã¯ã ãã²ãŒã éçºè
ãç±å¿ã«ã ç§ãèŠéããäœãã«åççã«ã€ãŸãããå Žåãç§ã¯éåžžã«ããããã§ãïŒç®èãªãïŒã
2çªç®ã®èŠä»¶ã«ã€ããŠã¯ãUnityãšUEã®äž¡æ¹ãåçã«ããŒããããå Žæãäœæããæ©èœãæäŸããŠããããã«èŠããŸããã質åã«ã¯çãããããŸããã å¯äžã®æ¹æ³ããããŸã-ããšã³ãžã³å
ã®ãšã³ãžã³ããèšè¿°ãããçã®ãïŒ3Dãšãã£ã¿ãŒãã以åã«æå®ããããšã¯ã¹ããŒã圢åŒã®ããããã§ïŒãžãªã¡ããªãšãã¯ã¹ãã£ãèªã¿èŸŒã¿ãå¿
èŠãªãã¹ãŠã®å¹æããããã«é©çšãããµãŒãããŒãã£ã§èª¬æãããããŒã¿ã«åºã¥ããŠç©ºéã«é
眮ããŸãããšã³ãžã³åœ¢åŒãšã¯é¢ä¿ãªãããšã³ãžã³ã解éããããã«éçºããã³æå°ããå¿
èŠããããŸãã
äžèšã«é¢é£ããŠãåé¡ãçºçããŸã-ãã®åé¡ã解決ããã«ã¯ãã²ãŒã ãšã³ãžã³äžã«åŒ·åãªãœãããŠã§ã¢ã¬ã€ã€ãŒãèšè¿°ããå¿
èŠããããŸããããã®æ©èœã®ã»ãšãã©ã¯æ€èšäžã®åé¡ã§ã¯åã«å¿
èŠã§ã¯ãªãã®ã«ããªãã²ãŒã ãšã³ãžã³ãå¿
èŠãªã®ã§ããããïŒ
ã°ã©ãã£ãã¯ãšã³ãžã³ã§ååã§ããããïŒ ç§ã¯ãã®åé¡ãåã®ããŒã ã«å°ããŸãããåã®ããŒã ã¯è°è«äžã®åé¡ã«åãçµã¿ãUnityã«äŸåããŠããŸããïŒãããŠãå°ãåŸã«èªç¶ã«ããŒãžãããŸããïŒã ããã«å¿ããŠã圌ã¯ãããªãã¯äœãææ¡ããŸããïŒããšããååãåãåããŸããããããŠãäžèšã®ããã¹ãã®ç²Ÿç¥ã§ã圌ã¯æµã®ç®èãªç¬é¡ãåããŸããã
ç®èãªãã§è¡ãå Žåãæ瀺ãããã¿ã¹ã¯ã¯å
žåçãªèŠèŠåã¿ã¹ã¯ã§ããç©çåŠãšç©çåŠã«åºã¥ããªãŒãã£ãªãµãã·ã¹ãã ã®äž¡æ¹ããµãŒããŒåŽã§å®è£
ããããããã°ã©ãã£ãã¯ã¹ãæäœããããã®ãã¬ãŒã ã¯ãŒã¯ã®ã¿ãå¿
èŠã§ãã ç§ã®ããŒã ãšç§ã¯ãã®äºå®ãç解ããããã«ãªãã以åã®éçºè
ã®æ
£æ§ã«ãã£ãŠãæåã«UEãä»ããŠUnityã«åãã£ãŠç§»åãããªãŒãã³ééã·ãã¥ã¬ãŒã¿ãŒã®1ã€ããã°ã©ãã£ãã¯ãµãã·ã¹ãã ãåºå®ããããšããŸããïŒOpenBVEã¯ãçµæçã«äžæçãªæŸèæã«ãªããŸããïŒ
OpenSceneGraphã¯ãC ++éçºã«ç¹åãããæãéçºãããïŒãªãŒãã³ã§ç¡æã®ïŒã°ã©ãã£ãã¯ãšã³ãžã³ã§ãã æè¡çãª3次å
èŠèŠåã®ããã«ãæµ·å€ã§æ£ç¢ºã«åºã䜿çšãããŠããŸãã ãã®ãšã³ãžã³ã¯ã
FlightGearãæãæåãªã©ã®çš®é¡ã®ã·ãã¥ã¬ãŒã¿ã«ãspareããŸããŠããŸããã§ããã ãã€ãŠããã®ãšã³ãžã³ã«åºã¥ãééã·ãã¥ã¬ãŒã¿ããããŸãã-
ã€ã³ãã© ããããããããããäžã®ãªã³ã¯ããéãã¹ã¯ãªãŒã³ã·ã§ããã ãããããŸããããããŠããã以äžã®éåœã¯ç§ã«ç¥ãããŠããŸããã§ããã
æå
ã®ã¿ã¹ã¯ã®ã³ã³ããã¹ãã§ã¯ãOSGã°ã©ãã£ãã¯ãšã³ãžã³ã«ã¯æ¬¡ã®å©ç¹ããããŸãã
- ã¯ãã¹ãã©ãããã©ãŒã ãGNU/ Linuxãšã³ã·ã¹ãã ã§ã®é©çšãå¯èœã«ããŸã
- éçºèšèªã¯C ++ / STLã§ããã確ç«ãããéçºã®æè¡ããã»ã¹ã«ç°¡åãã€èªç¶ã«çµ±åã§ããŸãã
- éçºããããã©ã°ã€ã³ã·ã¹ãã ã«ããã3次å
ã®ãžãªã¡ããªãšãã¯ã¹ãã£-æãåºç¯ãªãªãœãŒã¹ãã©ãŒããããããã®ãŸãŸããµããŒããããŸããã ãªãœãŒã¹ãããŒãžã£ãŒãéæšæºåœ¢åŒã«èšå®ããããã®ç¬èªã®ãã©ã°ã€ã³ãäœæããããã®ã·ã³ãã«ã§çŽæçãªã€ã³ã¿ãŒãã§ã€ã¹ïŒããã«ã€ããŠã¯ä»¥äžã§èª¬æããŸãïŒã
- ã¹ããŒããã€ã³ã¿ãŒã®ç¬èªã¢ãã«ã«åºã¥ãã¡ã¢ãªç®¡çã·ã¹ãã ïŒéçºã®æåã«C ++æšæºã«ã¹ããŒããã€ã³ã¿ãŒãšã³ãžã³ããªãã£ããããæŽå²çã«ã¹ããŒããã€ã³ã¿ãŒã®ç¬èªåœ¢åŒã䜿çšãããŠããŸããïŒã
- æè»ãªã¢ãžã¥ãŒã«åŒã¢ãŒããã¯ãã£ã
- ãªããžã§ã¯ããåçã«ããŒãããã¯ãªããã³ã°ãã©ãããå
ã«ãããªããžã§ã¯ãã®ã¿ã®ããŒããšã¬ã³ããªã³ã°ãæäŸããã·ãŒã³ãªããžã§ã¯ããããŒãžã£ãŒïŒosg :: PagedLODã¯ã©ã¹ã«ããïŒ
- Qtãã¬ãŒã ã¯ãŒã¯ãšçµ±åããæ©èœã Q ++ãæäŸãã䟿å©ãªãã·ã°ãã«-ã¹ããããã¢ãã«ã®ãããã§ãC ++éçºã倧å¹
ã«ç°¡çŽ åããã³é«éåãããè€éãªãœãããŠã§ã¢ã®ãã¬ãŒãã³ã°ã«ãã®ãã¬ãŒã ã¯ãŒã¯ãåºã䜿çšãããŠããŸãã ãããã£ãŠãç¹ã«TCPãœã±ããã«åºã¥ãããã»ã¹ééä¿¡ã®ã©ã€ãã©ãªã«é¢ããŠãããŸããŸãªãããžã§ã¯ãã§åå©çšãããéèŠãªã³ãŒãããŒã¹ãèç©ããŸããã ãããªãµãã·ã¹ãã ãããžã§ã¯ãã§Qtã®æ©èœã䜿çšããããšã¯è«ççãªæ±ºå®ã®ããã§ãã
- 解決ããã¿ã¹ã¯ã«ååãªç»è³ªã
OSGæ©èœã培åºçã«ã調æ»ããããã®ãšã³ãžã³ã䜿çšããŠåé¡ã解決ããããã®ã¢ãããŒããèŠã€ããã«ã¯ãçŽ6ãæã®éäžçãªç 究ãå¿
èŠã§ããã çµæãšããŠçãŸãããã®ã¯å¥ã®è°è«ã«å€ããŸãã
4.ã¢ãŒããã¯ãã£ããå®çšãããã¿ã€ããŸã§
è»äž¡èšç·Žã·ãã¥ã¬ãŒã¿ïŒHTSCïŒã®ãããªãµãã·ã¹ãã ã¯ãvideo3d-clientãšåŒã°ããã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã§ããã次ã®æ©èœãå®è¡ããŸãã
- ã·ãã¥ã¬ãŒã¿ãŒã®ãµãŒããŒéšåãžã®æ¥ç¶èŠæ±ããµãŒããŒã§ã®æ¿èªãããã«ç¶ãããŒããããã«ãŒãã®èå¥åã®å®æçãªèŠæ±ããããŠåè»ã®çŸåšäœçœ®ã æ¥ç¶ããµãŒããŒåŽããåæããããšãã·ã¹ãã ã¯åæ¥ç¶ã®ããã«ã¹ã¿ã³ãã€ã¢ãŒãã«åãæ¿ãããŸãã
- éžæããã«ãŒããããŠã³ããŒãããã¬ã³ããªã³ã°ãããã·ãŒã³ã®ã³ã³ãã³ãã®åç管çãæŽçããŸãã
- ã«ãŒãäžã®åè»ã®çŸåšäœçœ®ã«åŸã£ãŠå®éã«ã·ãŒã³ãã¬ã³ããªã³ã°ãã
ãã®ãããžã§ã¯ãããªãŒãã³ãœãŒã¹ã ã£ãããã§ã¯ãããŸãããããã«æ©èœã®ãã¯ãããžãŒãã¢ã®ã³ãŒãã¯
ãã¡ãã«ãããŸã ã ãããžã§ã¯ãã¯ã次ã®ã¢ãžã¥ãŒã«ã§æ§æãããŠããŸãã
- filesystem-ãã¡ã€ã«ã·ã¹ãã ãæäœããããã®ã©ã€ãã©ãªãæ§æãã¡ã€ã«ãšã¢ããªã±ãŒã·ã§ã³ãªãœãŒã¹ãžã®ãã¹ãçæããŸãã
- library-ãã€ãããã¯ã©ã€ãã©ãªããŒããŒã®ã¯ãã¹ãã©ãããã©ãŒã å®è£
ã äžè¬ã«ãQtïŒæŠéã®æºåãã§ããŠããQLibraryã¢ãžã¥ãŒã«ãããïŒãšã®çµ±åã®å¯èœæ§ããŸã ææ§ã ã£ããšãã«æžãããæŸèæ
- osgdb_dmd -DGLEngineãšã³ãžã³ããŒãžã§ã³1.1ã«åºæã®åœ¢åŒã®ã¢ãã«ãããŒãããããã®ãã©ã°ã€ã³ã ãããå¿
èŠã ã£ããã®ã«ã€ããŠã¯ãããå°ãäœãã«èª¬æããŸã
- ã«ãŒãããŒããŒã¯ãã«ãŒãããŒããŒãžã®æœè±¡çãªã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããã©ã€ãã©ãªã§ãã ä»»æã®åœ¢åŒã®ã«ãŒããããŒãããããšãå¯èœã§ã
- tcp-connection -TCPãœã±ãããä»ããããã»ã¹ééä¿¡ã©ã€ãã©ãª
- viewer-ããã°ã©ã ã®ã¡ã€ã³ã®å®è¡å¯èœã¢ãžã¥ãŒã«
- zds-route-loader -ZDSimulator圢åŒã®ã«ãŒããããŒãããããã®ãã©ã°ã€ã³
HTPSãèšèšãããšããè·¯ç·åœ¢åŒãç¬èªã«éçºããããæ¢åã®è·¯ç·åœ¢åŒã䜿çšããããæ¢åã®ééã·ãã¥ã¬ãŒã¿çšã«åœå
ééã®æ¢æè·¯ç·ã䜿çšããããšããçåãçããŸããã 幞ããªããšã«ã決å®ã
åºãããŸãã-ã¯ããŒãºããããã©ã€ãšã¿ãªè£œå
ZDSimulator㯠ãåœå
ã®ééè»äž¡ãšéé網ã®ä»æ§ã«åãããŠèª¿æŽãããŠãããšããç¹åŸŽãæã£ãŠããŸãã ãããžã§ã¯ãã®äœè
ã®ç§°è³ã«ãããããããå€ãã®é倧ãªæ¬ ç¹ããããŸãããåæã«ãããªãã¯ãã¡ã€ã³ã«ããã«ãŒãã®ã·ã³ãã«ã§æ確ãªåœ¢åŒããããŸãã ã·ãã¥ã¬ãŒã¿ã®ã°ã©ãã£ãã¯éšåããªãŒãã³DGLEngineãšã³ãžã³ã«åºã¥ããŠãããšããäºå®ã«ãããããããæåã®æ®µéã§ã¯ãæ©äŒãã€ããŸãªãããšã¯çœªã§ããã åé¡ã¯ããã®ãšã³ãžã³ã¯éçºäžã§ããïŒãããžã§ã¯ãã®çŸåšã®ç¶æ
ã¯
ãã¡ãã§ç¢ºèªã§ããŸã ïŒãçŸåšã®2çªç®ã®ããŒãžã§ã³ã¯ZDSimulatorã®ããŒã¹ã§ããããŒãžã§ã³1.1ãšäºææ§ããªããšããããšã§ãã ããŒãžã§ã³1.1ã®ãœãŒã¹ã³ãŒãã¯å€±ããããããã«ã€ãªãããªã³ã¯ã¯é·ãéæ¶ããŠãããŸããã
Webã¢ãŒã«ã€ãã培åºçã«æ€çŽ¢ããããšã§ã
Gtihubã«DGLEngine v1.1ãæçš¿ããããšã«ãããçŽå€±ãããã®ãèŠã€ããŠä¿åããããšãã§ããŸããã ãã®ãšã³ãžã³ã¯ãç¬èªã®ç¹å®ã®åœ¢åŒã®3Dã¢ãã«ã䜿çšããŸãã ãšã³ãžã³ã®ãœãŒã¹ãããã°ãOSGã«å¯Ÿå¿ãããã©ã°ã€ã³ãäœæããããšã¯é£ãããããŸããã§ããã
ãããã£ãŠãHTPSãäœæããã¿ã¹ã¯ã¯ãOSGãšã³ãžã³ã§ãœãããŠã§ã¢ããŒããäœæããããšã«ãªããŸããã å°æ¥çã«ã¯ãç¬èªã®ã«ãŒã圢åŒãéçºããäºå®ã§ããçŸåšã®åœ¢åŒã§ã¯ãã¡ã€ã³ã«ãŒãã«æ²¿ã£ã移åã®ã¿ãå¯èœã§ãå€ãã®è€éãªã«ãŒããåäœæã§ããªãå€ãã®æ¬ ç¹ããããŸãã
HTPSã®äž»èŠãªã¯ã©ã¹ã®éå±€ã次ã®å³ã«ç€ºããŸã
ã«ãŒãããŒããŒã®ã¯ã©ã¹ããŒããŒã¯æ¬¡ã®ããã«ãªããŸã
ä»ã®ã«ãŒã圢åŒã®ããŒããŒã¯ãRouteLoaderã¯ã©ã¹ãç¶æ¿ããã¯ã©ã¹ãå«ããã©ã°ã€ã³ãšããŠäœæã§ããŸãã VTPSã®éå§æã«ãã«ãŒãã®ãããã£ã¬ã¯ããªãžã®ãã¹ã転éãããã«ãŒãã®åœ¢åŒã決å®ããã察å¿ãããã©ã°ã€ã³ãåçã«ããŒããããæ®ãã®ããŒãã£ãªäœæ¥ãå®è¡ãããŸãã
åºæ¬çã«éèŠãªãã¥ã¢ã³ã¹ã¯ãOSGãšã³ãžã³ãšQtã®çµ±åã§ãã ãã®ãããªçµ±åãååšãã
osgQtãšåŒã°ã
ãŸã ã ãã®ã©ã€ãã©ãªã¯ã次ã®2ã€ã®çç±ã§ãã®ãããžã§ã¯ãã§ã¯äœ¿çšãããŸããã§ããã
- QtãæäŸãããŠã£ã³ããŠã³ã³ãããŒã«ã¯äžèŠã§ãã OSGã«ã¯ç¬èªã«ããªãéçºãããGUIãŠã£ã³ããŠç®¡çã·ã¹ãã ããããosgQtã¯äž»ã«OSGãã¥ãŒã¢ãŒãQtããŒã¹ã®GUIã«çµ±åããããšãç®çãšããŠãããããGUIãå¥ã®GUIã®äžã«ãã§ã³ã¹ããããšã¯æå³ããããŸãã
- osgQtã«ã¯ãã°ããããŸããOpenGLã³ã³ããã¹ãã®èª€ã£ãæäœã¯ãOSGãšQGLWidgetã«åå²ã§ããªãå Žåããããã·ãŒã³ãQtãŠã£ãžã§ããã§ã¯ãªãã©ãã«ã§ã衚瀺ãããããã§ãã ããã«ãäžéšã®ã·ã¹ãã ã§ã¯ãã®ãã°ãçºçããªããããçç±ãèŠã€ããããšã¯ãŸã ã§ããŠããŸããã
ãä¿¡å·ã¹ããããã®æŠå¿µã䜿çšããŠãQtã䜿çšããèšèšã®ããã¡ã¯ãã¹ã¿ã³ããŒãã§ããtcpæ¥ç¶ãããã¯ãŒã¯ãµãã·ã¹ãã ãšã®çžäºäœçšã確ä¿ããããã«ãQtãšã®çµ±åãå¿
èŠã§ãããšããç解ããããŸããã OSGã¡ãã»ãŒãžã³ã°ã·ã¹ãã ã«äŸåããŠãTCPã¯ã©ã€ã¢ã³ãïŒããã³ã¯ãã¹ãã©ãããã©ãŒã ïŒãæžãçŽãããã¯ãããŸããã§ããã ãããªããžã§ã¯ãããå¥ã®ãªããžã§ã¯ãã®ã¹ããããããªã¬ãŒããä¿¡å·ãéä¿¡ããå Žåã次ã®3ã€ã®æ¡ä»¶ãæºããå¿
èŠããããšããäºå®ã«åºã¥ããŠããšã¬ã¬ã³ããªãœãªã¥ãŒã·ã§ã³ãèŠã€ãããŸããã
- QObjectããçžäºäœçšããã¯ã©ã¹ãç¶æ¿ãã
- ä¿¡å·åŠçã«ãŒããæŽçãã
- ã¢ããªã±ãŒã·ã§ã³æäœäžã«ã¡ã¢ãªã«ååšããQApplicationïŒãŸãã¯QCoreApplicationïŒã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŸã
ãã®å Žåãéåžžã®ä¿¡å·åŠçãµã€ã¯ã«ãéå§ããQApplication :: execïŒïŒãåŒã³åºããŠã¯ãªããŸãããQApplication:: processEventsïŒïŒãåŒã³åºããŠä¿¡å·ãåŠçãããããµã€ã¯ã«ãç·šæããã ãã§ååã§ãã OSGã«ã¯ãã®ãããªã«ãŒãïŒã¬ã³ããªã³ã°ãå®è¡ãããã«ãŒãïŒããããosgGA :: GUIEventAdapter :: FRAMEã€ãã³ããçæãããã€ãã³ããã³ãã©ãŒãäœæã§ããŸããããã¯ã次ã®ãã¬ãŒã ãã¬ã³ããªã³ã°ãããšãã«ãšã³ãžã³ã«ãã£ãŠçæãããŸãã ãããã£ãŠããã¹ãŠã®çµ±åã¯ã³ãŒãã«çž®å°ãããŸãã
qt-events.h#ifndef QT_EVENTS_H #define QT_EVENTS_H #include <osgGA/GUIEventHandler> #include <QtCore/QtCore> class QtEventsHandler : public osgGA::GUIEventHandler { public: QtEventsHandler(){} virtual bool handle(const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &aa); protected: }; #endif // QT_EVENTS_H
qt-events.cpp #include "qt-events.h" bool QtEventsHandler::handle(const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &aa) { switch (ea.getEventType()) { case osgGA::GUIEventAdapter::FRAME: { QCoreApplication::processEvents(QEventLoop::AllEvents, 100); break; } default: break; } return false; }
main.cpp #include "main.h"
ãã®åŸãQObjectãšãã®æŽŸçã¯ã©ã¹ããç¶æ¿ãããã¯ã©ã¹ã¯ããã«ã¹ã倱ããããŸã§ä¿¡å·ã亀æã§ããŸãã
äžèšã®ãã¹ãŠã§ãHTPSã®æåã®å®çšãããã¿ã€ããäœæããã®ã«2ãæããããŸããã æåŸã«äœãèµ·ãã£ãã®ãã瀺ãããã«ãå®éã®ã«ãŒãã§ã®å®éšæ
è¡ãã次ã®ã»ã¯ã·ã§ã³ãææ¡ããŸãã æ®åœ±ã®è³ªã«ã€ããŠäºåã«è¬çœªããŸã-圌ãã¯ã¹ããŒããªæè¡ãæã«å
¥ããŸããã§ãã
çµè«ãšçµè«
å°ãªããšãç§ãã¡ã®ããŒã ã«ãšã£ãŠã®äž»ãªçµè«ã¯ããããžã§ã¯ããå®è£
ããããã®æè¡ã®éžæã«ãç°è²ã®åŒŸäžžãã¯ãªãã£ããšããããšã§ããã ç©æ¥µçã«è²©å£²ãããŠããã²ãŒã ãšã³ãžã³ã¯ãæè¡ã·ã¹ãã ã®ã¢ããªã³ã°çµæã®èŠèŠåãªã©ãç¹å®ã®ã¿ã¹ã¯ã®è§£æ±ºã«å¿
ãããé©ããŠãããšã¯éããŸããã ãããŠãããããé©åã§ããã°ããããžã§ã¯ãã®éçºãšä¿å®ã«è²»ããããåªåã®èŠ³ç¹ããã¯æé©ã§ã¯ãããŸããã
éåžžã«åªããããããŠæãéèŠãªç¡æã®ã°ã©ãã£ãã¯ãšã³ãžã³OSGãå®éã«ç§ãã¡ã®åœã«ã³ãã¥ããã£ãæã£ãŠããªãããšã¯æ®å¿µã§ãã ãã®åé¡ã解決ãããã
ã«ããªãœãŒã¹ã«é¢ããäžé£ã®èšäºãããã«æžã蟌ã¿
ãŸã ïŒãã·ã¢èªãå«ããå€ããå°ãªããé©åãªæ
å ±æºãžã®ãã¹ãŠã®ãªã³ã¯ãåéããŸããïŒã ããã«ãOSGã®åºæ¬ååã説æããããã¥ã¡ã³ããšããŠã
ãã®ããã°ãæäŸããããšãã§ããŸãã 誰ãããã®æ
å ±ã圹ç«ã€ããšãé¡ã£ãŠããŸãã
HTSCã«é¢ããŠã¯ããã®æ¹åã®äœæ¥ãç¶ç¶ãããŸãã è¿ãå°æ¥è§£æ±ºãã¹ãéèŠãªã¿ã¹ã¯ããŸã ãããããããŸãã
ãæž
èŽããããšãããããŸããïŒ
ïŒcïŒé©æ°çèœåéçºã»ã³ã¿ãŒ