„Számítógépes grafika házi feladat tutorial” változatai közötti eltérés

Rohamcsiga (vitalap | szerkesztései)
Rohamcsiga (vitalap | szerkesztései)
792. sor: 792. sor:


   static const Vector env_color;
   static const Vector env_color;
  /* Majd a fényforrásokat is el kéne tárolnunk itt */


   Scene() : obj_num(0) { }  
   Scene() : obj_num(0) { }  


   Color shootRay(Ray r) const {
   Intersection getClosestIntersection(Ray r) const {
     Intersection closest_intersection;
     Intersection closest_intersection;
     float closest_intersection_dist;
     float closest_intersection_dist;
813. sor: 811. sor:
       }
       }
     }
     }
 
     return closest_intersection;
     if(closest_index != -1) {
      return objs[closest_index]->mat-> /* Kérdezzük meg tőle valahogy, hogy milyen színű abban a pontban. */;
    } else {
      return env_color;
    }
   }
   }
}
}
825. sor: 818. sor:
* Ha ennél gyorsabb algoritmusra van szükséged, akkor ajánlom egy BSP-fa implementálását, mármint konkrétan egy KD-fát csinálj, ne általános BSP-t. Ez nagyon gyors, és nem nehéz implementálni... csak meg kell írni...
* Ha ennél gyorsabb algoritmusra van szükséged, akkor ajánlom egy BSP-fa implementálását, mármint konkrétan egy KD-fát csinálj, ne általános BSP-t. Ez nagyon gyors, és nem nehéz implementálni... csak meg kell írni...
* Ami a kódból is látszódik, hogy még nem vagyunk készen, amikor meghatároztuk a legközelebbi metszéspontot, ugyanis nekünk egy színre van szükségünk, amit megjeleníthetünk, nem egy helyvektorra.
* Ami a kódból is látszódik, hogy még nem vagyunk készen, amikor meghatároztuk a legközelebbi metszéspontot, ugyanis nekünk egy színre van szükségünk, amit megjeleníthetünk, nem egy helyvektorra.
** Tesztelésképpen kipróbálhatod, hogy ha találsz metszéspontot, akkor mondjuk fehér színt rajzolsz ki, amúgy feketét. Ez egy ronda és unalmas eredményt ad, de legalább észre tudod venni, ha eddig valamit elrontottál.


=== Megvilágítás ===  
=== Megvilágítás ===  
842. sor: 834. sor:
struct Light {
struct Light {
   enum LightType {Ambient, Directional} type;
   enum LightType {Ambient, Directional} type;
   Vector pos;
   Vector pos, dir;
   Color color;
   Color color;
};
};
866. sor: 858. sor:
         } break;
         } break;
         case Light::Directional: {
         case Light::Directional: {
           float intensity = max(dot(inter.normal, light.pos.normalize()), 0.0f);
           float intensity = max(dot(inter.normal, light.dir.normalize()), 0.0f);
           accum_color += intensity * light.color * own_color;
           accum_color += intensity * light.color * own_color;
         } break;
         } break;
879. sor: 871. sor:
</syntaxhighlight> <br/>
</syntaxhighlight> <br/>


Az eddigi elmélet összerakva egy programmá: [http://pastebin.com/Qepzm3NP Kocka-tracer]
Az eddigi elmélet összerakva egy programmá: [http://pastebin.com/rjk1YMCD Kocka-tracer]
<br/>
<br/>
Az eredménye, összehasonlítva azzal, amit az OpenGL tud, ugyan olyan beállítások mellett:  
Az eredménye, összehasonlítva azzal, amit az OpenGL tud, ugyan olyan beállítások mellett: