Archived
1
Fork 0
This repository has been archived on 2025-04-12. You can view files and clone it, but cannot push or open issues or pull requests.
prism/example/src/example.cpp

59 lines
2.3 KiB
C++
Raw Normal View History

2020-12-28 15:45:09 -05:00
#include "example.hpp"
2021-04-20 12:45:55 -04:00
#include "platform.hpp"
#include "file.hpp"
#include "engine.hpp"
#include "scene.hpp"
2021-05-31 06:28:06 -04:00
#include "asset.hpp"
#include "path.hpp"
2021-04-20 12:45:55 -04:00
2021-10-14 08:51:58 -04:00
void app_main(prism::engine*) {
2021-09-13 17:19:59 -04:00
prism::set_domain_path(prism::domain::app, "{resource_dir}/data");
prism::set_domain_path(prism::domain::internal, "{resource_dir}/shaders");
2021-04-20 12:45:55 -04:00
platform::open_window("Example", {-1, -1, 1280, 720}, WindowFlags::Resizable);
2021-04-20 12:45:55 -04:00
}
void ExampleApp::initialize_render() {
engine->create_empty_scene();
auto scene = engine->get_scene();
auto camera_obj = scene->add_object();
auto& camera = scene->add<Camera>(camera_obj);
2021-05-31 06:28:06 -04:00
camera_look_at(*scene, camera_obj, {2, 2, -2}, {0, 0, 0});
2020-12-28 15:45:09 -05:00
2021-04-20 12:45:55 -04:00
auto sun_obj = scene->add_object();
auto& sun = scene->add<Light>(sun_obj);
sun.type = Light::Type::Point;
2021-04-20 12:45:55 -04:00
auto& sun_trans = scene->get<Transform>(sun_obj);
sun_trans.position = {-2, 5, 1};
auto second_sun_obj = scene->add_object();
auto& second_sun = scene->add<Light>(second_sun_obj);
second_sun.type = Light::Type::Point;
second_sun.color = {1, 0, 0};
scene->get<Transform>(second_sun_obj).position = {-14, 1, -1};
auto third_sun_obj = scene->add_object();
auto& third_sun = scene->add<Light>(third_sun_obj);
third_sun.type = Light::Type::Point;
third_sun.color = {0, 0, 1};
scene->get<Transform>(third_sun_obj).position = {3, 1, -1};
2021-05-31 06:28:06 -04:00
auto sphere_obj = scene->add_object();
auto& sphere_render = scene->add<Renderable>(sphere_obj);
2021-09-13 17:19:59 -04:00
sphere_render.mesh = assetm->get<Mesh>(prism::path(prism::app_domain / "models/sphere.model"));
sphere_render.materials = { assetm->get<Material>(prism::path(prism::app_domain / "materials/Material.material")) };
2021-05-31 06:28:06 -04:00
auto sibenik_obj = scene->add_object();
auto& sibenik_render = scene->add<Renderable>(sibenik_obj);
sibenik_render.mesh = assetm->get<Mesh>(prism::path(prism::app_domain / "models/sibenik.model"));
scene->get<Transform>(sibenik_obj).position.y = 13.5;
for(auto& part : sibenik_render.mesh->parts) {
sibenik_render.materials.push_back(assetm->get<Material>(prism::path(prism::app_domain / "materials" / (part.material_hint + ".material"))));
}
2021-05-31 06:28:06 -04:00
auto probe_obj = scene->add_object();
scene->add<EnvironmentProbe>(probe_obj).size = {80, 30, 25};
2020-12-28 15:45:09 -05:00
}