Changeset 1060
- Timestamp:
- Nov 11, 2011, 2:10:21 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/test/tutorial/tut03.cpp
r1058 r1060 38 38 m_size = size; 39 39 m_pixels = new u8vec4[size.x * size.y]; 40 m_ angle = 0.0f;40 m_time = 0.0f; 41 41 m_ready = false; 42 42 } … … 51 51 WorldEntity::TickGame(deltams); 52 52 53 m_angle += deltams * 0.0005f; 54 55 cmplx r0(cosf(m_angle), 0.8f * sinf(m_angle)); 53 m_time += deltams * 0.0005f; 54 55 f64cmplx center(0.001643721971153, 0.822467633298876); 56 //f64cmplx center(0.28693186889504513, 0.014286693904085048); 57 double radius = 8.0 * pow(2.0, -m_time); 58 double step = radius / (m_size.x > m_size.y ? m_size.x : m_size.y); 59 56 60 for (int j = 0; j < m_size.y; j++) 57 61 for (int i = 0; i < m_size.x; i++) 58 62 { 59 float const maxlen = 32.0f;63 double const maxlen = 32; 60 64 int const colors = 16; 61 int const maxiter = 30; 62 63 cmplx x0(4.0f / m_size.x * i - 2.0f, 3.0f / m_size.y * j - 1.5f); 64 cmplx r = x0 * r0; 65 cmplx z; 65 int const maxiter = 200; 66 67 f64cmplx delta(i - m_size.x / 2, j - m_size.y / 2); 68 69 f64cmplx z0 = center + step * delta; 70 f64cmplx r0 = z0; 71 //f64cmplx r0(0.28693186889504513, 0.014286693904085048); 72 //f64cmplx r0(-0.824,0.1711); 73 //f64cmplx r0(0.001643721971153, 0.822467633298876); 74 f64cmplx z; 66 75 int iter = maxiter; 67 for (z = r; iter && z.sqlen() < maxlen * maxlen; z = z * z + r)76 for (z = z0; iter && z.sqlen() < maxlen * maxlen; z = z * z + r0) 68 77 --iter; 69 78 70 float f = iter % colors; 71 float n = z.len(); 72 f += logf(logf(n) / logf(maxlen)) / logf(2.0f); 79 double f = iter; 80 double n = z.sqlen(); 81 82 /* Approximate log2(x) with x-1 because x is in [1,2]. */ 83 f += (log(n) * 0.5f / log(maxlen)) - 1.0f; 73 84 74 85 if (iter) 75 86 { 76 uint8_t red = 255 - f * (255.0f / (colors + 1)); 77 uint8_t green = 255 - f * (255.0f / (colors + 1)); 78 uint8_t blue = (f * 512.0f / (colors + 1) > 255) 79 ? 511 - (f * 512.0f / (colors + 1)) : 255; 87 double r = fmod(f, (double)colors); 88 if (r > (double)colors / 2) r = (double)colors - r; 89 double g = fmod(f * 1.3 + 4.0f, (double)colors); 90 if (g > (double)colors / 2) g = (double)colors - g; 91 double b = fmod(f * 1.7 - 8.0f, (double)colors); 92 if (b > (double)colors / 2) b = (double)colors - b; 93 94 uint8_t red = 255 - r * (255.0f / (colors + 1)); 95 uint8_t green = 255 - g * (255.0f / (colors + 1)); 96 uint8_t blue = 255 - b * (255.0f / (colors + 1)); 80 97 m_pixels[j * m_size.x + i] = u8vec4(red, green, blue, 0); 81 98 } … … 93 110 static float const vertices[] = 94 111 { 112 1.0f, 1.0f, 113 -1.0f, 1.0f, 114 -1.0f, -1.0f, 95 115 -1.0f, -1.0f, 96 116 1.0f, -1.0f, 97 117 1.0f, 1.0f, 98 1.0f, 1.0f,99 -1.0f, 1.0f,100 -1.0f, -1.0f,101 118 }; 102 119 … … 232 249 #endif 233 250 int m_vertexattrib, m_texattrib; 234 float m_ angle;251 float m_time; 235 252 bool m_ready; 236 253 }; … … 245 262 246 263 new DebugFps(5, 5); 247 new Fractal(ivec2( 640, 480));264 new Fractal(ivec2(1280, 960)); 248 265 249 266 app.Run();
Note: See TracChangeset
for help on using the changeset viewer.