2013年10月25日 星期五

[GLSL]入門-5 用binary(2進制)來繪製點陣圖形


shader是無法載入字體的,但假使有一天我們想要在shader裡面秀出文字,這時候便可以透過,把文字轉成2 維矩陣方塊的方式(點陣字體),載入進shader。

所以在pd程式中,透過2進制去產生要丟進shader的pattern數值,然後才在shader中解譯回2維點陣圖案。並且最後才把圖形繪製在一個旋轉的cube上。


uniform vec2 iResolution;
uniform float pattern;

float bit(float n, vec2 p) {
 p.x=(floor(p.x*5.0));
 p.y=(floor(p.y*5.0));
 float k = (p.x + (5.0*p.y));
        if (int(mod(n/(exp2(k)), 2.0)) == 1){
  return 1.0;
 } else{
  return 0.0;
 } 
 
}
void main()
{
 vec2 uv = gl_FragCoord.xy/iResolution.xy;
 uv.y=1.0-uv.y;
 
 vec2 uv2=mod(uv*5.0,1.0);
 vec3 col2;
 if((uv2.x<0 .95="" uv2.x="">0.05)  && (uv2.y<0 .95="" uv2.y="">0.05) ){
  col2=vec3(1.0,1.0,1.0);
 }else{
  col2=vec3(0.3,0.3,0.3);
 }   
 vec3 col = vec3(bit(pattern, uv)*floor(mod(gl_FragCoord.x/2.0,2.0)) * floor(mod(gl_FragCoord.y/2.0,2.0)));
 gl_FragColor = vec4(col*col2,1.0);
}
shader code


Download