1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
// Copyright 2009-2020 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
#include "scene.h"
namespace embree
{
extern "C" int g_instancing_mode;
TutorialScene::TutorialScene() {
}
TutorialScene::~TutorialScene() {
}
void TutorialScene::add(Ref<SceneGraph::GroupNode> group)
{
for (auto& node : group->children)
{
if (Ref<SceneGraph::LightNode> lightNode = node.dynamicCast<SceneGraph::LightNode>()) {
lights.push_back(lightNode->light);
}
else if (Ref<SceneGraph::TransformNode> xfmNode = node.dynamicCast<SceneGraph::TransformNode>()) {
addGeometry(xfmNode->child);
addGeometry(node);
}
else if (Ref<SceneGraph::PerspectiveCameraNode> cameraNode = node.dynamicCast<SceneGraph::PerspectiveCameraNode>()) {
cameras.push_back(cameraNode);
}
else {
addGeometry(node);
}
}
}
unsigned TutorialScene::addGeometry(Ref<SceneGraph::Node> node)
{
if (node->id == -1) {
geometries.push_back(node);
node->id = unsigned(geometries.size()-1);
}
return node->id;
}
unsigned TutorialScene::materialID(Ref<SceneGraph::MaterialNode> material)
{
if (material->id == -1) {
materials.push_back(material);
material->id = unsigned(materials.size()-1);
}
return material->id;
}
unsigned TutorialScene::geometryID(Ref<SceneGraph::Node> geometry)
{
assert(geometry->id != -1);
return geometry->id;
}
void TutorialScene::print_camera_names ()
{
if (cameras.size() == 0) {
std::cout << "no cameras inside the scene" << std::endl;
return;
}
for (size_t i=0; i<cameras.size(); i++)
std::cout << "camera " << i << ": " << cameras[i]->name << std::endl;
}
Ref<SceneGraph::PerspectiveCameraNode> TutorialScene::getDefaultCamera()
{
if (cameras.size()) return cameras[0];
return nullptr;
}
Ref<SceneGraph::PerspectiveCameraNode> TutorialScene::getCamera(const std::string& name)
{
for (size_t i=0; i<cameras.size(); i++)
if (cameras[i]->name == name) return cameras[i];
THROW_RUNTIME_ERROR("camera \"" + name +"\" not found");
}
};
|