Új hozzászólás Aktív témák

  • tothg77

    csendes tag

    Sziasztok!
    Perlin zajnak a megvalósításával próbálkozok GLSL-ben. 1D textúrában van a colormap de nem akar működni a program így, csak fekete képernyőt kapok. Ha az utolsó sort kicserélem
    gl_FragColor=vec4(c,c,c,0);-re akkor kirajzolja szürke árnyalatosan szóval nem a zajszámításban van a hiba.
    Semmi hibát nem jelez a fordító.
    Mért nem működik így a texture1D címzése? Aki tudja ne tartsa vissza.

    uniform sampler1D colormap;
    uniform sampler2D grads;
    #define ONE 1.0/256.0
    float fade(float t) {
    return t*t*t*(t*(t*6.0-15.0)+10.0);
    }
    float noise(vec2 xy) {
    vec2 xyfrac=fract(xy);
    float xfrac=xyfrac.x;
    float yfrac=xyfrac.y;
    float x=xy.x/ONE;
    float y=xy.y/ONE;
    float u=fade(xfrac);
    float v=fade(yfrac);

    vec2 gx1y1=texture2D(grads,vec2(x,y)).xy;
    vec2 gx2y1=texture2D(grads,vec2(x+ONE,y)).xy;
    vec2 gx2y2=texture2D(grads,vec2(x+ONE,y+ONE)).xy;
    vec2 gx1y2=texture2D(grads,vec2(x,y+ONE)).xy;


    float x1y1=dot(gx1y1,xyfrac);
    float x2y1=dot(gx2y1,vec2(xfrac-1.0,yfrac));
    float x2y2=dot(gx2y2,vec2(xfrac-1.0,yfrac-1.0));
    float x1y2=dot(gx1y2,vec2(xfrac,yfrac-1.0));

    float n1=mix(x1y1,x2y1,u);
    float n2=mix(x1y2,x2y2,u);

    return mix(n1,n2,v);

    }
    float fbm(vec2 xy,int octaves) {
    float c=0.0;float s=1.0;
    for (int i=0;i<octaves;i++) {
    c+=noise(xy*s)/s;
    s*=2.0;
    }
    return c;
    }

    void main() {
    float c=(1.0+fbm(gl_TexCoord[0].xy*4.0,6))*0.5;
    gl_FragColor=texture1D(colormap,c);
    }

Új hozzászólás Aktív témák