mirror of
https://github.com/lvgl/lvgl.git
synced 2026-05-23 07:46:36 +08:00
fix(gltf): fix indexation of model binds and and a new uniform scale bind (#9102)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user