Save camera in project

This commit is contained in:
luboslenco
2021-02-18 11:25:46 +01:00
parent 7c89d0ff60
commit 276cb1a77c
3 changed files with 25 additions and 1 deletions
+4 -1
View File
@@ -21,7 +21,10 @@ typedef TProjectFormat = {
@:optional public var is_bgra: Null<Bool>; // Swapped red and blue channels for layer textures
@:optional public var packed_assets: Array<TPackedAsset>;
@:optional public var envmap: String; // Asset name
@:optional public var envmap_strength: Float;
@:optional public var envmap_strength: Null<Float>;
@:optional public var camera_world: kha.arrays.Float32Array;
@:optional public var camera_origin: kha.arrays.Float32Array;
@:optional public var camera_fov: Null<Float>;
}
typedef TLayerData = {
+11
View File
@@ -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;
}
}
+10
View File
@@ -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