
åã®ã¬ãã¹ã³ã§ã¯ã倿è¡åã§é ç¹ã倿ããããšã§åŸãããå©ç¹ã«ã€ããŠåŠã³ãŸããã OpenGLã¯ãã·ã§ãŒããŒã®éå§åŸã«è¡šç€ºãããã¹ãŠã®é ç¹ããæ£èŠåãããããã€ã¹åº§æšïŒNDCïŒã«ãããšæ³å®ããŠããŸãã ããã¯ãåé ç¹ã®xãyãz座æšã-1.0ã1.0ã®éã§ãªããã°ãªããªãããšãæå³ããŸãã ãã®ç¯å²å€ã®åº§æšã¯è¡šç€ºãããŸããã éåžžãèªåã§èšå®ããç¯å²ã®åº§æšãæå®ããé ç¹ã·ã§ãŒããŒã§ãããã®åº§æšãNDCã«å€æããŸãã æ¬¡ã«ããããã®NDCã¯ã©ã¹ã¿ã©ã€ã¶ãŒã«æž¡ãããŠãç»é¢ã®2次å
座æš/ãã¯ã»ã«ã«å€æãããŸãã
座æšãæ£èŠåããŠããã¹ã¯ãªãŒã³åº§æšã«å€æããããšã¯ãéåžžãæ®µéçã«è¡ãããŸããæçµçã«ã¹ã¯ãªãŒã³åº§æšã«å€æããåã«ããªããžã§ã¯ãã®é ç¹ãããã€ãã®åº§æšç³»ã«å€æããŸãã ããã€ãã®äžé座æšç³»ãä»ãã座æšå€æã®å©ç¹ã¯ãç¹å®ã®ã·ã¹ãã ã§äžéšã®æäœ/èšç®ãç°¡åã«å®è¡ã§ããããšã§ããããã¯ããã«æããã«ãªããŸãã åèšã§ãç§ãã¡ã«ãšã£ãŠéèŠãª5ã€ã®ç°ãªã座æšç³»ããããŸãã
- ããŒã«ã«ç©ºéïŒãŸãã¯ãªããžã§ã¯ã空éïŒ
- ã¯ãŒã«ãã¹ããŒã¹
- ãã¥ãŒã®ã¹ããŒã¹ïŒãŸãã¯ãªãã¶ãŒããŒïŒ
- ã¯ãªããã³ã°ã¹ããŒã¹
- ã¹ã¯ãªãŒã³ã¹ããŒã¹
ããŒã¯ã¯ããã©ã°ã¡ã³ãã«ãªãåã«ãããããã¹ãŠã®ç°ãªãç¶æ
ã«å€æãããŸãã
ããããä»ãããªãã¯å空éãŸãã¯åº§æšç³»ãäœã§ãããå®å
šã«æ··ä¹±ããŠããã®ã§ãå
šäœåãšå空éãå®éã«äœããããã瀺ãããšã«ãããããããããçè§£ããããåœ¢ã§æ€èšããŸãã
äžè¬çãªã¹ããŒã
座æšããã空éããå¥ã®ç©ºéã«å€æããããã«ãããã€ãã®å€æè¡åã䜿çšããŸããããã®äžã§æãéèŠãªã®ã¯Model ã Viewããã³Projectionè¡åã§ãã é ç¹ã®åº§æšã¯ããŒã«ã«ç©ºéã§ããŒã«ã«åº§æšãšããŠå§ãŸãããã®åŸã¯ãŒã«ã座æšã«å€æãããæ¬¡ã«ãã¥ãŒã®åº§æš ã ã¯ãªããã³ã°ã«å€æãããæåŸã«ãã¹ãŠãç»é¢åº§æšã§çµäºããŸã ã æ¬¡ã®å³ã¯ããã®ã·ãŒã±ã³ã¹ãšå倿ã®åäœã瀺ããŠããŸãã

- ããŒã«ã«åº§æšã¯ãªããžã§ã¯ãã®åº§æšã§ããããªããžã§ã¯ãèªäœãå§ãŸãå Žæã«ããåç
§ãã€ã³ããåºæºã«ããŠæž¬å®ãããŸã
- 次ã®ã¹ãããã§ã¯ãããŒã«ã«åº§æšãã¯ãŒã«ã空éã®åº§æšã«å€æãããŸããããã¯ãæå³ã§ã¯ããã倧ããªäžçã®åº§æšã§ãã ãããã®åº§æšã¯ãã¯ãŒã«ãåºæºç¹ã«é¢é£ããŠæž¬å®ãããã¯ãŒââã«ã空éã«ããä»ã®ãã¹ãŠã®ãªããžã§ã¯ãã«å
±éã§ã
- ããã«ãåé ç¹ãã«ã¡ã©ãŸãã¯èŠ³æž¬è
ã®èŠç¹ããèŠãããã«èŠããããã«ãã¯ãŒã«ã座æšããã¥ãŒç©ºéã®åº§æšã«å€æããŸã
- 座æšããã¥ãŒç©ºéã«å€æãããããã¯ãªããã³ã°åº§æšã«æåœ±ããŸãã ã¯ãªããã³ã°åº§æšã¯-1.0ã1.0ã®ç¯å²ã§æå¹ã§ãããç»é¢ã«è¡šç€ºãããé ç¹ã決å®ããŸãã
- æåŸã«ããã¥ãŒããŒãã®å€æãšåŒã°ãã倿ããã»ã¹ã§ã
ã¯ãªããã³ã°åº§æšã-1.0ãã1.0ã«å€æãã glViewport颿°ã§æå®ãããç»é¢åº§æšã®é åã«å€æããŸãã
ãã®ãã¹ãŠã®åŸãåä¿¡ãã座æšã¯ã©ã¹ã¿ã©ã€ã¶ãŒã«éä¿¡ããããããããã©ã°ã¡ã³ãã«å€æãããŸãã
ãããããå座æšç©ºéã®çšéãå°ãçè§£ããŠããã§ãããã é ç¹ããããã®ç°ãªã座æšç©ºéã«å€æããçç±ã¯ãç¹å®ã®åº§æšç³»ã§äžéšã®æäœãããçè§£å¯èœãŸãã¯åçŽã«ãªãããã§ãã
ããšãã°ãããŒã«ã«ç©ºéã§ãªããžã§ã¯ãã倿Žããã®ãæãåççã§ãããä»ã®ãªããžã§ã¯ãã®äœçœ®ãèæ
®ããæäœã®èšç®ã¯ãã¯ãŒã«ã座æšãªã©ã§è¡ãã®ãæé©ã§ãã å¿
èŠã«å¿ããŠã1ã€ã®å€æè¡åãæå®ã§ããŸããããã«ãããããŒã«ã«ç©ºéããã¯ãªããã³ã°ç©ºéã«1ã¹ãããã§åº§æšã倿ãããŸãããããã«ããæè»æ§ã倱ãããŸãã
以äžã§ã¯ãå座æšç³»ã«ã€ããŠè©³ãã説æããŸãã
ããŒã«ã«ã¹ããŒã¹
ããŒã«ã«ç©ºéã¯ããªããžã§ã¯ãã«å¯ŸããŠããŒã«ã«ãªåº§æšç³»ã§ãã ãªããžã§ã¯ãèªäœãšåããã€ã³ãã§éå§ããŸãã ã¢ããªã³ã°ãœãããŠã§ã¢ããã±ãŒãžã§Blenderã«äŒŒããã¥ãŒããäœæãããšæ³åããŠãã ããã ã¢ããªã±ãŒã·ã§ã³ã®åº§æšå
ã®ãã¥ãŒããå¥ã®å Žæã«ããå Žåã§ãããã¥ãŒãã®éå§ç¹ã¯ããããïŒ0,0,0ïŒã«ãããŸãã äœæãããã¹ãŠã®ã¢ãã«ã«éå§ç¹ïŒ0,0,0ïŒãããå¯èœæ§ããããŸãã ãããã£ãŠãã¢ãã«ã®ãã¹ãŠã®é ç¹ã¯ããŒã«ã«ç©ºéã«ãããŸãããã¹ãŠã®åº§æšã¯ãªããžã§ã¯ãã«å¯ŸããŠããŒã«ã«ã§ãã
䜿çšããã³ã³ããã®é ç¹ã¯ã-0.5ãã0.5ã®éã®åº§æšã䜿çšããŠæ±ºå®ãããéå§ç¹ã¯0.0ã§ãã ãããã¯ããŒã«ã«åº§æšã§ãã
ã¯ãŒã«ãã¹ããŒã¹
ãã¹ãŠã®ãªããžã§ã¯ããã¢ããªã±ãŒã·ã§ã³ã«çŽæ¥ã€ã³ããŒãããå Žåããããã¯ããããã¯ãŒã«ãåç
§ãã€ã³ãïŒ0,0,0ïŒã®è¿ãã§äºãã®äžã«ç©ã¿äžããããŸãããããã¯æã¿ã©ããã§ã¯ãããŸããã ãã倧ããªã¹ããŒã¹ã«é
眮ããã«ã¯ãåãªããžã§ã¯ãã®äœçœ®ã決å®ããå¿
èŠããããŸãã ã¯ãŒã«ã空éã®åº§æšãããã¯ãŸãã«ãã®ååã®ãšããã§ãïŒïŒã²ãŒã ïŒã¯ãŒã«ãã«å¯Ÿãããã¹ãŠã®é ç¹ã®åº§æšã ããã¯ã空éã«ååžããããã«ïŒãããŠã§ããã°çŸå®çã«ïŒãªããžã§ã¯ãã倿ãããã®ãèŠãã座æšç©ºéã§ãã ãªããžã§ã¯ãã®åº§æšã¯ãããŒã«ã«ç©ºéããã¯ãŒã«ã空éã«å€æãããŸãã ããã¯ã ã¢ãã«ãããªãã¯ã¹ãä»ããŠè¡ãããŸãã
ã¢ãã«ãããªãã¯ã¹ã¯ããªããžã§ã¯ããç§»åãã¹ã±ãŒãªã³ã°ãããã³/ãŸãã¯å転ããŠããªããžã§ã¯ããååšããã¹ãäœçœ®/æ¹åã§ã¯ãŒã«ã空éã«é
眮ãããããªãã¯ã¹ã§ãã ããã¯ãæ¡å€§ãããïŒããŒã«ã«ã¹ããŒã¹ã§ã¯å€§ããããïŒå»ºç©ãéå€ã«ç§»åããYè»žã«æ²¿ã£ãŠãããã«å·Šã«æ²ãã£ãŠé£æ¥ããå®¶ã«ãŽã£ããåã建ç©ã®å€åœ¢ãšããŠæ³åããŠãã ããã ã³ã³ãããã·ãŒã³å
ã§ç§»åããåã®ã¬ãã¹ã³ã®ãããªãã¯ã¹ããäžçš®ã®ã¢ãã«ãããªãã¯ã¹ãšããŠèªèããããšãã§ããŸãã ãã®å©ããåããŠãã·ãŒã³/äžçã®ããŸããŸãªå Žæã«é
眮ããããã«ãã³ã³ããã®ããŒã«ã«åº§æšãåéèšããŸããã
衚瀺ã¹ããŒã¹
ãã¥ãŒã¹ããŒã¹ã¯ãéåžžOpenGL ã«ã¡ã©ãšåŒã°ãããã®ã§ãïŒ ã«ã¡ã©ã¹ããŒã¹ãŸãã¯ãªãã¶ãŒã㌠ã¹ããŒã¹ãšãåŒã°ããŸã ïŒã ãã¥ãŒç©ºéã¯ãäžç座æšããŠãŒã¶ãŒãæ£é¢ããèŠãŠããããã«èŠãã座æšã«å€æããçµæã§ãã ãããã£ãŠããã¥ãŒã¹ããŒã¹ã¯ãã«ã¡ã©ã®ãã¥ãŒãã¡ã€ã³ããŒãéããŠèŠããã¹ããŒã¹ã§ãã ããã¯éåžžãäžéšã®ãªããžã§ã¯ããã«ã¡ã©ã®åã«ãããããªã·ãŒã³ã®ã·ãããšå転ã®çµã¿åããã«ãã£ãŠå®çŸãããŸãã ãããã®çµåããã倿ã¯ãéåžžãã¯ãŒã«ã座æšããã¥ãŒç©ºéã«å€æãããã¥ãŒãããªãã¯ã¹ã«æ ŒçŽãããŸãã æ¬¡ã®ã¬ãã¹ã³ã§ã¯ããã®ãããªãã¥ãŒãããªãã¯ã¹ãäœæããŠã«ã¡ã©ãã·ãã¥ã¬ãŒãããæ¹æ³ã«ã€ããŠåºç¯å²ã«èª¬æããŸãã
ã¯ãªããã³ã°ã¹ããŒã¹
é ç¹ã·ã§ãŒããŒãçµäºãããšãOpenGLã¯ãã¹ãŠã®åº§æšãç¹å®ã®ç¯å²å
ã«ããããã®å¢çãè¶
ãããã¹ãŠã®ãã®ãåæãããããšãäºæããŸãã ã«ãããªã座æšã¯ç Žæ£ãããæ®ãã®åº§æšã¯ç»é¢äžã«è¡šç€ºããããã©ã°ã¡ã³ãã«ãªããŸãã ãããã¯ãªããã³ã°ã¹ããŒã¹ã®ååã®ç±æ¥ã§ãã
[-1.0ã1.0]ã®ç¯å²ã®å€ã§ãã¹ãŠã®å¯èŠåº§æšãèšå®ããããšã¯å®éã«ã¯çŽæçã§ã¯ãªããããäœæ¥ã®ããã«ç¬èªã®åº§æšã»ãããå®çŸ©ããOpenGLãæåŸ
ããããã«NDCã«å€æããŸãã
ãã¥ãŒç©ºéããã¯ãªããã³ã°ç©ºéã«åº§æšã倿ããããã«ãããšãã°åè»žã«æ²¿ã£ãŠ-1000ãã1000ãŸã§ã®åº§æšã®ç¯å²ãå®çŸ©ãããããããå°åœ±è¡åãå®çŸ©ããŸãã å°åœ±è¡åã¯ããã®ç¯å²ã®åº§æšãããã€ã¹ã®æ£èŠåããã座æšïŒ-1.0ã1.0ïŒã«å€æããŸãã æå®ãããééå€ã®ãã¹ãŠã®åº§æšã¯ãšãªã¢[-1.0ã1.0]ã«è©²åœããªããããåãåãããŸãã å°åœ±è¡åã«ãã£ãŠèšå®ãããç¯å²ã§ã¯ã座æšïŒ1250ã500ã750ïŒã¯è¡šç€ºãããŸãããXã³ã³ããŒãã³ããå¢çãè¶
ãããããNDCã§1.0ãè¶
ããå€ã«å€æããããããã£ãŠé ç¹ãã¯ãªãããããããã§ãã ã
äžè§åœ¢ãªã©ã®ããªããã£ãå
šäœã§ã¯ãªãããã®äžéšã®ã¿ãã«ãããªãããªã¥ãŒã ã®å€åŽã«ããå ŽåãOpenGLã¯å®å
šã«ã«ãããªãç¯å²ã«ãã1ã€ä»¥äžã®äžè§åœ¢ã®åœ¢ã§ãã®äžè§åœ¢ãåæ§ç¯ããããšã«æ³šæããŠãã ããã
æåœ±è¡åã«ãã£ãŠå®çŸ©ããããã®è¡šç€ºããªã¥ãŒã ã¯ãéå°ãã©ããããšåŒã°ãããã®ãã©ãããã«å
¥ãå座æšã¯ãŠãŒã¶ãŒã®ç»é¢ã«è¡šç€ºãããŸãã ç¹å®ã®ç¯å²ã®åº§æšãããã€ã¹ã®æ£èŠåããã座æšïŒNDCïŒã«å€æããããã»ã¹å
šäœã¯ããããžã§ã¯ã·ã§ã³ãããªãã¯ã¹ã3D座æšãããã€ã¹ã®åçŽãª2Dã«å€æãããæ£èŠåããã座æšã«æåœ±ããããããããžã§ã¯ã·ã§ã³ãšåŒã°ããŸãã
ãã¹ãŠã®é ç¹ã®åº§æšãã¯ãªããã³ã°ã¹ããŒã¹ã«è»¢éããããšããã«ã ããŒã¹ãã¯ãã£ãåå²ãšåŒã°ããæçµæäœãå®è¡ãããŸãã ãã®äžã§ãé ç¹äœçœ®ãã¯ãã«ã®xãyãzæåããã¯ãã«wã®å次æåã§é€ç®ããŸãã ããŒã¹ãã¯ãã£ãé€ç®ã¯ãã¯ãªããã³ã°ã¹ããŒã¹ã®4D座æšãããã€ã¹ã®3次å
ã®æ£èŠåããã座æšã«å€æããŸãã ãã®ã¹ãããã¯ãåé ç¹ã·ã§ãŒããŒã®å®äºåŸã«èªåçã«å®è¡ãããŸãã
ãã®æ®µéã®åŸãåä¿¡ãã座æšïŒ glViewportèšå®ã䜿çšïŒã¯ç»é¢åº§æšã«è¡šç€ºããããã©ã°ã¡ã³ãã«å€ãããŸãã
æåœ±è¡åã¯ããã¥ãŒåº§æšãã¯ãªããã³ã°åº§æšã«å€æãã2ã€ã®ç°ãªã圢ç¶ããšãããšãã§ããŸããå圢ç¶ã¯ãç¬èªã®ç¹å¥ãªåé ãã©ããããå®çŸ©ããŸãã æ£å°æåœ±è¡åãŸãã¯ããŒã¹ãã¯ãã£ããäœæã§ããŸãã
æ£æåœ±
æ£æåœ±å³æ³ã¯ãå¹³è¡å蟺圢ã®åœ¢ã§åãæšãŠããããã©ããããå®çŸ©ããŸããå¹³è¡å蟺圢ã¯ãããªã¥ãŒã ã®å€åŽã®ãã¹ãŠã®é ç¹ãã¯ãªãããããã¯ãªããã³ã°ã¹ããŒã¹ã§ãã æ£å°æåœ±è¡åãäœæãããšãã衚瀺ãããã¯ãªããã³ã°ãã©ãããã®å¹
ãé«ããããã³é·ããæå®ããŸãã æåœ±è¡åã«ãã£ãŠã¯ãªããã³ã°ã¹ããŒã¹ã«å€æãããåŸããã©ãããã§å²ãŸããããªã¥ãŒã ã«å«ãŸãããã¹ãŠã®åº§æšã¯ã¯ãªãããããŸããã åãæšãŠããããã©ãããã¯ãã³ã³ããã®ããã«èŠããŸãã

è§éå°ã¯ãå¯èŠåº§æšã®é åãå®çŸ©ããå¹
ãé«ãã è¿æ¥ããã³é æ¹ã®å¹³é¢ã«ãã£ãŠå®çŸ©ãããŸãã ãã¢ãã¬ãŒã³ã®åã«ãã座æšã¯ããªã¢ãã¬ãŒã³ã®åŸãã«ãã座æšãšåãããã«åãåãããŸãã æ£æåœ±ã®è§éå°ã¯ãããã«å«ãŸãã座æšãããã€ã¹ã®æ£èŠåããã座æšã«çŽæ¥å€æãããã¯ãã«ã®wã³ã³ããŒãã³ãã¯äœ¿çšãããŸããã wã³ã³ããŒãã³ãã1.0ã®å Žåãé è¿æ³ã«ããåå²ã¯åº§æšå€ã倿ŽããŸããã
æ£å°æåœ±è¡åãäœæããã«ã¯ã glm :: orthoãšåŒã°ããçµã¿èŸŒã¿GLMã©ã€ãã©ãªé¢æ°ã䜿çšããŸãã
glm::ortho(0.0f, 800.0f, 0.0f, 600.0f, 0.1f, 100.0f );
æåã®2ã€ã®ãã©ã¡ãŒã¿ãŒã¯ãåãæšãŠããããã©ãããã®å·Šå³ã®åº§æšã決å®ãã3çªç®ãš4çªç®ã®ãã©ã¡ãŒã¿ãŒã¯ããã©ãããã®äžéãšäžéãæå®ããŸãã ãããã®4ã€ã®ãã€ã³ãã¯ããã¢ãã¬ãŒã³ãšãã¡ãŒãã¬ãŒã³ã®å¯žæ³ãèšå®ãã5çªç®ãš6çªç®ã®ãã©ã¡ãŒã¿ãŒã¯ãããã®éã®è·é¢ã瀺ããŸãã ãã®ç¹å®ã®æåœ±è¡åã¯ãxãyãããã³zã®å€ã®ç¯å²ã«å
¥ããã¹ãŠã®åº§æšãããã€ã¹ã®æ£èŠåããã座æšã«å€æããŸãã
æ£å°æåœ±è¡åã¯ã座æšã§ãã2次å
å¹³é¢ïŒãã£ã¹ãã¬ã€ïŒã«çŽæ¥è¡šç€ºãããŸãããå®éã«ã¯ã éèŠå³ãèæ
®ããŠããªããããçŽæ¥æåœ±ã¯éçŸå®çãªçµæããããããŸãã ããã«ããã éèŠæåœ±è¡åãä¿®æ£ãããŸãã
éèŠæåœ±
çŸå®äžçãèŠãããšãããã°ãé ãã«ãããªããžã§ã¯ããã¯ããã«å°ããèŠããããšã«ããããæ°ã¥ããã§ãããã ç§ãã¡ã¯ãã®å¥åŠãªå¹æã®èŠç¹ãåŒã³åºããŸã ã æ¬¡ã®å³ã«ç€ºãããã«ãç¡éã®é«ééè·¯ãŸãã¯ééã®çµç¹ãèŠããšãç¹ã«ç®ç«ã¡ãŸãã

ã芧ã®ããã«ãèŠç¹ããèŠããšãç·ãããåæããã»ã©ãç·ã¯ããé ãã«ããããã«èŠããŸãã ããã¯ãŸãã«ãéèŠæåœ±ãã·ãã¥ã¬ãŒãããããšããŠãã广ã§ãããéèŠæåœ±ã®ãããªãã¯ã¹ãéããŠéæãããŸãã å°åœ±è¡åã¯ãåãæšãŠããããã©ãããã®æå®ãããç¯å²ãã¯ãªããã³ã°ã¹ããŒã¹ã«ãããã³ã°ããåæã«ãé ç¹ã芳枬è
ããé ãããã»ã©ãã®wå€ã倧ãããªãããã«åé ç¹ã®wã³ã³ããŒãã³ããæäœããŸãã 座æšãã¯ãªããã³ã°ã¹ããŒã¹ã«å€æããåŸããããã¯ãã¹ãŠ-wããwã®ç¯å²ã«å
¥ããŸãïŒãã®ç¯å²å€ã®é ç¹ã¯ã¯ãªãããããŸãïŒã OpenGLã§ã¯ãé ç¹ã·ã§ãŒããŒã®æçµåºåã-1.0ã1.0ã®åº§æšã§ããããšãå¿
èŠã§ãã ãããã£ãŠã座æšãã¯ãªããã³ã°ç©ºéã«ããå Žåãé è¿æ³ã®åå²ããããã«é©çšãããŸãã

é ç¹åº§æšã®åã³ã³ããŒãã³ãã¯ããã¥ãŒã¢ãŒããã®è·é¢ã«æ¯äŸããŠåº§æšå€ãæžããç¬èªã®wã³ã³ããŒãã³ãã«åå²ãããŸãã ããã¯ãéèŠæåœ±ã«åœ¹ç«ã€ãããwã³ã³ããŒãã³ãã®éèŠæ§ã®ãã1ã€ã®çç±ã§ãã ãã®åŸã«ååŸããã座æšã¯ãããã€ã¹ã®æ£èŠåããã空éã«ãããŸãã çŽäº€å°åœ±è¡åãã©ã®ããã«èšç®ãããããçè§£ããããšã«èå³ãããå ŽåïŒãããŠæ°åŠãæããããšã¯ãããŸããïŒãSongho ã«ãããã®çŽ æŽãããèšäºããå§ãããŸãã
GLMã©ã€ãã©ãªã®éèŠæåœ±è¡åã¯ã次ã®ããã«äœæã§ããŸãã
glm::mat4 proj = glm::perspective( 45.0f, (float)width/(float)height, 0.1f, 100.0f);
glm ::ããŒã¹ãã¯ãã£ãã¯ãç®ã«èŠããã¹ããŒã¹ãå®çŸ©ããåãæšãŠããããã©ããããäœæãããã®å€åŽã«ãããã¯ãªããã³ã°ã¹ããŒã¹ã®ããªã¥ãŒã ã«å
¥ããªããã®ã¯ãã¹ãŠåãåãããŸãã äºæ³ãããåãæšãŠããããã©ãããã¯ãå°åœ¢ã®ããã¯ã¹ãšããŠè¡šãããšãã§ããåå
éšåº§æšã¯ã¯ãªããã³ã°ã¹ããŒã¹å
ã®ãã€ã³ãã«ãããã³ã°ãããŸãã ããŒã¹ãã¯ãã£ããã©ã³ã±ãŒããã©ãããã®ç»åã以äžã«ç€ºããŸãã

æåã®ãã©ã¡ãŒã¿ãŒã¯ãã èŠé ããæå³ããfov ïŒèŠéïŒã®å€ãèšå®ããå¯èŠé åã®å€§ãããæ±ºå®ããŸãã çŸå®çãªè¡šçŸã®ããã«ããã®ãã©ã¡ãŒã¿ãŒã¯éåžž45.0fã«èšå®ãããŸãããåæ§ã®éåœã®ã¹ã¿ã€ã«ãåŸãããã«ã倧ããªå€ãèšå®ããããšãã§ããŸãã 2çªç®ã®ãã©ã¡ãŒã¿ãŒã¯ããã¥ãŒããŒãã®å¹
ãé«ãã§å²ãããšã«ãã£ãŠèšç®ãããã¢ã¹ãã¯ãæ¯ãèšå®ããŸãã 3çªç®ãš4çªç®ã®ãã©ã¡ãŒã¿ãŒã¯ãè§éå°ã®è¿ãã®å¹³é¢ãšé ãã®å¹³é¢ãå®çŸ©ããŸãã éåžžãæãè¿ãè·é¢ã0.1fã«èšå®ããæãé ãè·é¢ã100.0fã«èšå®ããŸãã ãã¢ãã¬ãŒã³ãšãã¡ãŒãã¬ãŒã³ã®éã«äœçœ®ããåãæšãŠããããã©ãããã®ããªã¥ãŒã å
ã«ãããã¹ãŠã®é ç¹ãèŠèŠåãããŸãã
æåœ±è¡åã®ãã¢ãã¬ãŒã³ãŸã§ã®è·é¢ã倧ãããããšïŒ10.0fãªã©ïŒãOpenGLã¯ã«ã¡ã©ã®é£ã«ãããã¹ãŠã®åº§æšïŒ0.0ã10.0fïŒãåãåããŸããããã«ããããããªã²ãŒã ã§ããªãã¿ã®èŠèŠå¹æãåŸãããŸããè¿ã¥ããããå Žåã¯ãäžéšã®ãªããžã§ã¯ããéãããŠèŠãŸãã
çŽäº€æåœ±ã䜿çšããå Žåãåé ç¹åº§æšã¯ãä»®æ³ã®é è¿æ³ã«ããåå²ãªãã§ã¯ãªããã³ã°ç©ºéã«çŽæ¥ããããããŸãïŒé è¿æ³ã«ããåå²ã¯å®è¡ãããŸãããwã³ã³ããŒãã³ãã¯çµæã«åœ±é¿ãäžããªãããïŒ1ã®ãŸãŸïŒã广ã¯ãããŸããïŒã æ£å°æåœ±ã§ã¯é è¿æ³ãèæ
®ãããªããããããã«é
眮ããããªããžã§ã¯ãã¯å°ããèŠãããå¥åŠãªèŠèŠçå°è±¡ãäžããŸãã ãã®ãããæ£å°æåœ±æ³ã¯ãäž»ã«2Dã¬ã³ããªã³ã°ãã建ç¯ãå·¥åŠã®ããŸããŸãªçšéã«äœ¿çšãããŸãããé è¿æ³ã«ããæªã¿ããªãããšãæãŸããŸãã Blender for 3Dã¢ããªã³ã°ãªã©ã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãåãªããžã§ã¯ãã®æž¬å®å€ãšæ¯çãããæ£ç¢ºã«è¡šç€ºãããããã¢ããªã³ã°äžã«æ£æåœ±ã䜿çšãããããšããããŸãã 以äžã¯ãBlenderã®äž¡æ¹ã®æåœ±æ¹æ³ã®æ¯èŒã§ãã

éèŠæåœ±ã§ã¯ãåé€ãããé ç¹ãã¯ããã«é ããªãããšãããããŸãããæ£æåœ±ã§ã¯ãé ç¹ã®åé€é床ã¯åãã§ããã芳枬è
ãŸã§ã®è·é¢ã«äŸåããŸããã
ãã¹ãŠããŸãšãã
äžèšã®åã¹ãããïŒã¢ãã«ããã¥ãŒãæåœ±ãããªãã¯ã¹ïŒã®å€æãããªãã¯ã¹ãäœæããŸãã é ç¹åº§æšã¯ã次ã®ããã«ã¯ãªããã³ã°ã¹ããŒã¹ã®åº§æšã«å€æãããŸãã

è¡åã®ä¹ç®ã®é åºãéã«ãªã£ãŠããããšã«æ³šæããŠãã ããïŒè¡åã®ä¹ç®ã¯å³ããå·Šã«èªã¿åããªããã°ãªããªãããšã«æ³šæããŠãã ããïŒã çµæã®é ç¹åº§æšã¯ãçµã¿èŸŒã¿å€æ°gl_Positionã䜿çšããŠé ç¹ã·ã§ãŒããŒã§å²ãåœãŠãå¿
èŠããããŸãããã®åŸãOpenGLã¯èªåçã«é è¿æ³ã®åå²ãšã¯ãªããã³ã°ãå®è¡ããŸãã
ããã§äœïŒ
é ç¹ã·ã§ãŒããŒåºåã®åº§æšã¯ã¯ãªããã³ã°ç©ºéå
ã«ããå¿
èŠããããŸããããã¯ã倿ãããªãã¯ã¹ã®å©ããåããŠéæãããã®ã§ãã OpenGLã¯ãã¯ãªããã³ã°ã¹ããŒã¹ã®åº§æšã®éèŠåå²ãå®è¡ããŠãããããæ£èŠåãããããã€ã¹åº§æšã«å€æããŸã
次ã«ãOpenGLã¯glViewPortã®ãã©ã¡ãŒã¿ãŒã䜿çšããŠãããã€ã¹ã®æ£èŠåããã座æšããå座æšãç»é¢äžã®ãã€ã³ãã«å¯Ÿå¿ããç»é¢åº§æšã«ãããã³ã°ããŸãïŒãã®å Žåãããã¯800x600ã®é åã§ãïŒã ãã®ããã»ã¹ã¯ãã¥ãŒããŒã倿ãšåŒã°ããŸãã
ãã®ãããã¯ãçè§£ããã®ã¯é£ããã®ã§ãåã¹ããŒã¹ãäœã«äœ¿çšãããŠããã®ããŸã ããããããªãå Žåã¯å¿é
ããå¿
èŠã¯ãããŸããã
以äžã«ããããã®åº§æšç©ºéã广çã«äœ¿çšããæ¹æ³ã瀺ããŸããä»åŸã®ã¬ãã¹ã³ã§ã¯ååãªäŸããããŸãã
3Dã«ç§»å
3D座æšã2D座æšã«å€æããæ¹æ³ãããã£ãã®ã§ããããŸã§ã«ç€ºããæ¬ é¥ã®ãã2Då¹³é¢ã§ã¯ãªãããªããžã§ã¯ããå®éã®3Dãªããžã§ã¯ããšããŠè¡šç€ºãå§ããããšãã§ããŸãã
3Dã§ã®æç»ãéå§ããã«ã¯ãæåã«ã¢ãã«ãããªãã¯ã¹ãäœæããŸãã ã¢ãã«ãããªãã¯ã¹ã¯ããªããžã§ã¯ãã®ãã¹ãŠã®é ç¹ãã°ããŒãã«ã¯ãŒã«ã空éã«å€æããããã«é©çšããã·ãããã¹ã±ãŒãªã³ã°ãããã³/ãŸãã¯åè»¢ã§æ§æãããŸãã Xè»žã«æ²¿ã£ãŠå転ãããŠãå¹³é¢ãåºã«æšªããã£ãŠããããã«èŠããããã«ããŠãå¹³é¢ãå°ã倿ŽããŸãããã ã¢ãã«ã®ãããªãã¯ã¹ã¯æ¬¡ã®ããã«ãªããŸãã
glm::mat4 model; model = glm::rotate(model, -55.0f, glm::vec3(1.0f, 0.0f, 0.0f);
é ç¹ã®åº§æšã«ãã®ã¢ãã«ã®ãããªãã¯ã¹ãæããŠãããããã¯ãŒã«ã座æšã«å€æããŸãã åºã«æšªããã£ãŠããé£è¡æ©ã¯ããã®ããã«äžç空éã®é£è¡æ©ã衚ããŠããŸãã
次ã«ããã¥ãŒãããªãã¯ã¹ãäœæããå¿
èŠããããŸãã ãªããžã§ã¯ãã衚瀺ãããããã«ããã«ã¯ãã·ãŒã³å
ãå°ãæ»ãå¿
èŠããããŸãïŒã¯ãŒã«ã空éã§ã®èŠ³æž¬è
ã®èŠç¹ã¯åç¹ïŒ0,0,0ïŒã«ããããïŒã ã·ãŒã³å
ãç§»åããã«ã¯ã次ã®ããšãèæ
®ããŠãã ããã
ã«ã¡ã©ãåŸæ¹ã«ç§»åããããšã¯ãã·ãŒã³å
šäœãåæ¹ã«ç§»åããããšãšåãã§ãã
ããããŸãã«ãã¥ãŒãããªãã¯ã¹ã®æ©èœã§ããã·ãŒã³å
šäœããã«ã¡ã©ãç§»åãããæ¹åãšåå¯Ÿã®æ¹åã«ç§»åããŸãã åŸæ¹ã«ç§»åããå¿
èŠããããOpenGLãæ£ãã座æšç³»ã䜿çšãããããzè»žã®æ£ã®æ¹åã«ç§»åããå¿
èŠããããŸãã ãããè¡ãã«ã¯ãã·ãŒã³å
šäœãz軞ã®è² ã®åŽã«ã·ããããŸãã ããã¯ãç§ãã¡ãåŸéããŠãããããªå°è±¡ãäžããŸãã
æ£ãã座æšç³»
æ
£äŸã«ãããOpenGLã¯æ£ãã座æšç³»ã§ãã , X , Y , Z (. ). , , Z . :

, , :
, X, â Y, z. , , Z . DirectX. , OpenGL ( ).
. :
glm::mat4 view;
, â . , :
glm::mat4 projection; projection = glm::perspective(45.0f, screenWidth / screenHeight, 0.1f, 100.0f);
GLM. fov 45 , GLM fov , glm::radians(45.0).
, , . uniform :
#version 330 core layout (location = 0) in vec3 position; ... uniform mat4 model; uniform mat4 view; uniform mat4 projection; void main() {
( , ):
GLint modelLoc = glGetUniformLocation(ourShader.Program, "model"); glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model)); ...
, , , :
, :

3D-, - . , , .
3D
2D-, 3D-, 2D- 3D-.
36 (6 * 2 * 3 ). 36 , . , , .
«» , glVertexAttribPointer:
:
model = glm::rotate(model, (GLfloat)glfwGetTime() * 50.0f, glm::vec3(0.5f, 1.0f, 0.0f));
glDrawArrays, 36 .
glDrawArrays(GL_TRIANGLES, 0, 36);
- :
, - . . , , OpenGL --, , , . - , .
, OpenGL Z- , OpenGL , , . Z-, OpenGL .
Z-
OpenGL Z-, . GLFW ( , ). ( z-) , , OpenGL Z-, , . OpenGL .
, , OpenGL , , - . glEnable . glEnable glDisable / OpenGL. OpenGL /, /. , GL_DEPTH_TEST :
glEnable(GL_DEPTH_TEST);
, ( ). , glClear GL_DEPTH_BUFFER_BIT :
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
, OpenGL :
以äžã§ãïŒ , , . .
!
, 10 . , . , , . , â , .
-, , . 10 glm::vec3:
glm::vec3 cubePositions[] = { glm::vec3( 0.0f, 0.0f, 0.0f), glm::vec3( 2.0f, 5.0f, -15.0f), glm::vec3(-1.5f, -2.2f, -2.5f), glm::vec3(-3.8f, -2.0f, -12.3f), glm::vec3( 2.4f, -0.4f, -3.5f), glm::vec3(-1.7f, 3.0f, -7.5f), glm::vec3( 1.3f, -2.0f, -2.5f), glm::vec3( 1.5f, 2.0f, -2.5f), glm::vec3( 1.5f, 0.2f, -1.5f), glm::vec3(-1.3f, 1.0f, -1.5f) };
, glDrawArrays 10 , . , 10 . , .
glBindVertexArray(VAO); for(GLuint i = 0; i < 10; i++) { glm::mat4 model; model = glm::translate(model, cubePositions[i]); GLfloat angle = 20.0f * i; model = glm::rotate(model, angle, glm::vec3(1.0f, 0.3f, 0.5f)); glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model)); glDrawArrays(GL_TRIANGLES, 0, 36); } glBindVertexArray(0);
, 10 . , :

ãããïŒ , . , , .
æŒç¿
- , GLM projection FOV .
, , . - , , . .
- 3- ( 1), , :
.