Add some movement to the example scene
This commit is contained in:
parent
368b033929
commit
31238c20ad
2 changed files with 25 additions and 5 deletions
|
@ -1,8 +1,16 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "app.hpp"
|
#include "app.hpp"
|
||||||
|
#include "object.hpp"
|
||||||
|
|
||||||
class ExampleApp : public prism::app {
|
class ExampleApp : public prism::app {
|
||||||
public:
|
public:
|
||||||
void initialize_render() override;
|
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;
|
||||||
};
|
};
|
|
@ -18,13 +18,13 @@ void ExampleApp::initialize_render() {
|
||||||
engine->create_empty_scene();
|
engine->create_empty_scene();
|
||||||
auto scene = engine->get_scene();
|
auto scene = engine->get_scene();
|
||||||
|
|
||||||
auto camera_obj = scene->add_object();
|
camera_obj = scene->add_object();
|
||||||
auto& camera = scene->add<Camera>(camera_obj);
|
auto& camera = scene->add<Camera>(camera_obj);
|
||||||
camera_look_at(*scene, camera_obj, {2, 2, -2}, {0, 0, 0});
|
|
||||||
|
|
||||||
auto sun_obj = scene->add_object();
|
auto sun_obj = scene->add_object();
|
||||||
auto& sun = scene->add<Light>(sun_obj);
|
auto& sun = scene->add<Light>(sun_obj);
|
||||||
sun.type = Light::Type::Point;
|
sun.type = Light::Type::Point;
|
||||||
|
sun.use_dynamic_shadows = true;
|
||||||
auto& sun_trans = scene->get<Transform>(sun_obj);
|
auto& sun_trans = scene->get<Transform>(sun_obj);
|
||||||
sun_trans.position = {-2, 5, 1};
|
sun_trans.position = {-2, 5, 1};
|
||||||
|
|
||||||
|
@ -32,17 +32,19 @@ void ExampleApp::initialize_render() {
|
||||||
auto& second_sun = scene->add<Light>(second_sun_obj);
|
auto& second_sun = scene->add<Light>(second_sun_obj);
|
||||||
second_sun.type = Light::Type::Point;
|
second_sun.type = Light::Type::Point;
|
||||||
second_sun.color = {1, 0, 0};
|
second_sun.color = {1, 0, 0};
|
||||||
|
second_sun.use_dynamic_shadows = true;
|
||||||
scene->get<Transform>(second_sun_obj).position = {-14, 1, -1};
|
scene->get<Transform>(second_sun_obj).position = {-14, 1, -1};
|
||||||
|
|
||||||
auto third_sun_obj = scene->add_object();
|
auto third_sun_obj = scene->add_object();
|
||||||
auto& third_sun = scene->add<Light>(third_sun_obj);
|
auto& third_sun = scene->add<Light>(third_sun_obj);
|
||||||
third_sun.type = Light::Type::Point;
|
third_sun.type = Light::Type::Point;
|
||||||
third_sun.color = {0, 0, 1};
|
third_sun.color = {0, 0, 1};
|
||||||
|
third_sun.use_dynamic_shadows = true;
|
||||||
scene->get<Transform>(third_sun_obj).position = {3, 1, -1};
|
scene->get<Transform>(third_sun_obj).position = {3, 1, -1};
|
||||||
|
|
||||||
auto sphere_obj = scene->add_object();
|
main_object = scene->add_object();
|
||||||
auto& sphere_render = scene->add<Renderable>(sphere_obj);
|
auto& sphere_render = scene->add<Renderable>(main_object);
|
||||||
sphere_render.mesh = assetm->get<Mesh>(prism::path(prism::app_domain / "models/sphere.model"));
|
sphere_render.mesh = assetm->get<Mesh>(prism::path(prism::app_domain / "models/bunny.model"));
|
||||||
sphere_render.materials = { assetm->get<Material>(prism::path(prism::app_domain / "materials/Material.material")) };
|
sphere_render.materials = { assetm->get<Material>(prism::path(prism::app_domain / "materials/Material.material")) };
|
||||||
|
|
||||||
auto sibenik_obj = scene->add_object();
|
auto sibenik_obj = scene->add_object();
|
||||||
|
@ -57,3 +59,13 @@ void ExampleApp::initialize_render() {
|
||||||
auto probe_obj = scene->add_object();
|
auto probe_obj = scene->add_object();
|
||||||
scene->add<EnvironmentProbe>(probe_obj).size = {80, 30, 25};
|
scene->add<EnvironmentProbe>(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<Transform>(main_object).position.x = sin(main_object_movement) * 8.0f;
|
||||||
|
engine->get_scene()->get<Transform>(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<Transform>(main_object).position, engine->get_scene()->get<Transform>(main_object).position);
|
||||||
|
}
|
Reference in a new issue