JMU
Texture Mapping
An Introduction


Prof. David Bernstein
James Madison University

Computer Science Department
bernstdh@jmu.edu


Motivation
Terminology
Mappings
Mapping from Texture Space to Object Space
images/texture-map.gif
Mipmapping (Williams, 1983)
Procedural Textures

An Example: Stripes

openglexamples/textures/stripes.c (Fragment: stripes)
        /**
 * Fill the given matrix with a striped texture.
 *
 * @param stripeWidth   The width of each stripe
 * @param colorA        The color of one stripe
 * @param colorB        The color of the other stripe
 * @param smooth        0 for sharp stripes; otherwise for smooth
 * @param data          The matrix to fill
 */
void createStripedTexture(int stripeWidth, int* colorA, int* colorB, int smooth,
                          GLbyte data[256][256][3]) {
  int u, v;
  float s, t;

  for (u = 0; u < 256; u++) {
    for (v = 0; v < 256; v++) {
      s = sin(PI * u / stripeWidth);

      if (smooth) {
        t = (1.0 + s) / 2.0;
      } else {
        if (s > 0)
          t = 1.0;
        else
          t = 0.0;
      }

      data[u][v][0] = (GLbyte) ((1.0 - t) * colorA[0] + t * colorB[0]);
      data[u][v][1] = (GLbyte) ((1.0 - t) * colorA[1] + t * colorB[1]);
      data[u][v][2] = (GLbyte) ((1.0 - t) * colorA[2] + t * colorB[2]);
    }
  }
}

  // Create the striped "image"
  int stripeWidth = 32;
  GLbyte image[256][256][3];
  createStripedTexture(stripeWidth, purple, gold, 1, image);
        
Procedural Textures (cont.)