Mostra notizie nelle discussioni
  • Avatar
    Scritto da
    Non Autenticato
    il 2009-01-22 12:36:00.0 alle 2009-01-22 12:36:00.0
    Pura Arte in C++ (da oscar)
    Immagine postata dall'utente
    To Ken Perlin for the development of Perlin Noise, a technique used to produce natural appearing textures on computer generated surfaces for motion picture visual effects.

    The development of Perlin Noise has allowed computer graphics artists to better represent the complexity of natural phenomena in visual effects for the motion picture industry.

    Un Genio: http://mrl.nyu.edu/~perlin/

    /* coherent noise function over 1, 2 or 3 dimensions */
    /* (copyright Ken Perlin) */
    
    #include <stdlib.h>
    #include <stdio.h>
    #include <math.h>
    
    #define B 0x100
    #define BM 0xff
    
    #define N 0x1000
    #define NP 12   /* 2^N */
    #define NM 0xfff
    
    static p[B + B + 2];
    static float g3[B + B + 2][3];
    static float g2[B + B + 2][2];
    static float g1[B + B + 2];
    static start = 1;
    
    static void init(void);
    
    #define s_curve(t) ( t * t * (3. - 2. * t) )
    
    #define lerp(t, a, b) ( a + t * (b - a) )
    
    #define setup(i,b0,b1,r0,r1)\
        t = vec[i] + N;\
        b0 = ((int)t) & BM;\
        b1 = (b0+1) & BM;\
        r0 = t - (int)t;\
        r1 = r0 - 1.;
    
    double noise1(double arg)
    {
        int bx0, bx1;
        float rx0, rx1, sx, t, u, v, vec[1];
    
        vec[0] = arg;
        if (start) {
            start = 0;
            init();
        }
    
        setup(0, bx0,bx1, rx0,rx1);
    
        sx = s_curve(rx0);
    
        u = rx0 * g1[ p[ bx0 ] ];
        v = rx1 * g1[ p[ bx1 ] ];
    
        return lerp(sx, u, v);
    }
    
    float noise2(float vec[2])
    {
        int bx0, bx1, by0, by1, b00, b10, b01, b11;
        float rx0, rx1, ry0, ry1, *q, sx, sy, a, b, t, u, v;
        register i, j;
    
        if (start) {
            start = 0;
            init();
        }
    
        setup(0, bx0,bx1, rx0,rx1);
        setup(1, by0,by1, ry0,ry1);
    
        i = p[ bx0 ];
        j = p[ bx1 ];
    
        b00 = p[ i + by0 ];
        b10 = p[ j + by0 ];
        b01 = p[ i + by1 ];
        b11 = p[ j + by1 ];
    
        sx = s_curve(rx0);
        sy = s_curve(ry0);
    
    #define at2(rx,ry) ( rx * q[0] + ry * q[1] )
    
        q = g2[ b00 ] ; u = at2(rx0,ry0);
        q = g2[ b10 ] ; v = at2(rx1,ry0);
        a = lerp(sx, u, v);
    
        q = g2[ b01 ] ; u = at2(rx0,ry1);
        q = g2[ b11 ] ; v = at2(rx1,ry1);
        b = lerp(sx, u, v);
    
        return lerp(sy, a, b);
    }
    
    float noise3(float vec[3])
    {
        int bx0, bx1, by0, by1, bz0, bz1, b00, b10, b01, b11;
        float rx0, rx1, ry0, ry1, rz0, rz1, *q, sy, sz, a, b, c, d, t, u, v;
        register i, j;
    
        if (start) {
            start = 0;
            init();
        }
    
        setup(0, bx0,bx1, rx0,rx1);
        setup(1, by0,by1, ry0,ry1);
        setup(2, bz0,bz1, rz0,rz1);
    
        i = p[ bx0 ];
        j = p[ bx1 ];
    
        b00 = p[ i + by0 ];
        b10 = p[ j + by0 ];
        b01 = p[ i + by1 ];
        b11 = p[ j + by1 ];
    
        t  = s_curve(rx0);
        sy = s_curve(ry0);
        sz = s_curve(rz0);
    
    #define at3(rx,ry,rz) ( rx * q[0] + ry * q[1] + rz * q[2] )
    
        q = g3[ b00 + bz0 ] ; u = at3(rx0,ry0,rz0);
        q = g3[ b10 + bz0 ] ; v = at3(rx1,ry0,rz0);
        a = lerp(t, u, v);
    
        q = g3[ b01 + bz0 ] ; u = at3(rx0,ry1,rz0);
        q = g3[ b11 + bz0 ] ; v = at3(rx1,ry1,rz0);
        b = lerp(t, u, v);
    
        c = lerp(sy, a, b);
    
        q = g3[ b00 + bz1 ] ; u = at3(rx0,ry0,rz1);
        q = g3[ b10 + bz1 ] ; v = at3(rx1,ry0,rz1);
        a = lerp(t, u, v);
    
        q = g3[ b01 + bz1 ] ; u = at3(rx0,ry1,rz1);
        q = g3[ b11 + bz1 ] ; v = at3(rx1,ry1,rz1);
        b = lerp(t, u, v);
    
        d = lerp(sy, a, b);
    
        return lerp(sz, c, d);
    }
    
    static void normalize2(float v[2])
    {
        float s;
    
        s = sqrt(v[0] * v[0] + v[1] * v[1]);
        v[0] = v[0] / s;
        v[1] = v[1] / s;
    }
    
    static void normalize3(float v[3])
    {
        float s;
    
        s = sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
        v[0] = v[0] / s;
        v[1] = v[1] / s;
        v[2] = v[2] / s;
    }
    
    static void init(void)
    {
        int i, j, k;
    
        for (i = 0 ; i < B ; i++) {
            p[i] = i;
    
            g1[i] = (float)((random() % (B + B)) - B) / B;
    
            for (j = 0 ; j < 2 ; j++)
                g2[i][j] = (float)((random() % (B + B)) - B) / B;
            normalize2(g2[i]);
    
            for (j = 0 ; j < 3 ; j++)
                g3[i][j] = (float)((random() % (B + B)) - B) / B;
            normalize3(g3[i]);
        }
    
        while (--i) {
            k = p[i];
            p[i] = p[j = random() % B];
            p[j] = k;
        }
    
        for (i = 0 ; i < B + 2 ; i++) {
            p[B + i] = p[i];
            g1[B + i] = g1[i];
            for (j = 0 ; j < 2 ; j++)
                g2[B + i][j] = g2[i][j];
            for (j = 0 ; j < 3 ; j++)
                g3[B + i][j] = g3[i][j];
        }
    }
    

    • Avatar
      Scritto da
      Non Autenticato
      il 2009-01-22 13:19:00.0 alle 2009-01-22 13:19:00.0
      Re: Pura Arte in C++ (da oscar)
      in lisp lo stesso listato sarebbe lungo 3 righe
      in giava 3 e mezzo,con i commenti
      • Avatar
        Scritto da
        Non Autenticato
        il 2009-01-22 16:21:00.0 alle 2009-01-22 16:21:00.0
        Re: Pura Arte in C++ (da oscar)
        - Scritto da:
        > in lisp lo stesso listato sarebbe lungo 3 righe
        > in giava 3 e mezzo,con i commenti

        Dai prova a scrivere le 3 righe.
        • Avatar
          Scritto da
          Non Autenticato
          il 2009-01-22 16:47:00.0 alle 2009-01-22 16:47:00.0
          Re: Pura Arte in C++ (da oscar)

          - Scritto da:
          > - Scritto da:
          > > in lisp lo stesso listato sarebbe lungo 3 righe
          > > in giava 3 e mezzo,con i commenti
          >
          > Dai prova a scrivere le 3 righe.


          drzf_ut=~//
          drzf_ut.jp(drzf_ut[drzf_ut*]) {
            drzf_ut~//
          }


          manca solo il compilatore Imbarazzato
          • Avatar
            Scritto da
            Non Autenticato
            il 2009-01-22 16:55:00.0 alle 2009-01-22 16:55:00.0
            Re: Pura Arte in C++ (da oscar)

            - Scritto da:
            >
            > - Scritto da:
            > > - Scritto da:
            > > > in lisp lo stesso listato sarebbe lungo 3
            > righe
            > > > in giava 3 e mezzo,con i commenti
            > >
            > > Dai prova a scrivere le 3 righe.
            >
            >
            >
            drzf_ut=~//
            > drzf_ut.jp(drzf_ut[drzf_ut*]) {
            >   drzf_ut~//
            > }

            >
            > manca solo il compilatore Imbarazzato

            Io ho inventato una macchina per ingrandire di 10 volte le uova di coniglio.
            Ora manca solo un coniglio che faccia le uova.
            (in realtà ci sarebbe, ma i perolieri lo tengono chiuso nel cassetto per venderci le uova di gallina prodotte con il mangime derivato dal petrolio)
            • Avatar
              Scritto da
              Non Autenticato
              il 2009-01-22 16:56:00.0 alle 2009-01-22 16:56:00.0
              Re: Pura Arte in C++ (da oscar)

              - Scritto da:
              >
              > - Scritto da:
              > >
              > > - Scritto da:
              > > > - Scritto da:
              > > > > in lisp lo stesso listato sarebbe lungo 3
              > > righe
              > > > > in giava 3 e mezzo,con i commenti
              > > >
              > > > Dai prova a scrivere le 3 righe.
              > >
              > >
              > >
              drzf_ut=~//
              > > drzf_ut.jp(drzf_ut[drzf_ut*]) {
              > >   drzf_ut~//
              > > }

              > >
              > > manca solo il compilatore Imbarazzato
              >
              > Io ho inventato una macchina per ingrandire di 10
              > volte le uova di
              > coniglio.
              > Ora manca solo un coniglio che faccia le uova.
              > (in realtà ci sarebbe, ma i perolieri lo tengono
              > chiuso nel cassetto per venderci le uova di
              > gallina prodotte con il mangime derivato dal
              > petrolio)
              con Obama tutto questo cambierà!!!!!
              • Avatar
                ☺
                Scritto da
                il 2009-01-22 17:03:00.0 alle 2009-01-22 17:03:00.0
                Trollate totali: 32
                Re: Pura Arte in C++ (da oscar)

                - Scritto da:
                >
                > - Scritto da:
                > >
                > > - Scritto da:
                > > >
                > > > - Scritto da:
                > > > > - Scritto da:
                > > > > > in lisp lo stesso listato sarebbe lungo 3
                > > > righe
                > > > > > in giava 3 e mezzo,con i commenti
                > > > >
                > > > > Dai prova a scrivere le 3 righe.
                > > >
                > > >
                > > >
                drzf_ut=~//
                > > > drzf_ut.jp(drzf_ut[drzf_ut*]) {
                > > >   drzf_ut~//
                > > > }

                > > >
                > > > manca solo il compilatore Imbarazzato
                > >
                > > Io ho inventato una macchina per ingrandire di
                > 10
                > > volte le uova di
                > > coniglio.
                > > Ora manca solo un coniglio che faccia le uova.
                > > (in realtà ci sarebbe, ma i perolieri lo tengono
                > > chiuso nel cassetto per venderci le uova di
                > > gallina prodotte con il mangime derivato dal
                > > petrolio)
                > con Obama tutto questo cambierà!!!!!

                yeah!
            • Avatar
              ☺
              Scritto da
              avvelentani
              Cubicolario
              il 2009-01-22 17:18:00.0 alle 2009-01-22 17:18:00.0
              Trollate totali: 18184
              Re: Pura Arte in C++ (da oscar)

              - Scritto da:
              >
              > - Scritto da:
              > >
              > > - Scritto da:
              > > > - Scritto da:
              > > > > in lisp lo stesso listato sarebbe lungo 3
              > > righe
              > > > > in giava 3 e mezzo,con i commenti
              > > >
              > > > Dai prova a scrivere le 3 righe.
              > >
              > >
              > >
              drzf_ut=~//
              > > drzf_ut.jp(drzf_ut[drzf_ut*]) {
              > >   drzf_ut~//
              > > }

              > >
              > > manca solo il compilatore Imbarazzato
              >
              > Io ho inventato una macchina per ingrandire di 10
              > volte le uova di
              > coniglio.
              > Ora manca solo un coniglio che faccia le uova.
              > (in realtà ci sarebbe, ma i perolieri lo tengono
              > chiuso nel cassetto per venderci le uova di
              > gallina prodotte con il mangime derivato dal
              > petrolio)

              tutta colpa del signoraggio Arrabbiato
              I think happiness is love
              - Vladimir Putin
<softv>

Pagina generata in 41 millisecondi

Utenti attivi: 15 nell'ultimo minuto, 32 negli ultimi cinque minuti, 58 negli ultimi 15 minuti