erebus

annotate liberebus/src/scene.cc @ 17:e9da2916bc79

fixed the normal bug
author John Tsiombikas <nuclear@member.fsf.org>
date Mon, 26 May 2014 05:41:28 +0300
parents 93894c232d65
children 6204e4d3f445
rev   line source
nuclear@4 1 #include "scene.h"
nuclear@4 2
nuclear@8 3 // default enviromental parameters
nuclear@8 4 Environment::Environment()
nuclear@8 5 : bgcolor(0.05, 0.05, 0.05), ambient(0.05, 0.05, 0.05)
nuclear@8 6 {
nuclear@8 7 }
nuclear@8 8
nuclear@4 9 Scene::Scene()
nuclear@4 10 {
nuclear@4 11 active_cam = 0;
nuclear@4 12 root = new SceneNode;
nuclear@4 13 }
nuclear@4 14
nuclear@4 15 Scene::~Scene()
nuclear@4 16 {
nuclear@4 17 for(auto obj : objects) {
nuclear@4 18 delete obj;
nuclear@4 19 }
nuclear@4 20 for(auto node : nodes) {
nuclear@4 21 delete node;
nuclear@4 22 }
nuclear@4 23 delete root;
nuclear@4 24 }
nuclear@4 25
nuclear@8 26 void Scene::set_env(const Environment &env)
nuclear@8 27 {
nuclear@8 28 this->env = env;
nuclear@8 29 }
nuclear@8 30
nuclear@8 31 Environment &Scene::get_env()
nuclear@8 32 {
nuclear@8 33 return env;
nuclear@8 34 }
nuclear@8 35
nuclear@8 36 const Environment &Scene::get_env() const
nuclear@8 37 {
nuclear@8 38 return env;
nuclear@8 39 }
nuclear@8 40
nuclear@8 41 Color Scene::get_env_color() const
nuclear@8 42 {
nuclear@8 43 return env.bgcolor;
nuclear@8 44 }
nuclear@8 45
nuclear@8 46 Color Scene::get_env_color(const Ray &ray) const
nuclear@8 47 {
nuclear@8 48 // TODO
nuclear@8 49 return get_env_color();
nuclear@8 50 }
nuclear@8 51
nuclear@4 52 void Scene::add_object(Object *obj)
nuclear@4 53 {
nuclear@4 54 objects.push_back(obj);
nuclear@4 55 }
nuclear@4 56
nuclear@4 57 int Scene::get_object_count() const
nuclear@4 58 {
nuclear@4 59 return (int)objects.size();
nuclear@4 60 }
nuclear@4 61
nuclear@4 62 Object *Scene::get_object(int idx) const
nuclear@4 63 {
nuclear@4 64 return objects[idx];
nuclear@4 65 }
nuclear@4 66
nuclear@4 67 void Scene::add_node(SceneNode *node)
nuclear@4 68 {
nuclear@4 69 nodes.push_back(node);
nuclear@4 70
nuclear@4 71 if(!node->get_parent()) {
nuclear@4 72 root->add_child(node);
nuclear@4 73 }
nuclear@4 74 }
nuclear@4 75
nuclear@4 76 int Scene::get_node_count() const
nuclear@4 77 {
nuclear@4 78 return (int)nodes.size();
nuclear@4 79 }
nuclear@4 80
nuclear@4 81 SceneNode *Scene::get_node(int idx) const
nuclear@4 82 {
nuclear@4 83 return nodes[idx];
nuclear@4 84 }
nuclear@4 85
nuclear@4 86 void Scene::use_camera(Camera *cam)
nuclear@4 87 {
nuclear@4 88 active_cam = cam;
nuclear@4 89 }
nuclear@4 90
nuclear@4 91 Camera *Scene::get_active_camera() const
nuclear@4 92 {
nuclear@4 93 return active_cam;
nuclear@4 94 }
nuclear@4 95
nuclear@4 96 void Scene::update(long msec)
nuclear@4 97 {
nuclear@4 98 root->update(msec);
nuclear@4 99 }
nuclear@4 100
nuclear@4 101 bool Scene::intersect(const Ray &ray, RayHit *hit) const
nuclear@4 102 {
nuclear@4 103 return root->intersect(ray, hit);
nuclear@4 104 }
nuclear@4 105
nuclear@4 106 bool Scene::load(const char *fname)
nuclear@4 107 {
nuclear@4 108 return false; // TODO
nuclear@4 109 }