2
0
ncannasse 7 жил өмнө
parent
commit
2a1f2331aa
2 өөрчлөгдсөн 25 нэмэгдсэн , 10 устгасан
  1. 24 9
      hide/comp/Scene.hx
  2. 1 1
      hide/view/Model.hx

+ 24 - 9
hide/comp/Scene.hx

@@ -124,6 +124,7 @@ class Scene extends Component implements h3d.IDrawable {
 	var hmdCache = new Map<String, hxd.fmt.hmd.Library>();
 	var texCache = new Map<String, h3d.mat.Texture>();
 	var cleanup = new Array<Void->Void>();
+	var defaultCamera : h3d.Camera;
 	public var engine : h3d.Engine;
 	public var width(get, never) : Int;
 	public var height(get, never) : Int;
@@ -291,12 +292,12 @@ class Scene extends Component implements h3d.IDrawable {
 		return name.substr(0, -4);
 	}
 
-	function initMaterials( obj : h3d.scene.Object, path : String ) {
+	function initMaterials( obj : h3d.scene.Object, path : String, reset = true ) {
 		var res = hxd.res.Any.fromBytes(path, haxe.io.Bytes.alloc(0));
 		for( m in obj.getMaterials() ) {
 			if( m.name == null ) continue;
 			m.model = res;
-			h3d.mat.MaterialSetup.current.initModelMaterial(m);
+			if( reset ) h3d.mat.MaterialSetup.current.initModelMaterial(m);
 		}
 	}
 
@@ -305,15 +306,23 @@ class Scene extends Component implements h3d.IDrawable {
 		var fullPath = ide.getPath(path);
 		var bytes = sys.io.File.getBytes(fullPath);
 		var root = new h3d.scene.Object();
-		for( o in ctx.loadHSD(bytes).content )
-			root.addChild(o);
-		initMaterials(root, path);
-		return root;
+		var hsd = ctx.loadHSD(bytes);
+		if( hsd.content.length == 1 )
+			root = hsd.content[0];
+		else {
+			for( o in hsd.content )
+				root.addChild(o);
+		}
+		initMaterials(root, path, false);
+		return { root : root, camera : hsd.camera };
 	}
 
-	public function loadModel( path : String ) {
-		if( StringTools.endsWith(path.toLowerCase(), ".hsd") )
-			return loadHSD(path);
+	public function loadModel( path : String, mainScene = false ) {
+		if( StringTools.endsWith(path.toLowerCase(), ".hsd") ) {
+			var hsd = loadHSD(path);
+			if( mainScene ) defaultCamera = hsd.camera;
+			return hsd.root;
+		}
 		var lib = loadHMD(path,false);
 		var obj = lib.makeObject(loadTexture.bind(path));
 		initMaterials(obj, path);
@@ -403,6 +412,12 @@ class Scene extends Component implements h3d.IDrawable {
 	}
 
 	public function resetCamera( ?obj : h3d.scene.Object, distanceFactor = 1. ) {
+
+		if( defaultCamera != null ) {
+			s3d.camera.load(defaultCamera);
+			return;
+		}
+
 		if( obj == null ) obj = s3d;
 		var b = obj.getBounds();
 		var dx = Math.max(Math.abs(b.xMax),Math.abs(b.xMin));

+ 1 - 1
hide/view/Model.hx

@@ -142,7 +142,7 @@ class Model extends FileView {
 
 		undo.onChange = function() {};
 
-		obj = scene.loadModel(state.path);
+		obj = scene.loadModel(state.path, true);
 		new h3d.scene.Object(scene.s3d).addChild(obj);
 
 		light = obj.find(function(o) return Std.instance(o, h3d.scene.DirLight));