allow directly creating an entity and setting transform

This commit is contained in:
Nick Fisher
2025-05-24 16:33:58 +08:00
parent 75a9950909
commit 1e812ebe93
5 changed files with 96 additions and 30 deletions

View File

@@ -8,45 +8,60 @@ import 'helpers.dart';
void main() async {
final testHelper = TestHelper("transforms");
await testHelper.setup();
group("transforms", () {
test('set/unset parent geometry', () async {
await testHelper.withViewer((viewer) async {
var blueMaterialInstance =
await FilamentApp.instance!.createUnlitMaterialInstance();
final blueCube = await viewer.createGeometry(
GeometryHelper.cube(normals: false, uvs: false),
materialInstances: [blueMaterialInstance]);
await blueMaterialInstance.setParameterFloat4(
"baseColorFactor", 0.0, 0.0, 1.0, 1.0);
// Position blue cube slightly behind and to the right
await blueCube
.setTransform(Matrix4.translation(Vector3(1.0, 0.0, -1.0)));
test('create entity and set as parent', () async {
await testHelper.withViewer((viewer) async {
final cube = await viewer
.createGeometry(GeometryHelper.cube(normals: false, uvs: false));
var greenMaterialInstance =
await FilamentApp.instance!.createUnlitMaterialInstance();
final greenCube = await viewer.createGeometry(
GeometryHelper.cube(normals: false, uvs: false),
materialInstances: [greenMaterialInstance]);
await greenMaterialInstance.setParameterFloat4(
"baseColorFactor", 0.0, 1.0, 0.0, 1.0);
await testHelper.capture(viewer.view, "create_entity_before_parent");
final entity = await FilamentApp.instance!.createEntity();
await viewer.addToScene(blueCube);
await viewer.addToScene(greenCube);
await FilamentApp.instance!.setParent(cube.entity, entity);
await testHelper.capture(viewer.view, "before_parent");
await FilamentApp.instance!.setTransform(entity, Matrix4.translation(Vector3.all(-1)));
await FilamentApp.instance!.setParent(blueCube.entity, greenCube.entity);
await testHelper.capture(viewer.view, "create_entity_after_parent");
await greenCube.setTransform(Matrix4.translation(Vector3.all(-1)));
});
});
await testHelper.capture(viewer.view, "after_parent");
test('set/unset parent geometry', () async {
await testHelper.withViewer((viewer) async {
var blueMaterialInstance =
await FilamentApp.instance!.createUnlitMaterialInstance();
final blueCube = await viewer.createGeometry(
GeometryHelper.cube(normals: false, uvs: false),
materialInstances: [blueMaterialInstance]);
await blueMaterialInstance.setParameterFloat4(
"baseColorFactor", 0.0, 0.0, 1.0, 1.0);
await FilamentApp.instance!.setParent(blueCube.entity, null);
// Position blue cube slightly behind and to the right
await blueCube.setTransform(Matrix4.translation(Vector3(1.0, 0.0, -1.0)));
await testHelper.capture(viewer.view, "unparent");
});
var greenMaterialInstance =
await FilamentApp.instance!.createUnlitMaterialInstance();
final greenCube = await viewer.createGeometry(
GeometryHelper.cube(normals: false, uvs: false),
materialInstances: [greenMaterialInstance]);
await greenMaterialInstance.setParameterFloat4(
"baseColorFactor", 0.0, 1.0, 0.0, 1.0);
await viewer.addToScene(blueCube);
await viewer.addToScene(greenCube);
await testHelper.capture(viewer.view, "before_parent");
await FilamentApp.instance!.setParent(blueCube.entity, greenCube.entity);
await greenCube.setTransform(Matrix4.translation(Vector3.all(-1)));
await testHelper.capture(viewer.view, "after_parent");
await FilamentApp.instance!.setParent(blueCube.entity, null);
await testHelper.capture(viewer.view, "unparent");
});
});
}