feat: individual bone tints

This commit is contained in:
MihailRis 2026-09-16 23:37:44 +03:00
parent dbeeef90a8
commit f5f17b7746
2 changed files with 5 additions and 2 deletions

View file

@ -46,7 +46,8 @@ Skeleton::Skeleton(std::shared_ptr<const SkeletonConfig> config)
flags(config ? config->getBones().size() : 0), flags(config ? config->getBones().size() : 0),
textures(), textures(),
modelOverrides(config ? config->getBones().size() : 0), modelOverrides(config ? config->getBones().size() : 0),
visible(true) { visible(true),
boneTints(config ? config->getBones().size() : 0, glm::vec4(1.0f)) {
if (config == nullptr) { if (config == nullptr) {
return; return;
} }
@ -99,6 +100,7 @@ void Skeleton::setConfig(std::shared_ptr<const SkeletonConfig> rigConfig) {
modelOverrides.resize(bonesCount); modelOverrides.resize(bonesCount);
flags.resize(bonesCount); flags.resize(bonesCount);
boneTints.resize(bonesCount, glm::vec4(1.0f));
for (size_t i = 0; i < bonesCount; i++) { for (size_t i = 0; i < bonesCount; i++) {
flags[i].visible = true; flags[i].visible = true;
@ -204,7 +206,7 @@ void SkeletonConfig::render(
if (model) { if (model) {
batch.draw( batch.draw(
skeleton.calculated.matrices[i], skeleton.calculated.matrices[i],
skeleton.tint, skeleton.tint * skeleton.boneTints[i],
model, model,
&skeleton.textures &skeleton.textures
); );

View file

@ -86,6 +86,7 @@ namespace rigging {
std::vector<ModelReference> modelOverrides; std::vector<ModelReference> modelOverrides;
bool visible; bool visible;
glm::vec4 tint {1.0f, 1.0f, 1.0f, 1.0f}; glm::vec4 tint {1.0f, 1.0f, 1.0f, 1.0f};
std::vector<glm::vec4> boneTints;
util::VecInterpolation<3, float> interpolation {false}; util::VecInterpolation<3, float> interpolation {false};