å§ããåã«Â»OpenGL ESãåããŠäœ¿çšããå Žåã¯ãåã®3ã€ã®ã¬ãã¹ã³ïŒ
1 ã€ã2ã€ã 3ã€ïŒãæåã«åŠç¿ããããšããå§ãããŸã
»ãã®èšäºã§äœ¿çšãããã³ãŒãã®åºæ¬ã¯ã
ãããš
ããããååŸã
ããŸã ã
ãã®ã¬ãã¹ã³ã®çµæãã€ã«ã«ãæµ·é¢ã®äžã«ãžã£ã³ãããŸãã
ãã¯ã¹ãã£ã«ã€ããŠå°ã
ãã¯ã¹ãã£ã¯ãããªãŽã³ã¢ãã«ã®è¡šé¢ã«éããŠãè²ãè²ããŸãã¯æµ®ã圫ãã®ãããªé¯èŠãäžããã©ã¹ã¿ãŒã€ã¡ãŒãžã§ãã ãã¯ã¹ãã£ã®äœ¿çšã¯ã圫å»ç»åã®è¡šé¢ã®çµµãšããŠç°¡åã«æ³åã§ããŸãã
ãã¯ã¹ãã£ã䜿çšãããšãå°ããªãµãŒãã§ã¹ã®è©³çްãåçŸããããšãã§ããŸããã©ã®ããªãŽã³ãäœæãããšããªãœãŒã¹ãéåºŠã«æ¶è²»ããããšãããããŸãã ããšãã°ãç®èã®å·è·¡ãè¡£æã®ãããå°ããªç³ãå£ãåã®è¡šé¢ã®ãã®ä»ã®ç©äœã
ãã¯ã¹ãã£ãµãŒãã§ã¹ã®å質ã¯ããã¯ã»ã«ïŒãã¯ã¹ãã£ã®æå°åäœãããã®ãã¯ã»ã«æ°ïŒã«ãã£ãŠæ±ºãŸããŸãã ãã¯ã¹ãã£èªäœã¯ç»åã§ããããããã¯ã¹ãã£ã®è§£å床ãšãã®ãã©ãŒãããã倧ããªåœ¹å²ãæãããã¢ããªã±ãŒã·ã§ã³ã®ã°ã©ãã£ãã¯ã¹ã®é床ãšå質ã«åœ±é¿ããŸãã
ãã¯ã¹ãã£åº§æš
OpenGLã§ã¯ããã¯ã¹ãã£åº§æšã¯éåžžïŒxãyïŒã§ã¯ãªãïŒsãtïŒãŸãã¯ïŒuãvïŒåº§æšã§æå®ãããŸãã ïŒsãtïŒã¯ãã¯ã»ã«ãã¯ã¹ãã£ã§ãããªãŽã³ã«å€æãããŸãã
ã»ãšãã©ã®ã³ã³ãã¥ãŒã¿ãŒåº§æšè¡šç€ºã·ã¹ãã ã§ã¯ãY軞ã¯äžåãã§ãXã¯å³åŽã«ãããããå·Šäžé
ã¯ãã€ã³ãïŒ0ã0ïŒã®ç»åã«å¯Ÿå¿ããŠããŸãã
äžéšã®Androidã·ã¹ãã ã§ã¯ãã¡ã¢ãªã¯ã蟺ã2ã®nã®åæ°ã§ãããã¯ã¹ãã£ã§ã®ã¿æ©èœããããšãèŠããŠããå¿
èŠããããŸãã ãã®ããã512 x 512ã1024 x 512ãªã©ããã¯ã»ã«åäœã®é©åãªãµã€ãºã®ãã¯ã¹ãã£ãæã€ã¢ãã©ã¹ãäœæããå¿
èŠããããŸãã ãŸããPOTãã¯ã¹ãã£ïŒPOT-2ã®ã¹ãä¹ãã€ãŸã2ã®ã¹ãä¹ïŒã䜿çšããªãå Žåãããããããã®ã¿ã€ãªã³ã°ãŸãã¯èªåçæãé©çšã§ããŸããã ãã®å Žåãã¿ã€ãªã³ã°ãšã¯ãåäžã®ãã¯ã¹ãã£ã®ç¹°ãè¿ãã®ç¹°ãè¿ããæããŸãã å¹
ãé«ãã®2åã§ãã£ãŠããå³äžé
ã«ã¯åžžã«åº§æšïŒ1,1ïŒããããŸãã ããã¯æ£èŠå座æšãšåŒã°ããŸãã
ã¢ããªã±ãŒã·ã§ã³ã¯å€ãã®å°ããªãã¯ã¹ãã£ã䜿çšããããšãå€ãããããã¯ã¹ãã£ããå¥ã®ãã¯ã¹ãã£ãžã®åãæ¿ãã¯æ¯èŒçé
ãããã»ã¹ã§ãã ãããã£ãŠããã®ãããªç¶æ³ã§ã¯ãå€ãã®å°ããªç»åã®ä»£ããã«1ã€ã®å€§ããªç»åã䜿çšããããšããå§ãããŸãã ãã®ãããªç»åã¯ãã¯ã¹ãã£ã¢ãã©ã¹ãšåŒã°ããŸãã ãµããã¯ã¹ãã£ã¯UV倿ã䜿çšããŠãªããžã§ã¯ãã«ãããã³ã°ãããã¢ãã©ã¹ã®åº§æšã¯ç»åã®ã©ã®éšåã䜿çšããããæ±ºå®ããŸãã
ã¢ããªã±ãŒã·ã§ã³ã«ã¯3ã€ã®ãã¯ã¹ãã£ïŒç©ºãæµ·ãã€ã«ã«ïŒãããããããµã€ãº1024x1024 png圢åŒã®1ã€ã®ã¢ãã©ã¹ã«çµåãããŸãã
ã芧ã®ãšãããã€ã«ã«ã®å¥ã®ç»åã远å ããŸããïŒå³äžé
ïŒã 次ã«ãå·ŠåŽã®ãã®ã®ä»£ããã«éãã§æ¥ç¶ããããšãã§ããŸãã ããããã®ç©ºãã¹ããŒã¹ãæ®ã£ãŠããã®ã§ããã®ã¢ãã©ã¹ã¯éåžžã«è²§åŒ±ã«äœãããŠããŸãã æé©ãªæ¹æ³ã§ç»åãããã¯ã§ããã¢ã«ãŽãªãºã ãšããã°ã©ã ããããŸãã ããšãã°ãåçã®ããã«ã
ãã¯ã¹ãã£ã®ãŠã§ã€ãïŒå æã¡ã¢ãªãµã€ãºïŒã¯æ¬¡ã®æ¹æ³ã§æ±ºå®ã§ããŸãããã€ãã«é«ããã¯ã»ã«ãšå¹
ãã¯ã»ã«ãæããã®ã§ããµã€ãºã1024 x 1024ã®32ããããã¯ã¹ãã£ã¯4 * 1024 * 1024 = 4'194'304ãã€ãã«ãªããŸãã
1024 x 1024ã®16ããããã¯ã¹ãã£ã¯2MBãã䜿çšããªãããã32ãããã€ã¡ãŒãžã䜿çšãããã©ãããæ€èšããå¿
èŠããããŸãã
ããŒããŠã§ã¢ãã¯ã¹ãã£å§çž®ããããéåžžã¯ãã¯ã¹ãã£ã®ééã4åæžããããšãã§ããŸãã ãã ããçŸåšãããã®åé¡ã¯äž»ãªåé¡ã§ã¯ãªããæ€èšã®ããã«æ
å ±ãæž¡ãã ãã§ãã
ãã®ã¬ãã¹ã³ã§ã¯ãGL_TEXTURE_2Dã¡ãœããã®ã¿ã䜿çšããŸããããã«ããããã¬ãŒã³ã«ãã¯ã¹ãã£ãé
眮ã§ããŸãïŒ6åã®æ£æ¹åœ¢ã§æ§æãããæ¡åŒµãã¥ãŒãã®ãã¯ã¹ãã£ã§æ©èœããGL_TEXTURE_CUBE_MAPããããŸãïŒã
ãã¯ã¹ãã£ãä»ããæ¹æ³ã¯ïŒ
çãåã«ãäœãèŠã€ããŠãã ããã
1ã€ã®é·æ¹åœ¢ïŒ2ã€ã®äžè§åœ¢ã§æ§æãããïŒã¯x0yå¹³é¢ã«ããããã®äžã«ç©ºã®ãã¯ã¹ãã£ãé
眮ããŸãã ãããè¡ãã«ã¯ãOpenGLRendererã¯ã©ã¹ã®private void prepareDataïŒïŒã¡ãœããã§ã座æšfloat []é ç¹ã®é
åãäœæããŸããããã§ãäžè§åœ¢ã®åº§æšã ãã§ãªãã察å¿ãããã¯ã¹ãã£ã®åº§æšãå
¥åããŸãã
ã©ã€ã³ã®æåã®3ã€ã®æ°åã¯ç©ºã®å·Šäžé
ã®åº§æšïŒ-2ã4ã0ïŒã§ã次ã®2ã€ã®æ°åã¯ãã¯ã»ã«ãã€ã³ãã®åº§æšïŒ0,0ïŒã§ãããããã¯äžè§åœ¢ã®é ç¹ã«å¯Ÿå¿ããŸãã 空ã®å·Šäžã®ãšããžïŒ-2ã0ã0ïŒãšäžèŽãã2çªç®ã®ãã€ã³ãïŒ2çªç®ã®è¡ïŒã«æ³šæããŠãã ããããã¯ã»ã«ãã€ã³ãã®åº§æšïŒ0ã0.5fïŒãã€ãŸã s = 0ïŒãã¯ã»ã«ã®å·Šç«¯ïŒãããã³t = 0.5ã空ã®ãã¯ã¹ãã£ã¯ãã¯ã»ã«ã®ååã ããåçŽæ¹åã«å æããããã§ãã æ¬¡ã«ãGL_TRIANGLE_STRIPã¡ãœããã䜿çšããŠ3çªç®ã®ãã€ã³ãïŒç©ºã®å³äžç«¯ïŒãš4çªç®ã®ãã€ã³ããèšå®ããŠ2ã€ã®äžè§åœ¢ãæç»ããŸãïŒåã®ã¬ãã¹ã³ãåç
§ïŒã
æåã«2çªç®ã®å¹³é¢ïŒæµ·ïŒãæåã®ç©ºïŒç©ºïŒã«åçŽã«ããããšã決ããŸããããããã€ã¹ã®æ£é¢ã®çŸããã®ããã«ãæµ·ã®å端ãå°ãäžããŠè§åºŠãå°ãå¢ãããŸããã
ã¢ãã©ã¹ããåãåã£ã座æšãã©ã®ããã«å€åãããã«æ³šç®ããŠãã ããã ã€ã«ã«ã®ç»åãã空ã«å¹³è¡ãªå¹³é¢ã«é
眮ãã0Zè»žã«æ²¿ã£ãŠ0.5åäœã ãã·ããããŸãã
ã€ã«ã«ãå¥ã®ã€ã«ã«ãšäº€æãããå Žåã¯ãããã§è¡ãå¿
èŠããããŸãã ãã®ãããæåã®ã¹ããããå®è¡ããŠãäžè§åœ¢ã®é ç¹ãšãã¯ã»ã«ãã€ã³ãã察å¿ãããŸããã
2çªç®ã®ã¹ããããŸãã¯ãã¯ã¹ãã£ã®ããŒãæ¹æ³
ãã¯ã¹ãã£ã®ããŒãã説æããåã«ããã¯ã¹ãã£ã¹ããããªã©ã®æŠå¿µãæ±ãå¿
èŠããããŸãã ãã¯ã¹ãã£ãŒãæ¥ç¶ããã®ã¯åœŒã«ãšã£ãŠã§ããããããå©çšããŠããŸããŸãªæäœãå®è¡ãããã©ã¡ãŒã¿ãŒã倿Žã§ããŸãã
次ã®ããã«ãäœæ¥çšã®çŸåšã®ã¹ããããéžæã§ããŸãã
GLES20.glActiveTexture(GLES20.GL_TEXTUREx);
ããã§ãGLES20.GL_TEXTURExã¯éžæãããã¹ãããã®çªå·ã§ãïŒGLES20.GL_TEXTURE0ãªã©ïŒã
宿°ã¯ã32åã®ãã¯ã¹ãã£ïŒæåŸã®GL_TEXTURE31ïŒã«ç»é²ãããŸãã
ãã¯ã¹ãã£ãã¹ãããã«æ¥ç¶ããã«ã¯ãæ¬¡ã®æé ã䜿çšããŸã
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texture_id);
ããã§ãæåã®ãã©ã¡ãŒã¿ã¯ãã¯ã¹ãã£ã®ã¿ã€ãã§ã2çªç®ã¯ãã¯ã¹ãã£ãžã®ãªã³ã¯ã§ãã
ãã®ããã·ãŒãžã£ã¯ãGLES20.glActiveTextureïŒïŒããã·ãŒãžã£ã«ãã£ãŠä»¥åã«éžæãããçŸåšã®ã¹ãããã«ãã¯ã¹ãã£ãã¢ã¿ããããŸãã
ã€ãŸããç¹å®ã®ã¹ãããã«ãã¯ã¹ãã£ãã¢ã¿ããããã«ã¯ã2ã€ã®ããã·ãŒãžã£ãåŒã³åºãå¿
èŠããããŸãã
GLES20.glActiveTexture(_); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, __);
1ã€ã®ãã¯ã¹ãã£ãè€æ°ã®ã¹ãããã«åæã«æ¥ç¶ããããšã¯ã§ããªãããšã«æ³šæããŠãã ããã å¥ã®ã¹ãããã«åãæ¿ãã以åã«æ¥ç¶ãããã¹ãããã®ãã¯ã¹ãã£ãèšå®ããªãã£ãå Žåãèªã¿åãã詊ã¿ããšãã¢ããªã±ãŒã·ã§ã³ãã¯ã©ãã·ã¥ããå¯èœæ§ãé«ããªããŸãã
texture.pngã°ã©ãã£ãã¯ãã¡ã€ã«ããããŒã¢ãã«ãããžã§ã¯ããªãœãŒã¹ãã©ã«ããŒã«é
眮ãããšããã«ãã·ã¹ãã ã¯èªåçã«IDçªå·ãå²ãåœãŠãŸããïŒãªãœãŒã¹èå¥åã¯ãã®ãªãœãŒã¹ãžã®ãªã³ã¯ã§ããæŽæ°ã§ãïŒã ãªãœãŒã¹èå¥åã¯R.javaãã¡ã€ã«ã«ä¿åãããŸãã
TextureUtilsã¯ã©ã¹ã«ã¯loadTextureã¡ãœããããããŸãã ãã®ã¡ãœããã¯ãç»åã®ãªãœãŒã¹IDã®å
¥åãåãåããåºåã¯ããã®ç»åãå«ãäœæããããã¯ã¹ãã£ãªããžã§ã¯ãã®IDãè¿ããŸãã
ãã®ãããæåã«ã°ã©ãã£ãã¯ãã¡ã€ã«ã®ãªãœãŒã¹èå¥åãåŒæ°ãšããŠæž¡ããŸãpublic static int loadTextureïŒContext contextãint resourceIdïŒ{
次ã«ã1ã€ã®èŠçŽ ã®ç©ºã®é
åãäœæããŸãã ãã®é
åã«ãOpenGL ESã¯textureIdsIdãã¯ã¹ãã£åãšåŒã°ããç¡æã®ãã¯ã¹ãã£çªå·ãæžã蟌ã¿ãŸãã
final int[] textureIds = new int[1];
次ã«ãtextureIds [0]ã«æžã蟌ãŸããç¡æã®ãã¯ã¹ãã£ãŒåãçæããŸã
glGenTexturesïŒ1ãtextureIdsã0ïŒ;
æåã®ãã©ã¡ãŒã¿ãŒã¯ãäœæãããã¯ã¹ãã£ãªããžã§ã¯ãã®æ°ã決å®ããŸãã éåžžãäœæããã®ã¯1ã€ã ãã§ãã æ¬¡ã®ãã©ã¡ãŒã¿ãŒã¯ãOpenGL ESãçæããããã¯ã¹ãã£ãªããžã§ã¯ãã®IDãæžã蟌ããã¯ã¹ãã£ã®ååã§ãã æåŸã®ãã©ã¡ãŒã¿ãŒã¯ãOpenGL ESã«é
åã®ã©ã®ãã€ã³ãããIDã®æžã蟌ã¿ãéå§ããããåã«æç€ºããŸãã
äœãæžã蟌ãŸããŠããªãã確èªãããŒããè¿ããŸãã
if (textureIds[0] == 0) { return 0; }
inScaledãã©ã°ã¯ããã©ã«ãã§æå¹ã«ãªã£ãŠãããã¹ã±ãŒã©ãã«ã§ãªãããŒãžã§ã³ã®ãããããããå¿
èŠãªå Žåã¯ãªãã«ããå¿
èŠããããŸãã
final BitmapFactory.Options options = new BitmapFactory.Options(); options.inScaled = false;
ãªãœãŒã¹ããããããããã®ç»åãããŠã³ããŒããã
final Bitmap bitmap = BitmapFactory.decodeResource( context.getResources(), resourceId, options);
ãã¯ã¹ãã£ãªããžã§ã¯ãã¯ãŸã 空ã§ãã ããã¯ãã°ã©ãã£ãã¯ããŒã¿ããŸã ãªãããšãæå³ããŸãã ãããããããã¢ããããŒãããŸãã ãããè¡ãã«ã¯ãæåã«ãã¯ã¹ãã£ããã€ã³ãããå¿
èŠããããŸãã OpenGL ESã§ã¯ããã€ã³ãã£ã³ã°ãšã¯ããã€ã³ãã£ã³ã°ãååºŠå€æŽãããŸã§ãOpenGL ESãåŸç¶ã®ãã¹ãŠã®åŒã³åºãã«ãã®ç¹å®ã®ãªããžã§ã¯ãã䜿çšããããšãæå³ããŸãã ãã®å Žåããªããžã§ã¯ãã®ãã¯ã¹ãã£ãã¹ãããããŸãã ãããè¡ãã«ã¯ãglBindTextureïŒïŒã¡ãœããã䜿çšããŸãã ãã¯ã¹ãã£ãã¢ã¿ãããããšãç»åããŒã¿ãªã©ã®ããããã£ãå¶åŸ¡ã§ããŸãã
ã¢ã¯ãã£ããªãã¯ã¹ãã£ã¹ããããéžæããŸã
glActiveTexture(GL_TEXTURE0);
textureIds [0]ãšããååã®ãã¯ã¹ãã£ãçŸåšã®ãã®ã«ãã
glBindTexture(GL_TEXTURE_2D, textureIds[0]);
ãã¯ã¹ãã£ã®éæåºŠãäœæããŸãã ãããã®2è¡ãæžããªããšãäžã®ã¹ã¯ãªãŒã³ã·ã§ããã®ããã«ãã€ã«ã«ã¯é»ãäžéæãªèæ¯ã«ãªããŸãã
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA); GLES20.glEnable(GLES20.GL_BLEND);
ãã¯ã¹ãã£ãªããžã§ã¯ãã䜿çšããåã«ã決å®ããå¿
èŠããããã1ã€ã®è©³çްããããŸãã ããã¯ããã¯ã¹ãã£ã®æå®ãããé åã«ãããã¯ã»ã«ã®æ°ãšæ¯èŒããŠãäžè§åœ¢ãç»é¢äžã®ãã¯ã»ã«ãããå€ããŸãã¯ããå°ãªãå æã§ãããšããäºå®ã«ãããã®ã§ãã ããšãã°ãç»é¢ã§ã¯ããã¯ã¹ãã£ãŸãŒã³ãã転éãããã¯ã»ã«ãããã¯ããã«å€ãã®ãã¯ã»ã«ã䜿çšã§ããŸãã åœç¶ãéã®å ŽåããããŸãããã¯ã¹ãã£ã®éžæããé åãããç»é¢ã§äœ¿çšãããã¯ã»ã«ãå°ãªããªããŸãã æåã®ã±ãŒã¹ã¯æ¡å€§ãšåŒã°ãã2çªç®ã®ã±ãŒã¹ã¯çž®å°ã§ãã ããããã§ãOpenGL ESã«ãã¯ã¹ãã£ã®å¢æžæ¹æ³ãæç€ºããå¿
èŠããããŸãã OpenGL ESã®çšèªã§ã¯ã察å¿ããã¡ã«ããºã ã¯çž®å°ãã£ã«ã¿ãŒããã³æ¡å€§ãã£ã«ã¿ãŒãšåŒã°ããŸãã ãããã®ãã£ã«ã¿ãŒã¯ãç»åããŒã¿èªäœãšåæ§ã«ããã¯ã¹ãã£ãªããžã§ã¯ãã®ããããã£ã§ãã èšå®ããã«ã¯ããŸãglBindTextureïŒïŒã䜿çšããŠãã¯ã¹ãã£ãªããžã§ã¯ãããã€ã³ããããŠãããã©ããã確èªããå¿
èŠããããŸãã ãã®å Žåãæ¬¡ã®ããã«ã€ã³ã¹ããŒã«ããŸãã
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
ããã§ç»åã«å¯Ÿãããã£ã«ã¿ãŒã®å¹æã«ã€ããŠèªãããšãã§ã
ãŸã ã
ããããããããããªã«ãŒãã¡ã¢ãªã«æžãæãã
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);
次ã®ããã«ãã¡ã¢ãªãããããããããåé€ããŸã ç»åã¯ãã§ã«ãããªã¡ã¢ãªã«æžãæããããŠããŸã
bitmap.recycle();
æåŸã«ã0ãæž¡ãglBindTextureã¡ãœãããå床åŒã³åºããŸãããã¯ã¹ãã£ã¹ãããGL_TEXTURE_2Dã«ããã®ã¹ããããããã¯ã¹ãã£ãªããžã§ã¯ãã®ãªã³ã¯ãè§£é€ããŸãã
glBindTexture(GL_TEXTURE_2D, 0); return textureIds[0];
ããäžåºŠãæåã«GL_TEXTURE_2Dã¹ãããã«ãã¯ã¹ãã£ãªããžã§ã¯ããé
眮ãã
glBindTexture(GL_TEXTURE_2D, textureIds[0]);
ãã®åŸã圌ãšã®ãã¹ãŠã®æäœãå®äºããã¹ããããè§£æŸããŸããã ãã®çµæããã¯ã¹ãã£ãªããžã§ã¯ããã»ããã¢ãããããäœæ¥ã®æºåãæŽãããã¯ã¹ãã£ã¹ãããã«é¢é£ä»ããããªããªããŸããã
ã·ã§ãŒããŒãã¯ã¹ãã£ã¢ã¯ã»ã¹
以åã®ã¬ãã¹ã³ã§ã¯ãããã°ã©ã ã®æ¬äœã«æååãªããžã§ã¯ããšããŠã·ã§ãŒããŒãäœæããŸããã
ããã§ææ¡ãããŠ
ããããã«ãããããå¥ã®ãªãœãŒã¹ã«é
眮ãããšäŸ¿å©
ã§ã ã ãã®ããã«ããŠãresãããžã§ã¯ããã©ã«ããŒã«rawãã©ã«ããŒãäœæãããããã«2ã€ã®vertex_shader.glslããã³fragment_shader.glslãã¡ã€ã«ãé
眮ãããŸãã ããã«ãã®å
容ããããŸã
vertex_shader.glsl attribute vec4 a_Position; uniform mat4 u_Matrix; attribute vec2 a_Texture; varying vec2 v_Texture; void main() { gl_Position = u_Matrix * a_Position; v_Texture = a_Texture; }
ããã§ã¯ã以åãšåæ§ã«ããããªãã¯ã¹ã䜿çšããŠåé ç¹ã®æçµåº§æšïŒgl_PositionïŒãèšç®ããŸãã ãããŠã屿§a_Textureã§ããã¯ã¹ãã£ã®åº§æšã®ããŒã¿ãååŸãããããããŸããŸãªå€æ°v_Textureã«ããã«æžã蟌ã¿ãŸãã ããã«ããããã©ã°ã¡ã³ãã·ã§ãŒããŒã®ãã¯ã¹ãã£åº§æšã§è£éãããããŒã¿ãååŸã§ããŸãã
fragment_shader.glsl precision mediump float; uniform sampler2D u_TextureUnit; varying vec2 v_Texture; void main() { gl_FragColor = texture2D(u_TextureUnit, v_Texture); }
ãŸããèšç®ã®å¹³å粟床ãèšå®ããŸã
precision mediump float;
GLSLã«ã¯ãsampler2DãšåŒã°ããç¹å¥ãªã¿ã€ãã®ãŠããã©ãŒã ããããŸãã ãµã³ãã©ãŒã¯ããã©ã°ã¡ã³ãã·ã§ãŒããŒã§ã®ã¿å®£èšã§ããŸãã
uniform sampler2D u_TextureUnit;
ãã®äžã«ãå¿
èŠãªãã¯ã¹ãã£ãé
眮ãããŠãããã¯ã¹ãã£ã®ã¹ãããçªå·ãååŸããåäžå€æ°u_TextureUnitããããŸãã 倿°ã®ã¿ã€ãã«æ³šæããŠãã ããã ã¢ããªã±ãŒã·ã§ã³ããæŽæ°ãšããŠãã®å€æ°ã«0ãæž¡ããããšãæãåºãããŠãã ããã ã€ãŸã ã·ã§ãŒããŒã«æž¡ãããæ°å€ïŒãã®å Žåã¯0ïŒã¯ãã©ã®ãã¯ã¹ãã£ã¹ããããèŠããã瀺ããŸãã
å¯å€v_Texture倿°ã¯ãé ç¹ã·ã§ãŒããŒããè£éããããã¯ã¹ãã£åº§æšãåãåããŸãã ãŸããã·ã§ãŒããŒã¯ãäžè§åœ¢ã®çŸåšã®ãã€ã³ãã«è¡šç€ºãããã¯ã¹ãã£ãã€ã³ããèªèããŠããŸãã
ãã¯ã¹ãã£ã®åº§æšãšãã¯ã¹ãã£èªäœã䜿çšããŠæçµãã©ã°ã¡ã³ããååŸããããšã¯æ®ããŸãã ããã«ããtexture2Dã¡ãœãããå®è¡ãããgl_FragColorã§ãã¯ã¹ãã£ããç®çã®ãã€ã³ãã®è²ãååŸããŸãã
ãããããœãŒã¹
ãããŠã³ããŒã
ããŠãã ãã ã 幞éãç¥ããŸãïŒ
äž»ãªæ
å ±æºïŒ
»
Www.opengl.org/sdk/docs/»
Startandroid.ru»
Andmonahov.blogspot.com»
Developer.android.com/reference»
Www.opengl.org»
Www.learnopengles.com"
W3bsit3-dns.com/forum/lofiversion»
Developer.android.com/guide