Example app adjustments to the changes, using factory in MovingCubeApp

This commit is contained in:
Vladyslav Baranovskyi
2024-06-13 23:35:02 +03:00
parent d26d6cfff3
commit a0a4c935e4
2 changed files with 74 additions and 8 deletions

View File

@@ -9,6 +9,7 @@
#include "Scene/Scene.hpp"
#include "Scene/Shader/Shader.hpp"
#include "Scene/Geometry.hpp"
#include "Scene/GeometryFactory.hpp"
#include "Scene/Material.hpp"
#include "Scene/Vertex.hpp"
#include "Scene/SimpleDrawable.hpp"
@@ -27,7 +28,7 @@ namespace OpenVulkano
{
struct SceneElement
{
Scene::Geometry m_geometry;
Scene::Geometry *m_geometry;
Scene::SimpleDrawable m_drawable;
Scene::Node m_node;
};
@@ -46,11 +47,16 @@ namespace OpenVulkano
SceneElement m_whiteBox;
SceneElement m_redBox;
void CreateSceneElement(SceneElement *dest, const Math::Vector4f &color, float scale)
SceneElement m_plane;
SceneElement m_sphere;
SceneElement m_hemisphere;
SceneElement m_triangle;
SceneElement m_cylinder;
SceneElement m_pyramid;
void CompleteSceneElement(SceneElement *dest)
{
dest->m_geometry.InitCube(scale, scale, scale, color);
dest->m_drawable.Init(&m_shader, &dest->m_geometry, &m_material);
dest->m_drawable.Init(&m_shader, dest->m_geometry, &m_material);
dest->m_node.Init();
m_scene.GetRoot()->AddChild(&dest->m_node);
dest->m_node.SetUpdateFrequency(Scene::UpdateFrequency::Always);
@@ -58,6 +64,48 @@ namespace OpenVulkano
dest->m_node.SetMatrix(Math::Matrix4f(1));
}
void CreateSceneElement(SceneElement *dest, const Math::Vector4f &color, float scale)
{
dest->m_geometry = Scene::GeometryFactory::MakeCube(scale, scale, scale, color);
CompleteSceneElement(dest);
}
void CreatePlane(SceneElement *dest, const Math::Vector4f& color)
{
dest->m_geometry = Scene::GeometryFactory::MakePlane(1, 1, color);
CompleteSceneElement(dest);
}
void CreateSphere(SceneElement *dest, const Math::Vector4f& color)
{
dest->m_geometry = Scene::GeometryFactory::MakeSphere(1, 32, 16, color);
CompleteSceneElement(dest);
}
void CreateHemisphere(SceneElement *dest, const Math::Vector4f& color)
{
dest->m_geometry = Scene::GeometryFactory::MakeHemisphere(1, 16, 16, color);
CompleteSceneElement(dest);
}
void CreateTriangle(SceneElement *dest, const Math::Vector4f& color)
{
dest->m_geometry = Scene::GeometryFactory::MakeTriangle(Math::Vector3f(0.5, 0., 0.), Math::Vector3f(0., 0.5, 0.), Math::Vector3f(-0.5, 0., 0.), color);
CompleteSceneElement(dest);
}
void CreateCylinder(SceneElement *dest, const Math::Vector4f& color)
{
dest->m_geometry = Scene::GeometryFactory::MakeCylinder(1, 3, 64, color);
CompleteSceneElement(dest);
}
void CreatePyramid(SceneElement *dest, const Math::Vector4f& color)
{
dest->m_geometry = Scene::GeometryFactory::MakePyramid(0.5, 2, color);
CompleteSceneElement(dest);
}
public:
void Init() override
{
@@ -95,6 +143,24 @@ namespace OpenVulkano
m_sequenceAnimationController.AddAnimationStep(Math::PoseF(Math::Utils::normalize(Math::QuaternionF(3, 2, 1, 1)), Math::Vector3f_SIMD(1, 1, -1)), 3);
m_sequenceAnimationController.AddAnimationStep(Math::PoseF(Math::Utils::normalize(Math::QuaternionF(0, 0, 1, 1)), Math::Vector3f_SIMD(0, 1, 0)), 1);
m_sequenceAnimationController.SetAnimationPoseResetTime(10);
CreatePlane(&m_plane, Math::Vector4f(0.3, 0.6, 0.9, 1.0));
m_plane.m_node.worldMat = Math::Utils::translate(Math::Vector3f(3, 0, 0));
CreateSphere(&m_sphere, Math::Vector4f(0.9, 0.6, 0.9, 1.0));
m_sphere.m_node.worldMat = Math::Utils::translate(Math::Vector3f(5, 0, 0));
CreateHemisphere(&m_hemisphere, Math::Vector4f(0.6, 0.3, 0.9, 1.0));
m_hemisphere.m_node.worldMat = Math::Utils::translate(Math::Vector3f(7, 0, 0));
CreateTriangle(&m_triangle, Math::Vector4f(0.6, 0.9, 0.3, 1.0));
m_triangle.m_node.worldMat = Math::Utils::translate(Math::Vector3f(9, 0, 0));
CreateCylinder(&m_cylinder, Math::Vector4f(0.3, 0.9, 0.9, 1.0));
m_cylinder.m_node.worldMat = Math::Utils::translate(Math::Vector3f(11, 0, 0));
CreatePyramid(&m_pyramid, Math::Vector4f(0.9, 0.9, 0.6, 1.0));
m_pyramid.m_node.worldMat = Math::Utils::translate(Math::Vector3f(13, 0, 0));
}
void OnSimpleAnimationCompleted(Scene::SimpleAnimationController *anim)