Save camera in project
This commit is contained in:
@@ -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 = {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user