diff --git a/example/include/example.hpp b/example/include/example.hpp index 4ad98b8..d7b53b2 100644 --- a/example/include/example.hpp +++ b/example/include/example.hpp @@ -1,8 +1,16 @@ #pragma once #include "app.hpp" +#include "object.hpp" class ExampleApp : public prism::app { public: void initialize_render() override; + + void update(float delta_time) override; + +private: + Object main_object, camera_obj; + float main_object_spin = 0.0f; + float main_object_movement = 0.0f; }; \ No newline at end of file diff --git a/example/src/example.cpp b/example/src/example.cpp index 13c21e2..1c00e6d 100644 --- a/example/src/example.cpp +++ b/example/src/example.cpp @@ -18,13 +18,13 @@ void ExampleApp::initialize_render() { engine->create_empty_scene(); auto scene = engine->get_scene(); - auto camera_obj = scene->add_object(); + camera_obj = scene->add_object(); auto& camera = scene->add(camera_obj); - camera_look_at(*scene, camera_obj, {2, 2, -2}, {0, 0, 0}); auto sun_obj = scene->add_object(); auto& sun = scene->add(sun_obj); sun.type = Light::Type::Point; + sun.use_dynamic_shadows = true; auto& sun_trans = scene->get(sun_obj); sun_trans.position = {-2, 5, 1}; @@ -32,17 +32,19 @@ void ExampleApp::initialize_render() { auto& second_sun = scene->add(second_sun_obj); second_sun.type = Light::Type::Point; second_sun.color = {1, 0, 0}; + second_sun.use_dynamic_shadows = true; scene->get(second_sun_obj).position = {-14, 1, -1}; auto third_sun_obj = scene->add_object(); auto& third_sun = scene->add(third_sun_obj); third_sun.type = Light::Type::Point; third_sun.color = {0, 0, 1}; + third_sun.use_dynamic_shadows = true; scene->get(third_sun_obj).position = {3, 1, -1}; - auto sphere_obj = scene->add_object(); - auto& sphere_render = scene->add(sphere_obj); - sphere_render.mesh = assetm->get(prism::path(prism::app_domain / "models/sphere.model")); + main_object = scene->add_object(); + auto& sphere_render = scene->add(main_object); + sphere_render.mesh = assetm->get(prism::path(prism::app_domain / "models/bunny.model")); sphere_render.materials = { assetm->get(prism::path(prism::app_domain / "materials/Material.material")) }; auto sibenik_obj = scene->add_object(); @@ -56,4 +58,14 @@ void ExampleApp::initialize_render() { auto probe_obj = scene->add_object(); scene->add(probe_obj).size = {80, 30, 25}; +} + +void ExampleApp::update(const float delta_time) { + main_object_spin += delta_time * 5.0f; + main_object_movement += delta_time * 0.5f; + + engine->get_scene()->get(main_object).position.x = sin(main_object_movement) * 8.0f; + engine->get_scene()->get(main_object).rotation = euler_to_quat({0, radians(main_object_spin), 0}); + + camera_look_at(*engine->get_scene(), camera_obj, prism::float3{2, 2, -2} + engine->get_scene()->get(main_object).position, engine->get_scene()->get(main_object).position); } \ No newline at end of file