Changeset 57

Show
Ignore:
Timestamp:
02/17/10 08:21:16 (2 years ago)
Author:
FeepingCreature
Message:
  • Let's try this again
  • HAVE A FRACTAL
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/camera.d

    r56 r57  
    3737    res.lights = lights; res.iters = i_iters; res.max = max; res.cont = continuous; res.maxdepth = i_depth; 
    3838    res.loop = loop; res.loops = loops; 
     39    res.fov = fov; 
    3940    return res; 
    4041  } 
     
    4546  Light[] lights; 
    4647  vec pos, lookat, up, left, lp; 
     48  float fov; 
    4749  int width, height; 
    4850  void setUp(vec v) { 
     
    118120     
    119121    ray.cam_origin = pos; 
     122    ray.angle = fov * PI180 / .max(width, height); 
    120123    if (bit_isnan(ray.angle)) { 
    121124      ray.angle = float.epsilon; 
  • trunk/scene/fractal.d

    r55 r57  
    154154        cur += dist; 
    155155        float localε = ε; 
     156        /*logln("Local ε at ", cur, " => ", ray.at(cur), ": ", ray.radius(cur), " * ", localε, 
     157          "; ray angle ", ray.angle, 
     158          ", ray origin ", ray.cam_origin, 
     159          ", distance ", (ray.cam_origin - ray.at(cur)).length 
     160        );*/ 
    156161        if (adapt) 
    157162          localε *= ray.radius(cur); 
    158         if (localε < float.epsilon) 
     163         
     164        if (localε !> float.epsilon) 
    159165          localε = float.epsilon; // just to be sure 
    160         // logln("Local ε at ", ray.at(cur), ": ", localε, "; ray angle ", ray.angle, ", ray origin ", ray.cam_origin); 
    161166         
    162         if (dist !> localε) { // NOT < .. workaround for nans 
     167        if (dist < localε) { 
    163168          auto norm = getGrad(ray.at(cur), localε).normalized; 
    164169           
    165           if (norm.dot(ray.dir) > 0 && iters--) { 
     170          if (norm.dot(ray.dir) > 0 && max_steps--) { 
    166171            cur += localε - dist; // definitely move away at least this much 
    167172            continue; // we're pointed AWAY. Not stopping. 
    168173          } 
    169174          // don't produce a hit if we're clearly moving away 
    170           if (iters) hit.set(cur, true, norm); 
     175          if (max_steps) hit.set(cur, true, norm); 
    171176          return; 
    172177        }