From 6561af6825e00528e69cf4a8b3a16ed72e966956 Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Mon, 5 Feb 2024 08:43:54 +0800 Subject: [PATCH] change transform order for relative setPosition to SRT --- ios/src/AssetManager.cpp | 5 ++++- lib/entities/entity_transform_controller.dart | 3 +-- lib/filament_controller_ffi.dart | 2 ++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/ios/src/AssetManager.cpp b/ios/src/AssetManager.cpp index 6fd506e9..3c6bc4b0 100644 --- a/ios/src/AssetManager.cpp +++ b/ios/src/AssetManager.cpp @@ -1211,7 +1211,9 @@ namespace polyvox decomposeMatrix(transform, &translation, &rotation, &scale); if(relative) { - translation += math::float3( x, y, z ); + math::mat3f rotationMatrix(rotation); + math::float3 relativeTranslation = rotationMatrix * math::float3( x, y, z ); + translation += relativeTranslation; } else { translation = math::float3(x,y,z); } @@ -1250,6 +1252,7 @@ namespace polyvox transform = composeMatrix(translation, rotation, scale); tm.setTransform(transformInstance, transform); + } diff --git a/lib/entities/entity_transform_controller.dart b/lib/entities/entity_transform_controller.dart index 602f413b..e9224a80 100644 --- a/lib/entities/entity_transform_controller.dart +++ b/lib/entities/entity_transform_controller.dart @@ -73,7 +73,7 @@ class EntityTransformController { updateTranslation = true; } - // todo - better to use pitch/yaw/roll + // TODO - use pitch/yaw/roll bool updateRotation = false; var _rotation = v.Quaternion.identity(); @@ -92,7 +92,6 @@ class EntityTransformController { relative: true); } if (updateRotation) { - var axis = _rotation.axis; await controller.setRotationQuat(_entity, _rotation, relative: true); } } diff --git a/lib/filament_controller_ffi.dart b/lib/filament_controller_ffi.dart index aac5b151..87810e4c 100644 --- a/lib/filament_controller_ffi.dart +++ b/lib/filament_controller_ffi.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'dart:ffi'; import 'dart:io'; +import 'dart:math'; import 'dart:ui' as ui; import 'dart:developer' as dev; import 'package:flutter/services.dart'; @@ -1056,6 +1057,7 @@ class FilamentControllerFFI extends FilamentController { if (_viewer == null) { throw Exception("No viewer available, ignoring"); } + set_position(_assetManager!, entity, x, y, z, relative); }