ÇÈÌæ¤È¤¤¤¦¤Î¤Ï¿å¤ËÀФʤɤòÅꤲ¤¿¤È¤¤Ë¤Ç¤¤ë¡¢Îؤˤʤäƹ¤¬¤Ã¤Æ¤¤¤¯ÇȤÎÌÏÍͤΤ³¤È¤Ç¤¹¡£
¤½¤ÎÇÈÌæ¤òË¡Àþ¤Î¸þ¤¤È¤·¤Æ¼ÂÁõ¤Ç¤¤ì¤Ð¡¢¤½¤ÎË¡Àþ¤Ç²èÁü¤¬ÇÈÌæ¤ÇÇÈΩ¤Ã¤¿¤è¤¦¤Ê¥Ý¥¹¥È¥¨¥Õ¥§¥¯¥È¤¬
¤Ç¤¤ë¤Î¤Ç¤Ï¤Ê¤¤¤Î¤«¤È»×¤Ã¤¿¤Î¤Ç¤¹¤¬¡¢Ê£»¨¤Ç¤è¤¯Ê¬¤«¤ê¤Þ¤»¤ó¡£
ÍפÏsin´Ø¿ô¤äcos´Ø¿ôÅù¤ÇÀ¸À®¤µ¤ì¤ëÎØ¤ò¡¢Ë¡Àþx¤ò-1.0¡Á1.0¤Ç¡¢Ë¡Àþy¤ò-1.0¡Á1.0¤ÇÇÈÌæ¤È¤·¤ÆÉÁ¼Ì¤¹¤ì¤Ð
ÇÈÌæ¤È¤·¤Æ¤ÎË¡Àþ¤¬À¸À®¤Ç¤¤ë¤Î¤Ç¤Ï¤Ê¤¤¤«¤È»×¤¤¤Þ¤¹¡£
¤½¤ì¤«¤éÀ¸À®¤·¤¿ÇÈÌæ¤Î¿ô¤À¤±for¤Ç¥ê¥Ô¡¼¥È½èÍý¤ò¤·¤ÆË¡Àþ¤ò½èÍý¤¹¤ì¤Ð¡¢
ÇÈÌæ¤¬ÇÈΩ¤Ã¤¿¤è¤¦¤ÊË¡Àþ¤¬À¸À®¤Ç¤¤ë¤Î¤Ç¤Ï¤Ê¤¤¤Ç¤·¤ç¤¦¤«¡£
°Ê²¼¤Î¥Õ¥é¥°¥á¥ó¥È¥·¥§¡¼¥À¡¼¥Õ¥¡¥¤¥ë¤Ï¤¢¤¯¤Þ¤Çºî¤ê¤«¤±¤Î¥¤¥á¡¼¥¸¤Ç¤·¤«¤Ê¤¤¤Î¤Ç¤¹¤¬¡¢
¤³¤¦¤¤¤Ã¤¿Ê·°Ïµ¤¤Î¤â¤Î¤òÁÛÄꤷ¤Æºî¤Ã¤Æ¤¤¤Þ¤·¤¿¡£
p_normalRipple.frag
// Uniforms uniform texture2D u_texture; uniform float u_radius; // ÇÈÌæ¤ÎȯÀ¸Ãæ¿´°ÌÃÖ¤ÎUVºÂɸ uniform float u_power; // ÇÈÌæ¤Î¹â¤µ¤Î¶¯¤µ uniform float u_time; // ·Ð²á»þ´Ö uniform float u_aspect; // ²èÌ̤Υ¢¥¹¥Ú¥¯¥ÈÈæ¡£ÇÈÌæ¤òÀµ±ß¤Ë¤¹¤ë»þ¤ËɬÍס© // Varyings varying vec2 v_texCoord; /* normalRipple_compute¤Î°ú¤¿ô¤Ë¤Ä¤¤¤Æ uv = ÇÈÌæ¤ÎȯÀ¸Ãæ¿´°ÌÃÖ¤ÎUVºÂɸ radius = ÇÈÌæ¤ÎȾ·Â power = ÇÈÌæ¤Î¹â¤µ¤Î¶¯¤µ time = ·Ð²á»þ´Ö */ vec3 normalRipple_compute (vec2 uv, float radius, float power, float time) { vec3 normal; // Ë¡Àþ // ²¿¤é¤«¤Î½èÍý return normal; } // main void main() { vec3 normal; // ÇÈÌæ¤Î¿ô¤À¤±·«¤êÊÖ¤¹ // RIPPLE_COUNT¤Ïdefs¤Ç»ØÄꤹ¤ëÇÈÌæ¤Î¿ô for (int i = 0; i < RIPPLE_COUNT; ++i) { normal += normalRipple_compute(v_texCoord, u_radius, u_power, u_time); } vec2 uv = normal.xy; vec3 result = sampler2D(u_texture, uv); gl_FragColor = vec4(result ,1.0); }
ĺÅÀ¥·¥§¡¼¥À¡¼¤Ë¤Ä¤¤¤Æ¤Ï¥Ý¥¹¥È¥¨¥Õ¥§¥¯¥È¤Ê¤¿¤á¡¢Ä̾ï¤ÈÊѤï¤ê¤Þ¤»¤ó¡£
p_normalRipple.vert
// Attributes attribute vec3 a_position; attribute vec2 a_texCoord; attribute vec4 a_color; // Uniforms uniform mat4 u_projectionMatrix; // Varyings varying vec2 v_texCoord; void main() { gl_Position = u_projectionMatrix * vec4(a_position, 1); v_texCoord = a_texCoord; }
¥¢¥É¥Ð¥¤¥¹¤ª´ê¤¤Ãפ·¤Þ¤¹¡£