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); }