How to do it...

To create a 2D noise texture with GLM, perform the following steps:

  1. Include the GLM header that includes the noise functions:
#include <glm/gtc/noise.hpp> 
  1. Generate the noise data using the previous equation:
GLubyte *data = new GLubyte[ width * height * 4 ]; 
 
float xFactor = 1.0f / (width - 1); 
float yFactor = 1.0f / (height - 1); 
 
for( int row = 0; row < height; row++ ) { 
  for( int col = 0 ; col < width; col++ ) { 
    float x = xFactor * col; 
    float y = yFactor * row; 
    float sum = 0.0f; 
    float freq = a; 
    float scale = b; 
     
    // Compute the sum for each octave 
    for( int oct = 0; oct < 4; oct++ ) { 
      glm::vec2 p(x * freq, y * freq); 
      float val = glm::perlin(p) / scale; 
      sum += val; 
      float result = (sum + 1.0f)/ 2.0f; 
 
      // Store in texture buffer 
      data[((row * width + col) * 4) + oct] =  
                   (GLubyte) ( result * 255.0f ); 
      freq *= 2.0f;   // Double the frequency 
      scale *= b;     // Next power of b 
    } 
  } 
} 
  1. Load the data into an OpenGL texture:
GLuint texID; 
glGenTextures(1, &texID); 
 
glBindTexture(GL_TEXTURE_2D, texID); 
glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, width, height); 
glTexSubImage2D(GL_TEXTURE_2D,0,0,0,width,height,
GL_RGBA,GL_UNSIGNED_BYTE,data); delete [] data;
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.19.31.73