Prechádzať zdrojové kódy

Blender (2.57) export scripts now exports a default camera, if no camera in the scene was selected for export (in scene export). The default camera property is also updated accordingly.

Sven Andersson 14 rokov pred
rodič
commit
5b5d66b18e

+ 33 - 25
utils/exporters/blender/2.57/scripts/addons/io_mesh_threejs/export_threejs.py

@@ -1347,31 +1347,13 @@ def generate_cameras(data):
     if data["use_cameras"]:
 
         cams = bpy.data.objects
-        cams = [ob for ob in cams if ob.type == 'CAMERA']
+        cams = [ob for ob in cams if (ob.type == 'CAMERA' and ob.select)]
         
-        if not cams:
-            cams.append(DEFAULTS["camera"])
-
         chunks = []
+        
+        if not cams:
+            camera = DEFAULTS["camera"]
 
-        for cameraobj in cams:
-            camera = bpy.data.cameras[cameraobj.name]
-
-            if camera.id_data.type == "PERSP":
-                
-                camera_string = TEMPLATE_CAMERA_PERSPECTIVE % {
-                "camera_id" : generate_string(camera.name),
-                "fov"       : (camera.angle / 3.14) * 180.0,
-                "aspect"    : 1.333,
-                "near"      : camera.clip_start,
-                "far"       : camera.clip_end,
-                "position"  : generate_vec3([cameraobj.location[0], cameraobj.location[2], cameraobj.location[1]]),
-                "target"    : generate_vec3([0, 0, 0])
-                }
-            else:
-                camera_string = str(camera.type)
-                
-            """
             if camera["type"] == "perspective":
 
                 camera_string = TEMPLATE_CAMERA_PERSPECTIVE % {
@@ -1397,10 +1379,32 @@ def generate_cameras(data):
                 "position"  : generate_vec3(camera["position"]),
                 "target"    : generate_vec3(camera["target"])
                 }
-            """
-
+            
             chunks.append(camera_string)
 
+        else:
+
+            for cameraobj in cams:
+                camera = bpy.data.cameras[cameraobj.name]
+
+                # TODO:
+                #   Support more than perspective camera
+                #   Calculate a target/lookat
+                #   Get correct aspect ratio
+                if camera.id_data.type == "PERSP":
+
+                    camera_string = TEMPLATE_CAMERA_PERSPECTIVE % {
+                    "camera_id" : generate_string(camera.name),
+                    "fov"       : (camera.angle / 3.14) * 180.0,
+                    "aspect"    : 1.333,
+                    "near"      : camera.clip_start,
+                    "far"       : camera.clip_end,
+                    "position"  : generate_vec3([cameraobj.location[0], cameraobj.location[2], cameraobj.location[1]]),
+                    "target"    : generate_vec3([0, 0, 0])
+                    }
+
+                chunks.append(camera_string)
+
         return ",\n\n".join(chunks)
 
     return ""
@@ -1498,7 +1502,11 @@ def generate_ascii_scene(data):
 
     default_camera = ""
     if data["use_cameras"]:
-        default_camera = "default_camera"
+        cams = [ob for ob in bpy.data.objects if (ob.type == 'CAMERA' and ob.select)]
+        if not cams:
+            default_camera = "default_camera"
+        else:
+            default_camera = cams[0].name
 
     parameters = {
     "fname"     : data["source_file"],