Main Page | Namespace List | Class Hierarchy | Compound List | File List | Compound Members | File Members

PerlinTexture.cpp

Go to the documentation of this file.
00001 #include <stdio.h>
00002 #include <math.h>
00003 #include "PerlinTexture.h"
00004 
00005 PerlinTexture::PerlinTexture() {
00006   scale = NONE;
00007   int t = PERLINTEXTURE_BASE_SIZE * PERLINTEXTURE_BASE_SIZE;
00008   data = new unsigned char[t];
00009 };
00010 
00011 void PerlinTexture::refresh() {
00012   unsigned char i, j;
00013   int corners, sides, total;
00014   for (i=0; i <= PERLINTEXTURE_BASE_SIZE; i++) {
00015     for (j=0;j <= PERLINTEXTURE_BASE_SIZE; j++) {
00016       *get_scaled(i,j) = _gen_noise(i,j);
00017     }
00018   }
00019   unsigned char* tmpdata;
00020   int t = PERLINTEXTURE_BASE_SIZE * PERLINTEXTURE_BASE_SIZE;
00021   tmpdata = new unsigned char[t];
00022   unsigned char k,l;
00023   for (i=0; i <= PERLINTEXTURE_BASE_SIZE; i++) {
00024     for (j=0;j <= PERLINTEXTURE_BASE_SIZE; j++) {
00025       *(tmpdata + i * j + i) = _smooth(i, j);
00026     }
00027   }
00028   delete data;
00029   data = tmpdata;
00030   tmpdata = NULL;
00031 }
00032 
00033 unsigned char PerlinTexture::_gen_noise(unsigned char x, unsigned char y) {
00034   unsigned int n;
00035   n = x + y * 57;
00036   n = (unsigned int)pow((n << 13), n);
00037   n = n * (n * n * 15731 + 789221) + 1376312589;
00038   n = n & 0x7fffffff;
00039   n = (unsigned int) n / 1073741824.0;
00040   return((unsigned char)(1-n));
00041 }
00042 
00043 
00044 unsigned char PerlinTexture::_smooth(unsigned char x, unsigned char y) {
00045   int corners, sides, total;
00046   corners = (*get_scaled(x - 1, y - 1) + 
00047     *get_scaled(x + 1, y - 1) + *get_scaled(x - 1, y + 1) +
00048     *get_scaled(x + 1, y + 1)) / 16;
00049   sides = (*get_scaled(x - 1, y) + *get_scaled(x + 1, y) +
00050     *get_scaled(x, y - 1) + *get_scaled(x, y + 1)) / 8;
00051   total = *get_scaled(x, y) / 4 + sides + corners;
00052   return total;
00053 }

Generated on Sat Jul 12 04:29:21 2003 for glPirates by doxygen 1.3.2