Переглянути джерело

saved camera in scene export

ncannasse 7 роки тому
батько
коміт
472c91d955
2 змінених файлів з 34 додано та 3 видалено
  1. 33 2
      h3d/impl/Serializable.hx
  2. 1 1
      h3d/scene/Scene.hx

+ 33 - 2
h3d/impl/Serializable.hx

@@ -266,11 +266,25 @@ class SceneSerializer extends hxbit.Serializer {
 		for( o in objs )
 			for( m in o.getMeshes() )
 				h3d.mat.MaterialSetup.current.initMeshAfterLoad(m);
+
+		var camera = null;
+		if( getBool() ) {
+			camera = new h3d.Camera();
+			camera.pos.set(getFloat(), getFloat(), getFloat());
+			camera.target.set(getFloat(), getFloat(), getFloat());
+			camera.up.set(getFloat(), getFloat(), getFloat());
+			camera.fovY = getFloat();
+			camera.zNear = getFloat();
+			camera.zFar = getFloat();
+			camera.zoom = getFloat();
+			camera.update();
+		}
+
 		endLoad();
-		return { content : objs };
+		return { content : objs, camera : camera };
 	}
 
-	public function saveHSD( obj : h3d.scene.Object, includeRoot : Bool ) {
+	public function saveHSD( obj : h3d.scene.Object, includeRoot : Bool, ?camera : h3d.Camera ) {
 		begin();
 		addString("HSD");
 		addInt(version); // version
@@ -290,6 +304,23 @@ class SceneSerializer extends hxbit.Serializer {
 		for( o in objs )
 			addAnyRef(o);
 
+		addBool(camera != null);
+		if( camera != null ) {
+			addFloat(camera.pos.x);
+			addFloat(camera.pos.y);
+			addFloat(camera.pos.z);
+			addFloat(camera.target.x);
+			addFloat(camera.target.y);
+			addFloat(camera.target.z);
+			addFloat(camera.up.x);
+			addFloat(camera.up.y);
+			addFloat(camera.up.z);
+			addFloat(camera.fovY);
+			addFloat(camera.zNear);
+			addFloat(camera.zFar);
+			addFloat(camera.zoom);
+		}
+
 		return endSave(pos);
 	}
 

+ 1 - 1
h3d/scene/Scene.hx

@@ -379,7 +379,7 @@ class Scene extends Object implements h3d.IDrawable implements hxd.SceneEvents.I
 	public function serializeScene() : haxe.io.Bytes {
 		#if hxbit
 		var s = new h3d.impl.Serializable.SceneSerializer();
-		return s.saveHSD(this, false);
+		return s.saveHSD(this, false, camera);
 		#else
 		throw "You need -lib hxbit to serialize the scene data";
 		#end