ååã®ã¬ãã¹ã³ã§ã¯ããªããžã§ã¯ããããŸããŸãªè²ã«çè²ããæ¹æ³ãåŠã³ãŸããã ããããããçš®ã®ãªã¢ãªãºã ãå®çŸããã«ã¯ãããããã®è²ãå¿
èŠã§ãã ååã¯ãäžè§åœ¢ã®é ç¹ããã€ã³ãããŸããããåãæ¹æ³ã§è¡ãã°ãç»åã衚瀺ããã«ã¯é ç¹ãå€ãããŸãã èå³ãæã£ãŠãã ãããç«ã®äžã§ã
ããã°ã©ããŒãã¢ãŒãã£ã¹ãã¯ãã¯ã¹ãã£ã䜿çšããããšã奜ã¿ãŸã ã ãã¯ã¹ãã£ã¯ããªããžã§ã¯ãã«ãã£ããŒã«ã远å ããããã«äœ¿çšããã2Dç»åïŒ1Dããã³3Dãã¯ã¹ãã£ãååšããŸãïŒã§ãã ãã¯ã¹ãã£ãšã¯ãå®¶ã«è²Œãä»ããããã¬ã³ã¬ã®çµµïŒããšãã°ïŒã貌ãããçŽã§ãå®¶ã¯ã¬ã³ã¬ã§ã§ããŠããããã«èŠãããšèããŠãã ããã
ãã¯ã¹ãã£ã¯ãåçã«å ããŠãã·ã§ãŒããŒã«éä¿¡ããã倧éã®ããŒã¿ãä¿åã§ããŸããããã®è³ªåã¯å¥ã®ã¬ãã¹ã³ã«æ®ããŸãã 以äžã§ã¯ãååã®ã¬ãã¹ã³ã®äžè§åœ¢ã«ãã£ã€ããã¬ã³ã¬ã®å£ã®ãã¯ã¹ãã£ãèŠãããšãã§ããŸãã

ãã¯ã¹ãã£ãäžè§åœ¢ã«ã¹ãããããã«ã¯ãäžè§åœ¢ã®åé ç¹ã«ããã®é ç¹ããã¯ã¹ãã£ã®ã©ã®éšåã«å±ããŠããããäŒããå¿
èŠããããŸãã ãããã£ãŠãåé ç¹ã«ã¯ããã¯ã¹ãã£ã®äžéšã«é¢é£ä»ãããããã¯ã¹ãã£åº§æšãå¿
èŠã§ãã
ãã¯ã¹ãã£åº§æšã¯ãx軞ãšyè»žã«æ²¿ã£ãŠ0ã1ã§ãïŒ2Dãã¯ã¹ãã£ã䜿çšããŸãïŒã ãã¯ã¹ãã£åº§æšã䜿çšããŠãã¯ã¹ãã£ã®è²ãååŸããããšããµã³ããªã³ã°ãšåŒã³ãŸãã ãã¯ã¹ãã£åº§æšã¯ããã¯ã¹ãã£ã®å·Šäžé
ã®ïŒ0ã0ïŒã§å§ãŸããå³äžé
ã®ïŒ1ã1ïŒã§çµãããŸãã 以äžã®ç»åã¯ãäžè§åœ¢ã«ãã¯ã¹ãã£åº§æšãé©çšããæ¹æ³ã瀺ããŠããŸãã

äžè§åœ¢ã«3ã€ã®ãã¯ã¹ãã£åº§æšãæå®ããŸããã äžè§åœ¢ã®å·Šäžé
ããã¯ã¹ãã£ã®å·Šäžé
ã«å¯Ÿå¿ããããããäžè§åœ¢ã®å·Šäžã®é ç¹ã«ïŒ0ã0ïŒãæž¡ããŸãã ãããã£ãŠã ïŒ1ã0ïŒãå³äžã®é ç¹ã«æž¡ããŸãã äžè§åœ¢ã®äžéšã®é ç¹ã¯ããã¯ã¹ãã£ã®äžéšã®äžå€®éšåã«å¯Ÿå¿ããå¿
èŠããããããäžéšã®é ç¹ïŒ0.5ã1.0ïŒããã¯ã¹ãã£åº§æšãšããŠæž¡ããŸãã
ãã®çµæãäžè§åœ¢ã®ãã¯ã¹ãã£åº§æšã¯æ¬¡ã®ããã«ãªããŸãã
GLfloat texCoords[] = { 0.0f, 0.0f,
ãã¯ã¹ãã£ãµã³ããªã³ã°ã¯ãããŸããŸãªæ¹æ³ã䜿çšããŠå®è¡ã§ããŸãã ç§ãã¡ã®ä»äºã¯ãOpenGLã«ãµã³ããªã³ã°æ¹æ³ãäŒããããšã§ãã
ãã¯ã¹ãã£ã©ããã³ã°
å€ãã®å Žåããã¯ã¹ãã£åº§æšã¯ïŒ0,0ïŒãšïŒ1,1ïŒã®éã«ãããŸããããã¯ã¹ãã£åº§æšããã®ééãè¶
ãããšã©ããªããŸããïŒ OpenGLã®ããã©ã«ãã®åäœã¯ç»åãç¹°ãè¿ãããšã§ãïŒå®éãæµ®åå°æ°ç¹æ°ã®å
šäœã¯åã«ç¡èŠãããŸãïŒããä»ã®ãªãã·ã§ã³ããããŸãïŒ
- GL_REPEAT ïŒãã¯ã¹ãã£ã®æšæºçãªåäœã ãã¯ã¹ãã£ã埩掻ãããŸãã
- GL_MIRRORED_REPEAT ïŒ_GL REPEATã«äŒŒãŠããŸããããã®ã¢ãŒãã§ã¯ç»åãåæ ãããŸãã
- GL_CLAMP_TP_EDGE ïŒ 0ãã1ã®éã®åº§æšããã€ã³ãããŸãã ãã®çµæãå¢çå€ã®åº§æšã¯ãã¯ã¹ãã£ã®å¢çã«ãã€ã³ããããŸãã
- GL_CLAMP_TO_BORDER ïŒç¯å²å€ã®åº§æšã¯ããŠãŒã¶ãŒå®çŸ©ã®å¢çç·è²ãæäŸããŸãã
ã¹ãã³ãè¶
ãããã¯ã¹ãã£åº§æšã䜿çšããå Žåããããã®ãªãã·ã§ã³ã¯ããããç°ãªã£ãŠè¡šç€ºãããŸãã 以äžã®ç»åã¯ãéããå®å
šã«ç€ºããŠããŸãã

äžèšã®åãªãã·ã§ã³ã¯ã** glTextParameter ***颿°ã䜿çšããŠã軞äžã§èšå®ã§ããŸãïŒ s ã t ïŒããã³3Dãã¯ã¹ãã£ã䜿çšããå Žåã¯r ïŒã x ã y ãããã³zãšåçã§ãïŒïŒ
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT);
æåã®åŒæ°ã¯ããã¯ã¹ãã£ãã¢ã¿ãããããç®çãæ±ºå®ããŸãã2Dãã¯ã¹ãã£ã䜿çšãããããå€ã¯GL_TEXTURE_2Dã«ãªããŸãã 2çªç®ã®å€ã¯ãèšå®ããç¹å®ã®ãã©ã¡ãŒã¿ãŒãOpenGLã«äŒããããã«å¿
èŠã§ãã WRAPãªãã·ã§ã³ãèšå®ãã S軞ãšT軞ã®å€ãæå®ããŸãã æåŸã®åŒæ°ã¯ãéžæãããã©ããã³ã°æ¹æ³ãæž¡ããŸãã ãã®å Žåã GL_MIRRORED_REPEATã䜿çšããŸã ã
GL_CLAMP_TO_BORDERãéžæããå ŽåããŸã å¢çç·ã®è²ãæå®ããå¿
èŠããããŸãã ããã¯glTextParameterã®ä»£æ¿ãšããŠfvã«ãã£ãŠè¡ããããªãã·ã§ã³ãšããŠGL_TEXTURE_BORDER_COLORãæž¡ããè²ã®å€ãšããŠæµ®åå°æ°ç¹æ°ã®é
åãæž¡ããŸãã
float borderColor[] = { 1.0f, 1.0f, 0.0f, 1.0f }; glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, borderColor);
ãã¯ã¹ãã£ãã£ã«ã¿ãªã³ã°
ãã¯ã¹ãã£åº§æšã¯è§£å床ã«äŸåããŸããããä»»æã®æµ®åå°æ°ç¹å€ãåãããšãã§ãããããOpenGLã¯ãã¯ã¹ãã£ã®ã©ã®ãã¯ã»ã«ïŒ ãã¯ã»ã«ãšãåŒã°ããïŒã課ãå¿
èŠãããããçè§£ããå¿
èŠããããŸãã äœè§£å床ã®ãã¯ã¹ãã£ã倧ããªãªããžã§ã¯ãã«é©çšããå Žåããã®åé¡ã¯ããæ·±å»ã«ãªããŸãã OpenGLã«ã¯ãã¯ã¹ãã£ããã£ã«ã¿ãªã³ã°ãããªãã·ã§ã³ãããããšãæ¢ã«æšæž¬ããŠãããããããŸããã 䜿çšå¯èœãªãªãã·ã§ã³ã¯ããã€ããããŸãããæãéèŠãªã®ã¯GL_NEARESTãšGL_LINEARã®ã¿ã§ãã
GL_NEAREST ïŒ æè¿åãã£ã«ã¿ãŒãšãåŒã°ããŸã ïŒã¯ãOpenGLã®æšæºçãªãã£ã«ã¿ãŒæ¹æ³ã§ãã OpenGLãã€ã³ã¹ããŒã«ãããšããã¯ã¹ãã£åº§æšã«æãè¿ããã¯ã»ã«ãéžæãããŸãã äžã«ã¯ã4ãã¯ã»ã«ãšãã¯ã¹ãã£åº§æšã瀺ãååã衚瀺ãããŠããŸãã å·Šäžã®ãã¯ã»ã«ã®äžå¿ã¯ãã¯ã¹ãã£åº§æšã«æãè¿ãããããµã³ãã«ã®è²ãšããŠéžæãããŸãã

GL_LINEAR ïŒ ïŒbiïŒç·åœ¢ãã£ã«ã¿ãªã³ã°ãšãåŒã°ããŸã ïŒã ãã¯ã¹ãã£åº§æšã«æãè¿ããã¯ã»ã«ããè£éãããå€ãåããŸãã ãã¯ã»ã«ããã¯ã¹ãã£åº§æšã«è¿ãã»ã©ããã®ãã¯ã»ã«ã®è²ä¿æ°ã¯å€§ãããªããŸãã
以äžã«ã飿¥ãããã¯ã»ã«ã®è²ãæ··åããäŸã瀺ããŸãã

ããããéžæãããã£ã«ã¿ãŒå¹æã®èŠèŠå¹æã¯äœã§ããïŒ ãããã®ã¡ãœããã倧ããªãªããžã§ã¯ãã®å°ããªè§£å床ã®ãã¯ã¹ãã£ã§ã©ã®ããã«æ©èœããããèŠãŠã¿ãŸãããïŒãã¯ã¹ãã£ã¯åã
ã®ãã¯ã»ã«ãèŠããããã«å¢å ãããŠããŸãïŒïŒ

ãããããã
ããããã®ãªããžã§ã¯ãããããããããã«ãã¯ã¹ãã£ãã¢ã¿ããããã倧ããªéšå±ããããšæ³åããŠãã ããã äžéšã®ãªããžã§ã¯ãã¯èгå¯è
ã«è¿ããäžéšã®ãªããžã§ã¯ãã¯èгå¯è
ããé ããé«è§£å床ãã¯ã¹ãã£ãåãªããžã§ã¯ãã«ã¢ã¿ãããããŠããŸãã ãªããžã§ã¯ãããªãã¶ãŒããŒããé ãé¢ããŠããå ŽåãåŠçããå¿
èŠããããã©ã°ã¡ã³ãã¯ãããã§ãã OpenGLã§ã¯ã倿°ã®ãã¯ã¹ãã£ãã¯ã»ã«ãèæ
®ããå¿
èŠãããå Žåãé«è§£å床ãã¯ã¹ãã£ãããã©ã°ã¡ã³ãã«é©åãªè²ãååŸããã®ãå°é£ã§ãã ãã®åäœã«ãããå°ããªãªããžã§ã¯ãã§ã¢ãŒãã£ãã¡ã¯ããçæãããŸãããã¡ãããå°ããªãªããžã§ã¯ãã§ã®é«è§£å床ãã¯ã¹ãã£ã®äœ¿çšã«é¢é£ããã¡ã¢ãªã®éå°ãªæµªè²»ãçºçããŸãã
ãã®åé¡ã解決ããããã«ãOpenGLã¯ãããããããšåŒã°ããæè¡ã䜿çšããŸããããã¯ãåŸç¶ã®åãã¯ã¹ãã£ãéå»ã®ååã®ãµã€ãºã§ãããã¯ã¹ãã£ã€ã¡ãŒãžã®ã»ãããæäŸããŸãã ããããããã®æ ¹åºã«ããèãæ¹ã¯éåžžã«åçŽã§ãããªãã¶ãŒããŒããäžå®ã®è·é¢ã眮ããåŸãOpenGLã¯çŸåšã®è·é¢ã§ããè¯ãèŠããå¥ã®ãããããããã¯ã¹ãã£ã䜿çšããŸãã ãªããžã§ã¯ãããªãã¶ãŒããŒããé¢ããã»ã©ããã¯ã¹ãã£ãŒã®è§£å床ã®éãã«æ°ã¥ãã«ãããªãããã䜿çšããããã¯ã¹ãã£ãŒã¯å°ãªããªããŸãããŸããããããããã«ã¯ããã©ãŒãã³ã¹ãåäžãããåªããæ©èœããããããã¯æ±ºããŠäžèŠã§ã¯ãããŸããã ããããããã®äŸã詳ããèŠãŠã¿ãŸãããã

åç»åã®ãããããããã¯ã¹ãã£ã®ã»ãããäœæããã®ã¯ããªãé¢åã§ããã幞ããªããšã«ãOpenGLã¯ãã¯ã¹ãã£ã®äœæåŸã«glGenerateMipmapsãåŒã³åºãããšã§ããããçæã§ããŸãã ããã«äŸã衚瀺ãããŸãã
ã¬ã³ããªã³ã°ããã»ã¹äžã«ããããããã¬ãã«ãåãæ¿ãããšãOpenGLã¯2ã€ã®ã¬ãã«éã®éããšããžãªã©ã®ã¢ãŒãã£ãã¡ã¯ãã衚瀺ããå ŽåããããŸãã ãã¯ã¹ãã£ã§ãã£ã«ã¿ãªã³ã°ã䜿çšã§ããããã«ã NEARESTããã³LINEARãã£ã«ã¿ãªã³ã°ã䜿çšããŠã¬ãã«ãåãæ¿ããããããããã®ããŸããŸãªã¬ãã«ã§ãã£ã«ã¿ãªã³ã°ã䜿çšããããšãã§ããŸãã ããããããã®ã¬ãã«éã®ãã£ã«ã¿ãªã³ã°æ¹æ³ã瀺ãããã«ãæšæºã®æ¹æ³ã次ã®4ã€ã®èšå®ã®ããããã«çœ®ãæããããšãã§ããŸãã
- _GL_NEARESET_MIPMAP NEARESTïŒãã¯ã»ã«ãµã€ãºã«äžèŽããæãè¿ããããããããéžæããæè¿åè£éã䜿çšããŠãã¯ã¹ãã£ããµã³ããªã³ã°ããŸãã
- _GL_LINEAR_MIPMAP NEARESTïŒæãè¿ããããããããéžæããç·åœ¢è£éã䜿çšããŠãµã³ããªã³ã°ããŸãã
- _GL_NEAREST_MIPMAP LINEAR ïŒ2ã€ã®æãè¿ãããããããéã®ç·åœ¢è£éãšç·åœ¢è£éã䜿çšãããã¯ã¹ãã£ã®ãµã³ããªã³ã°ã
ãã¯ã¹ãã£ãã£ã«ã¿ãªã³ã°ãšåæ§ã«ã glTexParameteri颿°ã䜿çšããŠãã£ã«ã¿ãªã³ã°æ¹æ³ãèšå®ã§ããŸãã
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
ããããééãã¯ãããããããã®ãã£ã«ã¿ãªã³ã°æ¹æ³ãå¢å ãã£ã«ã¿ãŒãšããŠèšå®ããããšã§ãã ããããããã¯äž»ã«ãã¯ã¹ãã£ã®åæžã«äœ¿çšããããããããã¯å¹æãäžããŸããã ãã¯ã¹ãã£ãå¢ãããšããããããã䜿çšãããªãããããã£ã«ã¿ãªãã·ã§ã³ãæž¡ããšãããããããã¯GL_INVALID_ENUMãšã©ãŒãçæããŸãã
ãã¯ã¹ãã£ã®èªã¿èŸŒã¿ãšäœæ
ãã¯ã¹ãã£ã®äœ¿çšãéå§ããåã«ãã¢ããªã±ãŒã·ã§ã³ã«ãã¯ã¹ãã£ãããŒãããå¿
èŠããããŸãã ãã¯ã¹ãã£ç»åã¯ç¡å¶éã®æ°ã®åœ¢åŒã§ä¿åã§ããŸããå圢åŒã«ã¯ç¬èªã®æ§é ãšããŒã¿ã®é åºããããŸããã©ã®ããã«ç»åãã¢ããªã±ãŒã·ã§ã³ã«è»¢éããŸããïŒ 1ã€ã®è§£æ±ºçã¯ãããšãã°.PNGãªã©ã®äŸ¿å©ãªåœ¢åŒã䜿çšããŠã倧ããªãã€ãé
åã«ã€ã¡ãŒãžãããŒãããç¬èªã®ã·ã¹ãã ãäœæããããšã§ãã ç¬èªã®ã€ã¡ãŒãžããŠã³ããŒããŒãäœæããã®ã¯å§åçãªä»äºã§ã¯ãããŸããããç¹ã«å€ãã®ãã¡ã€ã«åœ¢åŒã䜿çšããå Žåã¯ãããã§ãããªãé¢åã§ãã
ãã1ã€ã®è§£æ±ºçã¯ãæ¢è£œã®ã©ã€ãã©ãªã䜿çšããŠç»åãã¢ããããŒãããããšã§ããããã¯ãå€ãã®ããŸããŸãªäžè¬çãªåœ¢åŒããµããŒãããŠãããç§ãã¡ã«ãšã£ãŠã¯å€§å€ãªäœæ¥ã§ãã ããšãã°ã SOIL ã
åå£
SOILã¯Simple OpenGL Image Libraryã®ç¥ã§ãæãäžè¬çãªç»å圢åŒããµããŒããã䜿ããããããã¡ãããããŠã³ããŒãã§ããŸã ã ä»ã®ã»ãšãã©ã®ã©ã€ãã©ãªãšåæ§ã«ãèªåã§.libãã¡ã€ã«ãçæããå¿
èŠããããŸãã / projectsãã©ã«ããŒã«ãããããžã§ã¯ãã®1ã€ã䜿çšããŠïŒãããžã§ã¯ãã®ããŒãžã§ã³ãVSã®ããŒãžã§ã³ããäœããã©ããå¿é
ããå¿
èŠã¯ãããŸãããããããæ°ããããŒãžã§ã³ã«å€æããã ãã§ãã»ãšãã©ã®å Žåããã§æ©èœããŸãïŒãããã«åºã¥ããŠç¬èªã®ãããžã§ã¯ããäœæããŸãã ãŸãã srcãã©ã«ããŒã®å
容ãincludeãã©ã«ããŒã«è¿œå ããŸãã ãŸãã SOIL.libããªã³ã«ãŒèšå®ã«è¿œå ããã³ãŒãã®å
é ã«#include <SOIL.h>ã远å ããããšãå¿ããªãã§ãã ããã
çŸåšã®ãã¯ã¹ãã£ã»ã¯ã·ã§ã³ã§ã¯ã æšè£œã³ã³ããã®ç»åã䜿çšããŸãã SOILãä»ããŠç»åãã¢ããããŒãããã«ã¯ã SOIL_load_image颿°ã䜿çšããŸãã
int width, height; unsigned char* image = SOIL_load_image("container.jpg", &width, &height, 0, SOIL_LOAD_RGB);
颿°ã®æåã®åŒæ°ã¯ãç»åãã¡ã€ã«ã®å Žæã§ãã 2çªç®ãš3çªç®ã®åŒæ°ã¯ãã€ã¡ãŒãžãµã€ãºãé
眮ãããintãžã®ãã€ã³ã¿ãŒã§ãïŒå¹
ãšé«ãã ãã¯ã¹ãã£ãçæããããã«å¿
èŠã«ãªããŸãã 4çªç®ã®åŒæ°ã¯ç»åãã£ãã«ã®æ°ã§ããã0ã®ãŸãŸã«ããŸããæåŸã®åŒæ°ã¯ãSOILã«ç»åã®ããŒãæ¹æ³ãæç€ºããŸããRGBç»åæ
å ±ã®ã¿ãå¿
èŠã§ãã çµæã¯ããã€ãã®å€§ããªé
åã«æ ŒçŽãããŸãã
ãã¯ã¹ãã£çæ
OpenGLã®ä»ã®ãªããžã§ã¯ããšåæ§ã«ãèå¥åã¯ãã¯ã¹ãã£ãåç
§ããŸãã äœæããŸãããïŒ
GLuint texture; glGenTextures(1, &texture);
glGenTextures颿°ã¯ãçæãããã¯ã¹ãã£ã®æ°ãæåã®åŒæ°ãšããŠããããã®ãã¯ã¹ãã£ã®èå¥åãæ ŒçŽãããGLuinté
åïŒãã®å Žåãããã¯1ã€ã®GLuint ïŒã2çªç®ã®åŒæ°ãšããŠåãåããŸãã ä»ã®ãªããžã§ã¯ããšåæ§ã«ããã¯ã¹ãã£ã䜿çšãã颿°ã䜿çšãããã¯ã¹ãã£ãèªèã§ããããã«ããªããžã§ã¯ããã¢ã¿ããããŸãã
glBindTexture(GL_TEXTURE_2D, texture);
ãã¯ã¹ãã£ãã¹ãããããåŸãäºåã«èªã¿èŸŒãŸããç»åã䜿çšããŠãã¯ã¹ãã£ããŒã¿ã®çæãéå§ã§ããŸãã ãã¯ã¹ãã£ã¯glTexImage2Dã䜿çšããŠçæãããŸã ïŒ
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image); glGenerateMipmap(GL_TEXTURE_2D);
ãã®é¢æ°ã«ã¯ããªãã®æ°ã®åŒæ°ããããããé çªã«èŠãŠã¿ãŸãããã
- æåã®åŒæ°ã¯ããã¯ã¹ãã£ã¿ãŒã²ããã説æããŸãã GL_TEXTURE_2Dã®å€ãèšå®ããããšã«ããããã¯ã¹ãã£ããã®ã¿ãŒã²ããã«é¢é£ä»ããããŠããããšã颿°ã«éç¥ããŸããïŒä»ã®ã¿ãŒã²ããGL_TEXTURE_1Dããã³GL_TEXTURE_3Dãé¢äžããªãããã«ããããïŒã
- 2çªç®ã®åŒæ°ã¯ãçªç¶èªåã§ãããããããçæãããå Žåã«ããã¯ã¹ãã£ãçæããããããããã®ã¬ãã«ã瀺ããŸãã OpenGLã§ããããããçæãæ®ãããã0ãæž¡ããŸãã
- 3çªç®ã®åŒæ°ã¯ãOpenGLã«ãã¯ã¹ãã£ãä¿åãã圢åŒãæç€ºããŸãã ç»åã«ã¯RGBå€ã®ã¿ãããããããã¯ã¹ãã£ã«ã¯RGBå€ã®ã¿ãä¿åããŸãã
- 4çªç®ãš5çªç®ã®åŒæ°ã¯ãçµæã®ãã¯ã¹ãã£ã®å¹
ãšé«ããæå®ããŸãã ãããã®å€ã¯ãç»åã®èªã¿èŸŒã¿äžã«æ©ãååŸããŸããã
- 6çªç®ã®åŒæ°ã¯åžžã«0ã§ããå¿
èŠããããŸãïŒåŒæ°ã¯å€ããªã£ãŠããŸãïŒã
- 7çªç®ãš8çªç®ã®åŒæ°ã¯ãå
ã®ç»åã®åœ¢åŒãšããŒã¿åãèšè¿°ããŸãã RGBå€ãèªã¿èŸŒãã§ãã€ãïŒcharïŒã§ä¿åããã®ã§ããããã®å€ãæž¡ããŸãã
- æåŸã®åŒæ°ã¯ç»åããŒã¿ãã®ãã®ã§ãã
glTexImage2DãåŒã³åºããåŸãçŸåšãã€ã³ããããŠãããã¯ã¹ãã£ã«ç»åããã€ã³ããããŸãã 確ãã«ããã¯ã¹ãã£ã«ã¯åºæ¬çãªã€ã¡ãŒãžãããããŸãããããããããã䜿çšããå Žåã¯ãããããããã®ã¬ãã«ãåçŽã«å¢ããã ãã§ãåãæ¹æ³ã§ã€ã¡ãŒãžãèšå®ããå¿
èŠããããŸãã ããŠããŸãã¯ããã¯ã¹ãã£ãçæããåŸã«glGenerateMipmapãåŒã³åºãããšãã§ããŸãã ãã®é¢æ°ã¯ãçŸåšãã€ã³ããããŠãããã¯ã¹ãã£ã«å¿
èŠãªãã¹ãŠã®ãããããããèªåçã«çæããŸãã
ãã¯ã¹ãã£ãšããããããã®çæãçµäºããããããŒããããã€ã¡ãŒãžã«å²ãåœãŠãããã¡ã¢ãªãè§£æŸãããã¯ã¹ãã£ãªããžã§ã¯ããè§£æŸããããšããå§ãããŸãã
SOIL_free_image_data(image); glBindTexture(GL_TEXTURE_2D, 0);
ãã¯ã¹ãã£çæããã»ã¹å
šäœã¯æ¬¡ã®ããã«ãªããŸãã
GLuint texture; glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture);
ãã¯ã¹ãã£ãé©çšãã
以éã®ç« ã§ã¯ã Hello Triangleãã¥ãŒããªã¢ã«ã®æåŸã®éšåããglDrawElementsã§æãããå蟺圢ã䜿çšããŸãã ãã¯ã¹ãã£ã®ãµã³ããªã³ã°æ¹æ³ãOpenGLã«æç€ºããå¿
èŠãããããããã¯ã¹ãã£åº§æšã远å ããŠé ç¹ããŒã¿ãæŽæ°ããŸãã
GLfloat vertices[] = {
远å ã®å±æ§ã远å ããåŸãOpenGLã«æ°ãã圢åŒãå床éç¥ããå¿
èŠããããŸãã
ã
glVertexAttribPointer(2, 2, GL_FLOAT,GL_FALSE, 8 * sizeof(GLfloat), (GLvoid*)(6 * sizeof(GLfloat))); glEnableVertexAttribArray(2);
8 * sizeofïŒGLfloatïŒã®äžã®æåŸã®2ã€ã®å±æ§ã®ã¹ãããå€ã調æŽããããšã«æ³šæããŠãã ããã
次ã«ãé ç¹ã·ã§ãŒããŒã倿ŽããŠããã¯ã¹ãã£ãŒåº§æšã屿§ãšããŠååŸãããã©ã°ã¡ã³ãã·ã§ãŒããŒã«æž¡ãããã«ããå¿
èŠããããŸãã
#version 330 core layout (location = 0) in vec3 position; layout (location = 1) in vec3 color; layout (location = 2) in vec2 texCoord; out vec3 ourColor; out vec2 TexCoord; void main() { gl_Position = vec4(position, 1.0f); ourColor = color; TexCoord = texCoord; }
ãã©ã°ã¡ã³ãã·ã§ãŒããŒã¯ã TexCoordãå
¥å倿°ãšããŠåãå
¥ããå¿
èŠããããŸãã
ãã©ã°ã¡ã³ãã·ã§ãŒããŒããã¯ã¹ãã£ãªããžã§ã¯ãã«ã¢ã¯ã»ã¹ã§ããå¿
èŠããããŸããããã©ã°ã¡ã³ãã·ã§ãŒããŒã«æž¡ãæ¹æ³ã¯ïŒ GLSLã«ã¯ã samplerãšåŒã°ãããã¯ã¹ãã£ãªããžã§ã¯ãã®çµã¿èŸŒã¿ããŒã¿åããããŸããããã¯ãæ«å°Ÿã«ãã¯ã¹ãã£åãã€ãŸãã sampler1Dãsampler3Dããã®å Žåã¯sampler2DããããŸãã åŸã§ãã¯ã¹ãã£ãæž¡ãåäžãªsmpler2Dã宣èšããã ãã§ããã©ã°ã¡ã³ãã·ã§ãŒãã«ãã¯ã¹ãã£ã远å ã§ããŸãã
#version 330 core in vec3 ourColor; in vec2 TexCoord; out vec4 color; uniform sampler2D ourTexture; void main() { color = texture(ourTexture, TexCoord); }
ãã¯ã¹ãã£ã«ã©ãŒããµã³ããªã³ã°ããã«ã¯ãGLSLã®çµã¿èŸŒã¿ãã¯ã¹ãã£é¢æ°ã䜿çšããŸãããã®é¢æ°ã¯ããã¯ã¹ãã£ãµã³ãã©ãæåã®åŒæ°ãšããŠããã¯ã¹ãã£åº§æšã2çªç®ã®åŒæ°ãšããŠäœ¿çšããŸãã æ¬¡ã«ã ãã¯ã¹ãã£é¢æ°ã¯ã以åã«èšå®ãããã¯ã¹ãã£ãã©ã¡ãŒã¿ã䜿çšããŠè²ã®å€ããµã³ããªã³ã°ããŸãã ãã®ãã©ã°ã¡ã³ãã·ã§ãŒããŒã®çµæã¯ãïŒè£éãããïŒãã¯ã¹ãã£åº§æšã§ïŒãã£ã«ã¿ãŒåŠçãããïŒãã¯ã¹ãã£ã«ã©ãŒã«ãªããŸãã
glDrawElementsãåŒã³åºãåã«ãã¯ã¹ãã£ããã€ã³ãããããã ãã«æ®ããèªåçã«ãã©ã°ã¡ã³ãã·ã§ãŒããŒãµã³ãã©ãŒã«æž¡ãããŸãã
glBindTexture(GL_TEXTURE_2D, texture); glBindVertexArray(VAO); glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); glBindVertexArray(0);
ãã¹ãŠãæ£ããè¡ã£ãå Žåãæ¬¡ã®ç»åã衚瀺ãããŸãã

åè§åœ¢ãå®å
šã«é»ãŸãã¯çœã®å Žåãã©ããã§ééããŠããŸãã ã·ã§ãŒããŒãã°ã確èªããã³ãŒãããœãŒã¹ãšæ¯èŒããŸãã
ããã«ã©ãã«ãªå¹æãåŸãããã«ãçµæã®ãã¯ã¹ãã£ã«ã©ãŒãšé ç¹ã«ã©ãŒãæ··ããããšãã§ããŸãã ãã¬ã³ãããã«ã¯ããã©ã°ã¡ã³ãã·ã§ãŒããŒã®è²ãåçŽã«ä¹ç®ããŸãã
Color = texture(ourTexture, TexCoord) * vec4(ourColor, 1.0f)
ãã®ãããªãã®ãååŸããå¿
èŠããããŸããïŒ

ãã¯ã¹ãã£ãããã¯
ããªãã¯äžæè°ã«æããããããŸããïŒã glUniformã䜿çšããŠå€ãå²ãåœãŠãªãã£ãã®ã«ããªãsampler2Dã¯å€æ°åäžãªã®ã§ããïŒãã glUniform1iã䜿çšãããšã1ã€ã®ãã©ã°ã¡ã³ãã·ã§ãŒããŒã§è€æ°ã®ãã¯ã¹ãã£ã䜿çšã§ããããã«ãäœçœ®å€ããã¯ã¹ãã£ãµã³ãã©ãŒã«å²ãåœãŠãããšãã§ããŸãã ãã¯ã¹ãã£ã®å Žæã¯ãå€ãã®å Žåããã¯ã¹ãã£ãããã¯ãšåŒã°ããŸãã ããã©ã«ãã®ãã¯ã¹ãã£ãŠãããã¯0ã§ããããã¯ãçŸåšã®ã¢ã¯ãã£ããªãã¯ã¹ãã£ãŠããããæå³ãããããåã®ã»ã¯ã·ã§ã³ã§å Žæãæå®ããå¿
èŠã¯ãããŸããã
ãã¯ã¹ãã£ãŠãããã®äž»ãªç®æšã¯ãã·ã§ãŒããŒã§è€æ°ã®ãã¯ã¹ãã£ã䜿çšããæ©èœãæäŸããããšã§ãã ãã¯ã¹ãã£ãããã¯ããµã³ãã©ãŒã«æž¡ãããšã«ãããäžèŽãããã¯ã¹ãã£ãããã¯ãã¢ã¯ãã£ãã«ãããŸã§ãäžåºŠã«è€æ°ã®ãã¯ã¹ãã£ãã¹ãããã§ããŸãã glBindTextureãšåæ§ã«ã䜿çšãããã¯ã¹ãã£ãããã¯ãæž¡ãglActivateTextureã§ãã¯ã¹ãã£ãã¢ã¯ãã£ãåã§ããŸãã
glActiveTexture(GL_TEXTURE0);
ãã¯ã¹ãã£ãããã¯ãã¢ã¯ãã£ãã«ããåŸããã®åŸglBindTextureãåŒã³åºããš ããã®ãã¯ã¹ãã£ãã¢ã¯ãã£ããªãã¯ã¹ãã£ãããã¯ã«ãã€ã³ããããŸãã GL_TEXTURE0ãããã¯ã¯ããã©ã«ãã§åžžã«ã¢ã¯ãã£ãã«ãªã£ãŠãããããåã®äŸã§ãã¯ã¹ãã£ãããã¯ãã¢ã¯ãã£ãã«ããå¿
èŠã¯ãããŸããã§ããã
OpenGLã¯å°ãªããšã16ã®ãã¯ã¹ãã£ãŠãããããµããŒãããŸããããã¯GL_TEXTURE0 - GL_TEXTURE15ã§ååŸã§ããŸãã ãããã¯é çªã«å®£èšãããŠãããããæ¬¡ã®ããã«ããŠååŸããããšãã§ããŸãïŒ GL_TEXTURE8 = GL_TEXTURE0 + 8 ã ããã¯ããã¯ã¹ãã£ãããã¯ãå埩åŠçããå¿
èŠãããå Žåã«äŸ¿å©ã§ãã
ãããã«ããŠãããã©ã°ã¡ã³ãã·ã§ãŒããŒã倿ŽããŠå¥ã®ãµã³ãã©ãŒãåãå
¥ããå¿
èŠããããŸãã
#version 330 core ... uniform sampler2D ourTexture1; uniform sampler2D ourTexture2; void main() { color = mix(texture(ourTexture1, TexCoord), texture(ourTexture2, TexCoord), 0.2); }
æçµçµæã¯ã2ã€ã®ãã¯ã¹ãã£ã®çµã¿åããã§ãã GLSLã«ã¯ã2ã€ã®å
¥åå€ãåãã3çªç®ã®å€ã«åºã¥ããŠããããè£éããçµã¿èŸŒã¿ã®ããã¯ã¹é¢æ°ããããŸãã 3çªç®ã®å€ã0.0ã®å Žåã 1.0ã 2çªç®ã®å Žåããã®é¢æ°ã¯æåã®åŒæ°ãè¿ããŸãã 0.2ã®å€ã¯ãæåã®å
¥åè²ã®80ïŒ
ãš2çªç®ã®å
¥åè²ã®20ïŒ
ãè¿ããŸãã
次ã«ãå¥ã®ãã¯ã¹ãã£ãããŒãããŠäœæããå¿
èŠããããŸãã æ¬¡ã®æé ãæ¢ã«çè§£ããŠããŸãã å¿
ãå¥ã®ãã¯ã¹ãã£ãªããžã§ã¯ããäœæããã€ã¡ãŒãžãããŒãããŠã glTexImage2Dã䜿çšããŠæçµçãªãã¯ã¹ãã£ãçæããŠãã ãã ã 2çªç®ã®ãã¯ã¹ãã£ã§ã¯ããããã®ã¬ãã¹ã³ãåŠç¿ããéã«é¡ç»åã䜿çšããŸãã
2çªç®ã®ãã¯ã¹ãã£ïŒããã³æåã®ãã¯ã¹ãã£ïŒã䜿çšããã«ã¯ãäž¡æ¹ã®ãã¯ã¹ãã£ã察å¿ãããã¯ã¹ãã£ãããã¯ã«ãªã³ã¯ããã©ã®ãµã³ãã©ãŒãã©ã®ãã¯ã¹ãã£ãããã¯ãåç
§ãããã瀺ãããšã«ãããã¬ã³ããªã³ã°æé ããããã«å€æŽããå¿
èŠããããŸãã
glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, texture1); glUniform1i(glGetUniformLocation(ourShader.Program, "ourTexture1"), 0); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, texture2); glUniform1i(glGetUniformLocation(ourShader.Program, "ourTexture2"), 1); glBindVertexArray(VAO); glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); glBindVertexArray(0);
glUniform1iã䜿çšããŠãåäžãµã³ãã©ãŒã®ãã¯ã¹ãã£ãããã¯ã®äœçœ®ãèšå®ããããšã«æ³šæããŠãã ããã glUniform1iãä»ããŠããããã€ã³ã¹ããŒã«ããããšã«ãããåäžãªãµã³ãã©ãŒãæ£ãããã¯ã¹ãã£ãããã¯ã«å¯Ÿå¿ããããã«ãªããŸãã ãã®çµæã次ã®çµæãåŸãããŸãã

, ! , OpenGL 0.0 Y , 0.0 Y. , Devil Y . SOIL . SOIL SOIL_load_OGL_texture , SOIL_FLAG_INVERT_Y , . , OpenGL, SOIL_load_image .
2 :
- Y ( Y 1)
- Y , TexCoord TexCoord = vec2(texCoord.x, 1.0f â texCoord.y);. ã
â , . , , â , , OpenGL.
Y :

, . , .
æŒç¿
.
- , , .
- , 0.0f 2.0f 0.0f 1.0f . , 4 . ,
- , . GL_NEAREST , . .
- uniform 3 mix . . ,