fix(gltf): fix indexation of model binds and and a new uniform scale bind (#9102)

This commit is contained in:
Matt
2025-10-30 17:29:53 -04:00
committed by GitHub
parent ebff41a16f
commit d82de1ef38
+21 -14
View File
@@ -1188,34 +1188,34 @@ static void lv_gltf_view_recache_all_transforms(lv_gltf_model_t * gltf_data)
// Traverse through all linked overrides
while(current_override != nullptr) {
if(current_override->prop == LV_GLTF_BIND_PROP_ROTATION) {
if(current_override->dir) {
if(current_override->dir == LV_GLTF_BIND_DIR_READ) {
current_override->data[0] = local_rot[0];
current_override->data[1] = local_rot[1];
current_override->data[2] = local_rot[2];
}
else {
if(current_override->data_mask & LV_GLTF_BIND_CHANNEL_1)
if(current_override->data_mask & LV_GLTF_BIND_CHANNEL_0)
local_rot[0] = current_override->data[0];
if(current_override->data_mask & LV_GLTF_BIND_CHANNEL_2)
if(current_override->data_mask & LV_GLTF_BIND_CHANNEL_1)
local_rot[1] = current_override->data[1];
if(current_override->data_mask & LV_GLTF_BIND_CHANNEL_3)
if(current_override->data_mask & LV_GLTF_BIND_CHANNEL_2)
local_rot[2] = current_override->data[2];
made_changes = true;
made_rotation_changes = true;
}
}
else if(current_override->prop == LV_GLTF_BIND_PROP_POSITION) {
if(current_override->dir) {
if(current_override->dir == LV_GLTF_BIND_DIR_READ) {
current_override->data[0] = local_pos[0];
current_override->data[1] = local_pos[1];
current_override->data[2] = local_pos[2];
}
else {
if(current_override->data_mask & LV_GLTF_BIND_CHANNEL_1)
if(current_override->data_mask & LV_GLTF_BIND_CHANNEL_0)
local_pos[0] = current_override->data[0];
if(current_override->data_mask & LV_GLTF_BIND_CHANNEL_2)
if(current_override->data_mask & LV_GLTF_BIND_CHANNEL_1)
local_pos[1] = current_override->data[1];
if(current_override->data_mask & LV_GLTF_BIND_CHANNEL_3)
if(current_override->data_mask & LV_GLTF_BIND_CHANNEL_2)
local_pos[2] = current_override->data[2];
made_changes = true;
}
@@ -1227,25 +1227,32 @@ static void lv_gltf_view_recache_all_transforms(lv_gltf_model_t * gltf_data)
fastgltf::math::decomposeTransformMatrix(parentworldmatrix * localmatrix,
world_scale, world_quat, world_pos);
if(current_override->dir) {
if(current_override->dir == LV_GLTF_BIND_DIR_READ) {
current_override->data[0] = world_pos[0];
current_override->data[1] = world_pos[1];
current_override->data[2] = world_pos[2];
}
}
else if(current_override->prop == LV_GLTF_BIND_PROP_SCALE) {
if(current_override->dir) {
if(current_override->dir == LV_GLTF_BIND_DIR_READ) {
current_override->data[0] = local_scale[0];
current_override->data[1] = local_scale[1];
current_override->data[2] = local_scale[2];
}
else {
float base_scale = 1.0f;
if(current_override->data_mask & LV_GLTF_BIND_CHANNEL_3) {
base_scale = current_override->data[3];
local_scale[0] = base_scale;
local_scale[1] = base_scale;
local_scale[2] = base_scale;
}
if(current_override->data_mask & LV_GLTF_BIND_CHANNEL_0)
local_scale[0] = base_scale * current_override->data[0];
if(current_override->data_mask & LV_GLTF_BIND_CHANNEL_1)
local_scale[0] = current_override->data[0];
local_scale[1] = base_scale * current_override->data[1];
if(current_override->data_mask & LV_GLTF_BIND_CHANNEL_2)
local_scale[1] = current_override->data[1];
if(current_override->data_mask & LV_GLTF_BIND_CHANNEL_3)
local_scale[2] = current_override->data[2];
local_scale[2] = base_scale * current_override->data[2];
made_changes = true;
}
}