éåžžã«å€ãã®å Žåãããã2ã€ã®
APIã«ã€ããŠããŸããŸãªèª€è§£ããã
ãŸã ã
ãã®èšäºã§ã¯ãéçºè
ãšãšã³ããŠãŒã¶ãŒã®äž¡æ¹ã«ç¥ãããã¹ãåºæ¬çãªäºå®ãå
¬éããããšããŸããã
ãããã¯ã¯éåžžã«å
šäœçãªã®ã§ãããŒã³ãã§ããã ãäžç«ã«ä¿ã€ããã«ããŸããã
é³¥ç°å³
äž¡æ¹ã®APIã¯ã3Dã°ã©ãã£ãã¯ã¹ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³æ©èœãžã®ã¢ã¯ã»ã¹ãæäŸããŸãã
Direct3Dã¯ãWindowså°çšã«äœæãããMicrosoftã®ç¬èªéçºã§ãã çŸåšãMicrosoft Xboxã§ã䜿çšãããŠããŸãã ä»ã®ãã©ãããã©ãŒã ã§ã¯äœ¿çšã§ããŸããïŒWineããã³ä»®æ³åã«ãã£ãŠæäŸãããAPIã®ãšãã¥ã¬ãŒã·ã§ã³ãèæ
®ããªãå ŽåïŒã
OpenGLã¯ãã³ãã¥ããã£ã®åå ãåŸãŠéå¶å©å£äœ
Khronos Groupã«ãã£ãŠéçºããããªãŒãã³ã¹ã¿ã³ããŒãã§ãã äž»èŠãªãã¹ãŠã®
GPUã¡ãŒã«ãŒïŒnVidiaãAMDãIntelïŒã¯ãäœããã®åœ¢ã§OpenGLã«åœ±é¿ãäžããŸããã Direct3Dãšã¯ç°ãªããéåžžã«å€ãã®ãã©ãããã©ãŒã ã§äœ¿çšã§ããŸãã ç¹ã«ãOpenGLã¯Linuxããã³Mac OSäžã®GPUãšå¯Ÿè©±ããããã®ã¡ã€ã³APIã§ãã
APIãå€éšãã®æè¡çãªéã
Direct3Dã¯
COMãã¯ãããžãŒã«åºã¥ããŠããŸãã åºæ¬çã«ãCOMã¯ã³ã³ããŒãã³ãã®ãã€ããªè¡šçŸã®æšæºã§ãã ãåãã®ããã«ãçŽç²ãªC ++ã®ã¯ã©ã¹ã¯ãæšæºåããããã€ããªè¡šçŸãæããªããããä»ã®ããã°ã©ãã³ã°èšèªããã¯äœ¿çšã§ããŸããã ç¹ã«ãåã³ã³ãã€ã©ã¯ã
ååã
修食ããç¬èªã®æ¹æ³ã䜿çšã
ãŸã ã ãã ããCOMã䜿çšãããšãããããµããŒãããä»»æã®èšèªãããªããžã§ã¯ãæåã®æŠå¿µãæäœã§ããŸãã COMã¯Windowsåºæã®ãã¯ãããžã§ããããŸãïŒWindowsåºæã®ãã®ãã¬ãžã¹ããªãšããŠäœ¿çšããŸãïŒã
Direct3Däžã®ã¢ããªã±ãŒã·ã§ã³ã¯ããªããžã§ã¯ãã€ã³ã¿ãŒãã§ã€ã¹ãžã®ãã€ã³ã¿ãŒã䜿çšããŸãã ãªããžã§ã¯ãã®æäœã¯ããã®ã€ã³ã¿ãŒãã§ã€ã¹ã®ã¡ãœãããåŒã³åºãããšã«ãã£ãŠå®è¡ãããŸãã ããšãã°ãããããããã€ã¹ïŒDirect3Dã®ããã€ã¹ã¯ç¹å®ã®ãŠã£ã³ããŠã®å®è¡ã³ã³ããã¹ãïŒã®ã€ã³ã¿ãŒãã§ã€ã¹ã«ã¯ãååïŒDirect3D 9ã®äŸïŒIDirect3DDevice9ããã¯ã¹ãã£ãªããžã§ã¯ã-IDirect3DTexture9ãªã©ããããŸãã ãªããžã§ã¯ãã®äœæã¯ãIDirect3DDevice9ã€ã³ã¿ãŒãã§ã€ã¹ã®ã¡ãœããã®åŒã³åºããšããŠçºçããŸããããšãã°ããã¯ã¹ãã£ã®å ŽåãIDirect3DDevice9 :: CreateTextureã«ãªããŸãã
Direct3D 10ã«ã¯å€§ããªå€åãèŠãããŸããã Direct3D 10ã¯ãDirect3D 9ãšäžäœäºææ§ããããŸããã ããã°ã©ã ãæ°ããAPIã«è»¢éããã«ã¯ã
ã¬ã³ããªã³ã°ã«é¢é£ãããã¹ãŠã®ã³ãŒããæžãæããå¿
èŠããã
ãŸã ã 以äžã®Direct3D 10ã®è©³çŽ°ã
OpenGLã¯Cèšèªã®éåžžã®é¢æ°ã䜿çšããŸãããããã«ã¯ãæšæºåããã
ABIããããŸããã€ãŸããOpenGLã¯ããã€ãã£ãã©ã€ãã©ãªé¢æ°ã®åŒã³åºãããµããŒãããä»»æã®èšèªïŒã€ãŸããå®è³ªçã«ã¯äžè¬ïŒãã䜿çšã§ããŸãã
OpenGLã¯ãããããã¹ããŒããã·ã³ïŒã¹ããŒããã·ã³ïŒã䜿çšããŸãã OpenGLé¢æ°ã®åŒã³åºãã®çµæã¯å
éšç¶æ
ã«äŸåãããããå€æŽã§ããŸãã OpenGLã§ã¯ãç¹å®ã®ãªããžã§ã¯ãïŒããšãã°ããã¯ã¹ãã£ïŒã«ã¢ã¯ã»ã¹ããã«ã¯ããŸãçŸåšã®é¢æ°glBindTextureãšããŠéžæããå¿
èŠããããŸãã次ã«ãããšãã°ãglTexImage2DãåŒã³åºããŠãã¯ã¹ãã£ã®å
容ãèšå®ãããªã©ããªããžã§ã¯ãã«åœ±é¿ãäžããããšãã§ããŸãã
Direct3Dã®ããã€ã¹ã³ã³ã»ããã®é¡äŒŒç¹ã¯ãããã§ã®ã³ã³ããã¹ãã§ãã OpenGLã³ã³ããã¹ãã¯ãDirect3Dã®ããã€ã¹ã®ããã«ãç¹å®ã®ãŠã£ã³ããŠã«é¢é£ä»ããããŠããŸãã
2ã€ã®APIã®äžè¬çãªæ©èœã¯ãã©ã¡ããã°ã©ãã£ãã¯ã¹ä»¥å€ã«ã¯äœãæäŸããªãããšã§ãã ã€ãŸãããŠã£ã³ããŠãäœæããããããŒããŒã/ããŠã¹å
¥åãæäœãããããµãŠã³ããæäœãããããæ©èœã¯ãããŸããïŒããã§ã¯ãDirectInputãDirectSoundãªã©ãDirectXã®ä»ã®éšåã«ã¯è§ŠããŸããïŒã ã€ãŸã ãããã¯é«ã¬ãã«ã®ã©ã€ãã©ãªã§ã¯ãããŸããã
æãç°¡åãªåœ¢åŒã§ã¯ã次ã®ããã«èšããŸããOpenGLãšDirect3Dã䜿çšãããšãäžè§åœ¢ãæç»ã§ããŸãã ããã ãã§ãã äžçªäžã®è¡ã¯ãäžè§åœ¢ãéåžžã«ããŸããŸãªæ¹æ³ïŒãã¯ã¹ãã£ãã©ã€ãã£ã³ã°ãå€æãªã©ïŒã§æç»ã§ããããšã§ãã
æãéèŠãªéã
圌ã®ååã¯æ¡åŒµåã§ãã
Direct3Dã¯åºæ¬çã«åãã¡ãžã£ãŒããŒãžã§ã³å
ã§ä¿®æ£ãããŸãã å€æŽ/è¿œå ã¯ã次ã®ããŒãžã§ã³ã®ãªãªãŒã¹ã§ã®ã¿çºçããŸãã
OpenGLã§ã¯ãGPUã®ã¡ãŒã«ãŒãæ¬åœã«ã¢ã¯ã»ã¹å¯èœãªAPIãå®çŸ©ããŠããŸãã OpenGLå®è£
ã«ãããã³ã¢ä»æ§ã®æ¡åŒµæ©èœãå®çŸ©ã§ããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯ãå®è¡æã«ãµããŒããããŠããæ¡åŒµæ©èœã®ãªã¹ããååŸãã䜿çšããæ¡åŒµæ©èœã®å¯çšæ§ã確èªã§ããŸãã
å®éãOpenGLã®ã»ãšãã©ãã¹ãŠã®æ©èœã¯æ¡åŒµæ©èœã§ãã OpenGLã®éçºã¯æ¬¡ã®ããã«ãªããŸããæ°ããæ©èœã衚瀺ããã補é å
ããã®æ©èœããã©ã€ããŒã«å®è£
ããå©çšå¯èœãªæ¡åŒµæ©èœãææžåããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯ãå
¬åŒä»æ§ã«å«ãŸããã®ãåŸ
ããã«ãããã«æ°ããæ©èœã䜿çšã§ããŸãã ãã®æ¡åŒµåãç¹å®ã®è£œé æ¥è
ã«åºæã§ããå Žåãååã«ã¯ãã®ååãå«ãŸããŸãïŒããšãã°ãGL_NV_point_spriteãNVã¯nVidiaãæå³ããŸãïŒã æ¡åŒµæ©èœãå€ãã®ãã³ããŒã«ãã£ãŠå®è£
ãããŠããå Žåãååã«EXTã䜿çšãããŸãïŒããšãã°ãGL_EXT_draw_range_elementsïŒã
æéãçµã€ã«ã€ããŠãæ¡åŒµæ©èœãåºã䜿çšãããŠããå Žåã
ARBã§æšæºåããããã®åŸãååã«ARBãå«ãŸããŸãïŒããšãã°ãGL_ARB_vertex_buffer_objectïŒã ãã®ãããªæ¡åŒµæ©èœã¯å
¬åŒã®ã¹ããŒã¿ã¹ãæã£ãŠããŸãã
æéã®çµéãšãšãã«æãéèŠãªæ¡åŒµæ©èœã¯ãã³ã¢ä»æ§ã®äžéšã«ãªããŸãã OpenGLã®åæ°ããããŒãžã§ã³ã¯ãåºæ¬çã«å€ãããŒãžã§ã³ãšããã€ãã®æ°ããçµ±åæ¡åŒµæ©èœã§ãã äžæ¹ãæ°æ©èœã¯æ¡åŒµæ©èœãšããŠåŒãç¶ãå©çšå¯èœã§ãã ã€ãŸã å®éãããã°ã©ã ã®èŠ³ç¹ããèŠããšãOpenGLã®ã©ã®ããŒãžã§ã³ã§ãåé¡ã§ã¯ãªããããããŸããã äž»ãªãã®ã¯ãå©çšå¯èœãªæ¡åŒµæ©èœã§ãã OpenGLããŒãžã§ã³ã¯ããµããŒããããæ¡åŒµæ©èœã®ã»ããã瀺ãããã®åãªãæ¹æ³ã§ãã
Direct3D 10/11ããã³OpenGL 3.xã®æ°æ©èœ
Microsoftã¯ãDirect3D 10ã®APIãæ ¹æ¬çã«èŠçŽããŸãããçŸåšãããçµ±äžãããææ°ã®å€èŠ³ã«ãªã£ãŠããŸãã åºå®æ©èœã¬ã³ããªã³ã°ïŒã·ã§ãŒããŒã䜿çšããªãïŒãªã©ãããã€ãã®å€ããã®ãæšãŠãããŸããã ãã©ã€ããŒã®æ°ããã¢ãã«ã«å¥ã®ç§»è¡ãè¡ãããŸããã ç¹ã«ãDirect3Dã®å®è£
ã«ã¯ãã«ãŒãã«ç©ºééšåã ãã§ãªãããŠãŒã¶ãŒç©ºéãå«ããããšãã§ããŸãã ããã«ããããŠãŒã¶ãŒã¹ããŒã¹/ã«ãŒãã«ã¹ããŒã¹ã®åãæ¿ãã«ãããæéãç¯çŽãããŸãã ãã ããæ°ãããã©ã€ããŒã¢ãã«ã®ãããDirect3D 10以éã¯Windows XPã§ã¯äœ¿çšã§ããŸããã Windows XPã®äººæ°ããŸã é«ãããšãèãããšãããã¯ããªãæ²ããããšã§ãã
OpenGLå®è£
ã¯ããšããšãŠãŒã¶ãŒç©ºééšåãšã«ãŒãã«ç©ºééšåã«åå²ãããŠããããããã®ãããªåé¡ã¯ãããŸããã§ããã ãã1ã€ã®éãã¯ãOpenGL APIã«äžäœäºææ§ã®ãªãå€æŽããããŸã§è¡ãããŠããªãããšã§ãã åã€ãããŒã·ã§ã³ã¯æ¡åŒµæ©èœã§ãã
Direct3D 10ã«ç»å Žããæ©èœãããšãã°ãžãªã¡ããªã·ã§ãŒããŒã¯ãæ¡åŒµæ©èœãä»ããŠããŸãã¯äž»èŠãªä»æ§ã®äžéšãšããŠOpenGL 3.2以éã§ãä»»æã®ãã©ãããã©ãŒã ã®OpenGLã§äœ¿çšã§ããŸãã 匷調ãã䟡å€
ããããŸã ãããã¯éèŠ
ã§ããDirect3D10/11æ©èœã¯ãWindows XPãå«ããããããã©ãããã©ãŒã ã®OpenGLã§å©çšã§ããŸã ã ãããã£ãŠãå€ãã®äººã¯ãDirect3D 10ãæ¿æ²»çãªçç±ã ãã§Windows XPã§å©çšã§ããããã§ã¯ãªããå®éã®æè¡çãªåé¡ã®ããã§ã¯ãªããšããå°è±¡ãæã£ãŠããŸãã ãã ããããã§ã¯ããã¥ãŒãã©ã«ãªããŒã³ãç¶æããªããããããªãã©ã€ããŒã®æ°ããã¢ãã«ãå°å
¥ãããšãã«å®éã«ãã®ãããªåé¡ããã£ããã©ãããå€æããããšã¯ã§ããŸããã
次ã«ãOpenGL 3.xã®é©æ°ã«ã€ããŠèª¬æããŸãã OpenGL 3.0以éãããããéæšå¥šã¢ãã«ãç»å ŽããŸããã åºå®æ©èœã¬ã³ããªã³ã°ã«é¢é£ããå€ãæ©èœã®äžéšãããã³glBegin / glEndã«åºã¥ãã¬ã³ããªã³ã°ãããã³ä»ã®å€ãã®æ代é
ãã§ç¡é¢ä¿ãªãã®ã¯ãå»æ¢äºå®ãšå®£èšããããã®åŸã¡ã€ã³ã®OpenGL 3.1ä»æ§ããåé€ãããŸããã ããã«ãããã¡ã€ã³ä»æ§ãææ°ã®ææ°ã®åœ¢åŒã«ä¿ã€ããšãã§ããŸãã
ããã«ãããå€ãããã°ã©ã ãšã®äºææ§ãæãªããããšæãããŸãã å®éã以åã¯ãããã°ã©ã ãOpenGLã³ã³ããã¹ããäœæãããšããã§ããã ãã¢ã¯ã»ã¹å¯èœãªããŒãžã§ã³ã®ã³ã³ããã¹ããåä¿¡ããŠââããŸããã 倧äžå€«ã ã£ãããªããªã æ°ããããŒãžã§ã³ã¯ä»¥åã®ããŒãžã§ã³ãããåžžã«ã¢ããªã³ã§ããã äºææ§ã®åé¡ãåé¿ããããã«ãOpenGL 3.xã³ã³ããã¹ããååŸããããã°ã©ã ã¯ãæ°ããã³ã³ããã¹ãäœæã¡ãœããã䜿çšããå¿
èŠããããŸããããã«ãããååŸããOpenGLã®ããŒãžã§ã³ãæå®ã§ããŸãã
ããããæ¡åŒµæ©èœã«ã€ããŠæ¢ã«ä»¥åã«èšè¿°ããããã®ãã次ã®ããã«ãããã¯éèŠã§ããOpenGL3.xã®æ©èœã¯ãæ°ããã¡ãœããã䜿çšããŠã³ã³ããã¹ããäœæããã«æ¡åŒµæ©èœãéããŠååŸã§ããŸãã ã€ãŸã
OpenGL 1.1 +æ¡åŒµæ©èœ= OpenGL 3.2 ïŒ ãããã£ãŠãå®å
šãªäžäœäºææ§ãç¶æãããŸãã ããšãã°ããžãªã¡ããªã·ã§ãŒããŒã¯
GL_ARB_geometry_shader4ã®æ¡åŒµã§ãã
ãããã誀解
OpenGLã¯Direct3Dã«é
ãããšã£ãŠãããäžè¬ã«ãä»æ§ã®ãã®ãããªç·©æ
¢ãªå€æŽããå€æãããšãããããå®å
šã«æ»ãã§ããŸããå®éããã®ãšã©ãŒã®çç±ã¯ãæ¡åŒµæ©èœã«é¢ããç¥èã®äžè¶³ã§ãã äžè¬çã«èšãã°ãOpenGLã¯ã€ãããŒã·ã§ã³ã®ç¹ã§ïŒïŒïŒDirect3Dã®
å
ãè¡ãããšãã§ããŸãã ã¡ãŒã«ãŒã¯èª°ãåŸ
ããã«OpenGLã«æ¡åŒµæ©èœãè¿œå ã§ããŸãããDirect3Dã«å€æŽãå ããããšãã§ããã®ã¯ãã€ã¯ããœããã ãã§ãã
OpenGLã¯ããã®ã°ã©ãã£ãã¯ããã°ã©ã çšã§ãããDirect3Dã¯ã²ãŒã çšã§ãããã®èª€acyã«ã¯æŽå²çãªçç±ããããŸãã OpenGLã¯å
ã
3Dã°ã©ãã£ãã¯ã©ã€ãã©ãªãšããŠéçºãããŸããããããŒããŠã§ã¢ãé«éåããããšã¯ã§ããŸããã ããã¯ãã²ãŒã ãå¿
èŠãšããªãã¹ãã¬ãªç»åã®ã¬ã³ããªã³ã°ãªã©ãããã€ãã®æ©èœã®ååšã説æããŠããŸãã Direct3Dã¯ãGPUã§ã®é«éåãæåŸ
ãããŠããã«éçºãããŸããã å€ãã®ãããã§ãã·ã§ãã«ã°ã©ãã£ãã¯ããã±ãŒãžãç»å Žããæç¹ã§ã¯ãDirect3Dã¯ååšããŸããã§ããã
èå³æ·±ããã¥ã¢ã³ã¹
Microsoftã¯ãOpenGLããµããŒãããªãWindowsãã©ã€ããŒãå梱ããŠããŸãã OpenGLã¯ãå éãªãã§ã¬ã³ããªã³ã°ãããããDirectXãä»ããŠãšãã¥ã¬ãŒããããŸãã ãã®ãããWindowsçšã®OpenGLãµããŒããå¿
èŠãªå Žåã¯ã補é å
ã®Webãµã€ããããã©ã€ããŒãã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã ãã®OpenGLã®æåŠã®çç±ã¯ãããããçŽç²ã«æ¿æ²»çãªãã®ã§ãã
ã ããäœããã¹ãããã©ãçãããïŒ
泚ïŒãã ãããã®éšåã¯éåžžã«äž»èŠ³çã§ãã
éçºè
ã§ããã䜿çšããAPIã決å®ããå Žåã¯ã次ã®ããšãèæ
®ããŠãã ããã
OpenGLã®å Žå-倧èŠæš¡ãªã¯ãã¹ãã©ãããã©ãŒã ãç¹ã«ãWindows XPã§ã®ãã¹ãŠã®æ°æ©èœã®å©çšå¯èœæ§ãDirect3D10/11ã¯ããã§ã¯ãããŸããã
OpenGLã«å¯ŸããŠ-Windowsã®ãã©ã€ããŒã¯ãã®ãŸãŸã§OpenGLããµããŒãããŠããªããããã¡ãŒã«ãŒã®Webãµã€ãããã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã
ããªãã3Dã¢ããªã±ãŒã·ã§ã³ã®éçºã®åå¿è
ã§ããã®åéããã¹ã¿ãŒãããå Žåãç§ã¯ãããè¡ãããšããå§ãããŸãïŒæåã«Direct3Dã«å¯ŸåŠãïŒçç±ã¯ç°¡åã§ã-Microsoftã¯éåžžã«é«å質ã®SDKãæäŸããŸãïŒã次ã«OpenGLã«å¯ŸåŠããŸãïŒåŸã«éåžžã«ç°¡åã«ãªããŸãDirect3DïŒã æ®å¿µãªãããOpenGLçšã®SDKãªã©ã¯ãããŸããã ãããã£ãŠããŒããããã¹ã¿ãŒããããšã¯ããå°é£ã«ãªããŸãã
ããã ãã§ãã éçºã«é 匵ã£ãŠãã ããïŒ