noise.cpp

Go to the documentation of this file.
00001 
00032 #include "llviewerprecompiledheaders.h"
00033 
00034 #include "noise.h"
00035 
00036 #include "llrand.h"
00037 
00038 // static
00039 #define B 0x100
00040 S32 p[B + B + 2];
00041 F32 g3[B + B + 2][3];
00042 F32 g2[B + B + 2][2];
00043 F32 g1[B + B + 2];
00044 S32 gNoiseStart = 1;
00045 
00046 
00047 F32 noise2(F32 *vec)
00048 {
00049         U8 bx0, bx1, by0, by1;
00050         U32 b00, b10, b01, b11;
00051         F32 rx0, rx1, ry0, ry1, *q, sx, sy, a, b, u, v;
00052         S32 i, j;
00053 
00054         if (gNoiseStart) {
00055                 gNoiseStart = 0;
00056                 init();
00057         }
00058 
00059 
00060         fast_setup(*vec, bx0, bx1, rx0, rx1);
00061         fast_setup(*(vec + 1), by0, by1, ry0, ry1);
00062 
00063         i = *(p + bx0);
00064         j = *(p + bx1);
00065 
00066         b00 = *(p + i + by0);
00067         b10 = *(p + j + by0);
00068         b01 = *(p + i + by1);
00069         b11 = *(p + j + by1);
00070 
00071         sx = s_curve(rx0);
00072         sy = s_curve(ry0);
00073 
00074 
00075         q = *(g2 + b00);
00076         u = fast_at2(rx0, ry0, q);
00077         q = *(g2 + b10); 
00078         v = fast_at2(rx1, ry0, q);
00079         a = lerp_m(sx, u, v);
00080 
00081         q = *(g2 + b01); 
00082         u = fast_at2(rx0,ry1,q);
00083         q = *(g2 + b11); 
00084         v = fast_at2(rx1,ry1,q);
00085         b = lerp_m(sx, u, v);
00086 
00087         return lerp_m(sy, a, b);
00088 }
00089 

Generated on Thu Jul 1 06:09:57 2010 for Second Life Viewer by  doxygen 1.4.7