From 276cb1a77c09f1f4fee89bb7a28056f66e9fb27b Mon Sep 17 00:00:00 2001 From: luboslenco Date: Thu, 18 Feb 2021 11:25:46 +0100 Subject: [PATCH] Save camera in project --- Sources/arm/ProjectFormat.hx | 5 ++++- Sources/arm/io/ExportArm.hx | 11 +++++++++++ Sources/arm/io/ImportArm.hx | 10 ++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/Sources/arm/ProjectFormat.hx b/Sources/arm/ProjectFormat.hx index 7311a324..625b9ae9 100644 --- a/Sources/arm/ProjectFormat.hx +++ b/Sources/arm/ProjectFormat.hx @@ -21,7 +21,10 @@ typedef TProjectFormat = { @:optional public var is_bgra: Null; // Swapped red and blue channels for layer textures @:optional public var packed_assets: Array; @:optional public var envmap: String; // Asset name - @:optional public var envmap_strength: Float; + @:optional public var envmap_strength: Null; + @:optional public var camera_world: kha.arrays.Float32Array; + @:optional public var camera_origin: kha.arrays.Float32Array; + @:optional public var camera_fov: Null; } typedef TLayerData = { diff --git a/Sources/arm/io/ExportArm.hx b/Sources/arm/io/ExportArm.hx index 51c5dddf..481dba85 100644 --- a/Sources/arm/io/ExportArm.hx +++ b/Sources/arm/io/ExportArm.hx @@ -108,6 +108,9 @@ class ExportArm { packed_assets: packed_assets, envmap: Project.raw.envmap != null ? (sameDrive ? Path.toRelative(Project.filepath, Project.raw.envmap) : Project.raw.envmap) : null, envmap_strength: iron.Scene.active.world.probe.raw.strength, + camera_world: iron.Scene.active.camera.transform.local.toFloat32Array(), + camera_origin: vec3f32(arm.plugin.Camera.inst.origins[0]), + camera_fov: iron.Scene.active.camera.data.raw.fov, #if (kha_metal || kha_vulkan) is_bgra: true #else @@ -362,4 +365,12 @@ class ExportArm { var bytes = ArmPack.encode(raw); Krom.fileSaveBytes(path, bytes.getData(), bytes.length + 1); } + + static function vec3f32(v: iron.math.Vec4): kha.arrays.Float32Array { + var res = new kha.arrays.Float32Array(3); + res[0] = v.x; + res[1] = v.y; + res[2] = v.z; + return res; + } } diff --git a/Sources/arm/io/ImportArm.hx b/Sources/arm/io/ImportArm.hx index 44adf7b0..ec13dcb9 100644 --- a/Sources/arm/io/ImportArm.hx +++ b/Sources/arm/io/ImportArm.hx @@ -117,6 +117,16 @@ class ImportArm { if (Project.raw.envmap_strength != null) { iron.Scene.active.world.probe.raw.strength = Project.raw.envmap_strength; } + if (Project.raw.camera_world != null) { + iron.Scene.active.camera.transform.local = Mat4.fromFloat32Array(Project.raw.camera_world); + iron.Scene.active.camera.transform.decompose(); + iron.Scene.active.camera.data.raw.fov = Project.raw.camera_fov; + iron.Scene.active.camera.buildProjection(); + var origin = Project.raw.camera_origin; + arm.plugin.Camera.inst.origins[0].x = origin[0]; + arm.plugin.Camera.inst.origins[0].y = origin[1]; + arm.plugin.Camera.inst.origins[0].z = origin[2]; + } for (file in project.assets) { #if krom_windows