• fullscreen
  • TextureCube.pde
  • /**
     * TexturedCube
     * by Dave Bollinger.
     * 
     * Drag mouse to rotate cube. Demonstrates use of u/v coords in 
     * vertex() and effect on texture(). The textures get distorted using
     * the P3D renderer as you can see, but they look great using OPENGL.
    */
    
    
    PImage tex;
    float rotx = PI/4;
    float roty = PI/4;
    
    void setup() 
    {
      size(640, 640, P3D);
      tex = loadImage("gbor01.jpg");
      textureMode(NORMALIZED);
      fill(150);
      stroke(color(44,48,32));
    }
    
    void draw() 
    {
      background(0);
      noStroke();
      translate(width/2.0, height/2.0, -100);
      rotateX(rotx);
      rotateY(roty);
      scale(150);
      TexturedCube(tex);
    }
    
    void TexturedCube(PImage tex) {
      beginShape(QUADS);
      texture(tex);
    
      // Given one texture and six faces, we can easily set up the uv coordinates
      // such that four of the faces tile "perfectly" along either u or v, but the other
      // two faces cannot be so aligned.  This code tiles "along" u, "around" the X/Z faces
      // and fudges the Y faces - the Y faces are arbitrarily aligned such that a
      // rotation along the X axis will put the "top" of either texture at the "top"
      // of the screen, but is not otherwised aligned with the X/Z faces. (This
      // just affects what type of symmetry is required if you need seamless
      // tiling all the way around the cube)
      
      // +Z "front" face
      vertex(-1, -1,  1, 0, 0);
      vertex( 1, -1,  1, 1, 0);
      vertex( 1,  1,  1, 1, 1);
      vertex(-1,  1,  1, 0, 1);
    
      // -Z "back" face
      vertex( 1, -1, -1, 0, 0);
      vertex(-1, -1, -1, 1, 0);
      vertex(-1,  1, -1, 1, 1);
      vertex( 1,  1, -1, 0, 1);
    
      // +Y "bottom" face
      vertex(-1,  1,  1, 0, 0);
      vertex( 1,  1,  1, 1, 0);
      vertex( 1,  1, -1, 1, 1);
      vertex(-1,  1, -1, 0, 1);
    
      // -Y "top" face
      vertex(-1, -1, -1, 0, 0);
      vertex( 1, -1, -1, 1, 0);
      vertex( 1, -1,  1, 1, 1);
      vertex(-1, -1,  1, 0, 1);
    
      // +X "right" face
      vertex( 1, -1,  1, 0, 0);
      vertex( 1, -1, -1, 1, 0);
      vertex( 1,  1, -1, 1, 1);
      vertex( 1,  1,  1, 0, 1);
    
      // -X "left" face
      vertex(-1, -1, -1, 0, 0);
      vertex(-1, -1,  1, 1, 0);
      vertex(-1,  1,  1, 1, 1);
      vertex(-1,  1, -1, 0, 1);
    
      endShape();
    }
    
    void mouseDragged() {
      float rate = 0.01;
      rotx += (pmouseY-mouseY) * rate;
      roty += (mouseX-pmouseX) * rate;
    }
    

    code

    tweaks (0)

    about this sketch

    This sketch is running as Java applet, exported from Processing.

    This sketch is saved as a draft and it is not published on the homepage and browse page.

    license

    advertisement

    Gottfried Beyreuther

    TextureCube

    Add to Faves Me Likey@! 1
    You must login/register to add this sketch to your favorites.

    You need to login/register to comment.