Selaa lähdekoodia

fix preview camera edition

lviguier 1 vuosi sitten
vanhempi
commit
76ce266c18
2 muutettua tiedostoa jossa 25 lisäystä ja 0 poistoa
  1. 3 0
      hide/view/CameraController.hx
  2. 22 0
      hrt/prefab/l3d/Camera.hx

+ 3 - 0
hide/view/CameraController.hx

@@ -27,6 +27,9 @@ class CameraControllerBase extends h3d.scene.CameraController {
 
 
 	override public function loadFromCamera( animate = false) {
 	override public function loadFromCamera( animate = false) {
 		super.loadFromCamera(animate);
 		super.loadFromCamera(animate);
+
+		var scene = if( scene == null ) getScene() else scene;
+		wantedFOV = scene.camera.fovY;
 	}
 	}
 
 
 	public function loadSettings(data : Dynamic) : Void {
 	public function loadSettings(data : Dynamic) : Void {

+ 22 - 0
hrt/prefab/l3d/Camera.hx

@@ -33,6 +33,7 @@ class Camera extends Object3D {
 	var obj : h3d.scene.Object = null;
 	var obj : h3d.scene.Object = null;
 	#if editor
 	#if editor
 	var editContext : hide.prefab.EditContext;
 	var editContext : hide.prefab.EditContext;
+	var beforePreviewCam : h3d.Camera; // Used to save scene camera controller's values
 	#end
 	#end
 
 
 	public function new(?parent) {
 	public function new(?parent) {
@@ -258,6 +259,7 @@ class Camera extends Object3D {
 			var cam = ctx.scene.s3d.camera;
 			var cam = ctx.scene.s3d.camera;
 			var renderer = @:privateAccess ctx.scene.s3d.renderer;
 			var renderer = @:privateAccess ctx.scene.s3d.renderer;
 			if (preview) {
 			if (preview) {
+				beforePreviewCam = ctx.scene.s3d.camera.clone();
 				updateInstance(ctx.getContext(this));
 				updateInstance(ctx.getContext(this));
 				applyTo(cam);
 				applyTo(cam);
 				for ( effect in getAll(hrt.prefab.rfx.RendererFX) ) {
 				for ( effect in getAll(hrt.prefab.rfx.RendererFX) ) {
@@ -299,6 +301,26 @@ class Camera extends Object3D {
 					this.zFar = cam.zFar;
 					this.zFar = cam.zFar;
 					this.zNear = cam.zNear;
 					this.zNear = cam.zNear;
 					this.fovY = cam.fovY;
 					this.fovY = cam.fovY;
+
+					// Rollback to previous preview value for scene camera
+					cam.load(beforePreviewCam);
+					ctx.scene.editor.cameraController.loadFromCamera();
+
+					function floatToStringPrecision(number:Float, ?precision=4) {
+						number *= Math.pow(10, precision);
+						return Math.round(number) / Math.pow(10, precision);
+					}
+
+					// Round values to remove floating point error
+					this.x = floatToStringPrecision(floatToStringPrecision(this.x));
+					this.y = floatToStringPrecision(floatToStringPrecision(this.y));
+					this.z = floatToStringPrecision(floatToStringPrecision(this.z));
+					this.scaleX = floatToStringPrecision(floatToStringPrecision(this.scaleX));
+					this.scaleY = floatToStringPrecision(floatToStringPrecision(this.scaleY));
+					this.scaleZ = floatToStringPrecision(floatToStringPrecision(this.scaleZ));
+					this.rotationX = floatToStringPrecision(floatToStringPrecision(this.rotationX));
+					this.rotationY = floatToStringPrecision(floatToStringPrecision(this.rotationY));
+					this.rotationZ = floatToStringPrecision(floatToStringPrecision(this.rotationZ));
 				});
 				});
 			}
 			}
 		});
 		});