Hue shift + events to camera

This commit is contained in:
2020-06-23 00:38:55 -06:00
parent b106c1c028
commit af761ca337
4 changed files with 68 additions and 23 deletions

View File

@@ -20,23 +20,20 @@ MagnumRenderer::MagnumRenderer() :
m_init(false),
m_count(1) {}
MagnumRenderer::~MagnumRenderer() {}
MagnumRenderer::~MagnumRenderer() {
delete m_subjectObject;
delete m_subjectDrawable;
delete m_gridObject;
}
void MagnumRenderer::t(const float t) {
if (m_subjectObject != nullptr && m_subjectObject->parent()) {
m_subjectObject->resetTransformation();
m_subjectObject->translate(Vector3{0.f, 1.f, 0.f});
m_subjectObject->rotateY(Rad(t*Math::Constants<float>::pi()));
}
if (m_subjectDrawable)
m_subjectDrawable->t(t);
}
void MagnumRenderer::hue(float hue) {
if (m_subjectShader.id()) {
auto const color = Color3::fromHsv({Rad(hue), 1.f, 1.f});
m_subjectShader
.setDiffuseColor(color)
.setAmbientColor(Color3::fromHsv({color.hue(), 1.0f, 0.3f}));
}
if (m_subjectDrawable)
m_subjectDrawable->hue(hue);
}
void MagnumRenderer::count(int count) {
@@ -44,6 +41,10 @@ void MagnumRenderer::count(int count) {
m_subjectDrawable->count(count);
}
Containers::Optional<ArcBallCamera> MagnumRenderer::camera() {
return m_camera;
}
void MagnumRenderer::lazyInitialize() {
if (m_init) return;
@@ -71,7 +72,7 @@ void MagnumRenderer::lazyInitialize() {
m_gridShader = Shaders::Flat3D{};
m_gridShader.setColor(COLOR_GRID);
new GridDrawable{*m_gridObject, m_gridShader, m_grid, m_drawables};
m_gridDrawable = new GridDrawable{*m_gridObject, m_gridShader, m_grid, m_drawables};
}
// The Camera
@@ -150,10 +151,14 @@ void SubjectDrawable::draw(const Matrix4 &transformation,
static const float width = 3.f;
float x = -float(m_count)/2.f * width + width/2.f;
for (int i = 0; i < m_count; i++) {
const auto color = Color3::fromHsv({Rad(m_hue+float(i)*.2f), 1.f, 1.f});
m_shader
.setDiffuseColor(color)
.setAmbientColor(Color3::fromHsv({color.hue(), 1.0f, 0.3f}));
m_shader
.setTransformationMatrix(
transformation *
Matrix4::translation({x, 0.f, 0.f}))
Matrix4::translation({x, Math::sin(Rad(m_t*2.f+float(i))), 0.f}))
.draw(m_mesh);
x += width;
}
@@ -162,3 +167,11 @@ void SubjectDrawable::draw(const Matrix4 &transformation,
void SubjectDrawable::count(int count) {
m_count = count;
}
void SubjectDrawable::hue(float hue) {
m_hue = hue;
}
void SubjectDrawable::t(float t) {
m_t = t;
}