From ac10aa0a1e9b2ed8489e669f4793561876e0a10a Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Thu, 26 Sep 2024 15:56:54 +0800 Subject: [PATCH] chore: camera transform tests --- .../viewer/ffi/src/camera_ffi.dart | 8 +++-- thermion_dart/test/camera_tests.dart | 32 +++++++++++++++++-- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/thermion_dart/lib/thermion_dart/viewer/ffi/src/camera_ffi.dart b/thermion_dart/lib/thermion_dart/viewer/ffi/src/camera_ffi.dart index 1e4c4068..c2a24c9d 100644 --- a/thermion_dart/lib/thermion_dart/viewer/ffi/src/camera_ffi.dart +++ b/thermion_dart/lib/thermion_dart/viewer/ffi/src/camera_ffi.dart @@ -10,8 +10,11 @@ import '../../thermion_viewer_base.dart'; class ThermionFFICamera extends Camera { final Pointer camera; final Pointer engine; + late ThermionEntity _entity; - ThermionFFICamera(this.camera, this.engine); + ThermionFFICamera(this.camera, this.engine) { + _entity = Camera_getEntity(camera); + } @override Future setProjectionMatrixWithCulling( @@ -41,8 +44,7 @@ class ThermionFFICamera extends Camera { @override ThermionEntity getEntity() { - // TODO: implement getEntity - throw UnimplementedError(); + return _entity; } @override diff --git a/thermion_dart/test/camera_tests.dart b/thermion_dart/test/camera_tests.dart index 20beaa05..518ffa67 100644 --- a/thermion_dart/test/camera_tests.dart +++ b/thermion_dart/test/camera_tests.dart @@ -1,4 +1,3 @@ - import 'package:thermion_dart/thermion_dart.dart'; import 'package:test/test.dart'; import 'package:thermion_dart/thermion_dart/utils/geometry.dart'; @@ -94,7 +93,8 @@ void main() async { viewer, "camera_projection_culling_matrix_object_outside_frustum"); }); - test('setting camera transform updates model matrix', () async { + test('setting transform on camera updates model matrix (no parent)', + () async { var viewer = await createViewer(); var cameraEntity = await viewer.getMainCameraEntity(); @@ -109,6 +109,33 @@ void main() async { expect(modelMatrix.getColumn(3).w, 1.0); }); + test('setting transform on camera updates model matrix (with parent)', + () async { + var viewer = await createViewer(); + + var cameraEntity = await viewer.getMainCameraEntity(); + var camera = await viewer.getMainCamera(); + + var parent = await viewer.createGeometry(GeometryHelper.cube()); + + await viewer.setParent(camera.getEntity(), parent); + await viewer.setTransform( + cameraEntity, Matrix4.translation(Vector3(1, 0, 0))); + + var modelMatrix = await viewer.getCameraModelMatrix(); + expect(modelMatrix.getColumn(3).x, 1.0); + expect(modelMatrix.getColumn(3).y, 0.0); + expect(modelMatrix.getColumn(3).z, 0.0); + expect(modelMatrix.getColumn(3).w, 1.0); + + await viewer.setTransform(parent, Matrix4.translation(Vector3(0, 1, 0))); + modelMatrix = await viewer.getCameraModelMatrix(); + expect(modelMatrix.getColumn(3).x, 1.0); + expect(modelMatrix.getColumn(3).y, 1.0); + expect(modelMatrix.getColumn(3).z, 0.0); + expect(modelMatrix.getColumn(3).w, 1.0); + }); + test('create camera', () async { var viewer = await createViewer(); @@ -126,5 +153,4 @@ void main() async { await testHelper.capture(viewer, "create_camera_back_to_main"); }); }); - }