Skip to content

Commit d8cb41e

Browse files
committed
✨ Add custom render properties
1 parent 82cf3e5 commit d8cb41e

File tree

5 files changed

+43
-3
lines changed

5 files changed

+43
-3
lines changed

include/game/scene.hpp

+3
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ class Scene {
4747

4848
addObject(std::make_shared<Star>(Transform{glm::vec3(60.0f, -10.0f, -20.0f), glm::vec3(5.0f, 5.0f, 5.0f)}));
4949

50+
addObject(std::make_shared<Star>(Transform{glm::vec3(220.0f, -30.0f, 55.0f), glm::vec3(10.0f, 10.0f, 10.0f)},
51+
glm::vec4(1.0f, 1.0f, 1.0f, 1.0f), 2.0e14f));
52+
5053
initializePlatforms();
5154
}
5255

include/graphics/renderer.hpp

+12
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@
55
#include "graphics/mesh.hpp"
66
#include "interpolatedTransform.hpp"
77

8+
struct CustomRenderProperties {
9+
std::unordered_map<std::string, float> floatProperties;
10+
std::unordered_map<std::string, glm::vec3> vec3Properties;
11+
};
12+
813
class Renderer final : public Component {
914
public:
1015
std::shared_ptr<Mesh> mesh;
@@ -18,7 +23,14 @@ class Renderer final : public Component {
1823

1924
void update(float alpha) override;
2025

26+
void applyCustomProperties();
27+
28+
void setCustomFloatProperty(const std::string &name, float value);
29+
30+
void setCustomVec3Property(const std::string &name, const glm::vec3 &value);
31+
2132
private:
2233
float offset;
2334
glm::vec4 *offsetOrientation;
35+
CustomRenderProperties customProperties;
2436
};

include/objects/star.hpp

+6-2
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,12 @@ class Star : public GameObject {
1919

2020
addComponent(std::make_shared<RigidBody>(mass));
2121

22-
addComponent(std::make_shared<Renderer>(MeshManager::getInstance().getMesh("resources/models/sphere.obj"),
23-
MaterialManager::getInstance().getMaterial(materialName)));
22+
auto renderer = std::make_shared<Renderer>(MeshManager::getInstance().getMesh("resources/models/sphere.obj"),
23+
MaterialManager::getInstance().getMaterial(materialName));
24+
25+
addComponent(renderer);
26+
27+
renderer->setCustomVec3Property("starColor", color);
2428

2529
addComponent(std::make_shared<LightEmitter>(color, 1.0f, 1.0e-2f, 2.0e-3f));
2630

resources/shaders/star.frag

+3-1
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,11 @@ float noise(vec3 pos) {
1414
return fract(sin(t) * 43758.5453);
1515
}
1616

17+
uniform vec3 starColor;
18+
1719
void main() {
1820
float intensity = noise(normalize(FragPos) * time);
19-
vec3 color = vec3(1.0, 0.0, 0.0) * intensity;
21+
vec3 color = starColor * intensity;
2022

2123
float dist = length(FragPos - viewPos);
2224
float corona = exp(-dist * 10.0) * intensity;

src/renderer.cpp

+19
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,24 @@ void Renderer::update(const float alpha) {
2727
}
2828

2929
material->shader->setMat4("model", interpolatedTransform->getInterpolatedModelMatrix());
30+
applyCustomProperties();
3031
mesh->draw(*material);
3132
}
33+
34+
void Renderer::applyCustomProperties() {
35+
for (const auto &[name, value]: customProperties.floatProperties) {
36+
material->shader->setFloat(name, value);
37+
}
38+
39+
for (const auto &[name, value]: customProperties.vec3Properties) {
40+
material->shader->setVec3(name, value);
41+
}
42+
}
43+
44+
void Renderer::setCustomFloatProperty(const std::string &name, float value) {
45+
customProperties.floatProperties[name] = value;
46+
}
47+
48+
void Renderer::setCustomVec3Property(const std::string &name, const glm::vec3 &value) {
49+
customProperties.vec3Properties[name] = value;
50+
}

0 commit comments

Comments
 (0)