#!BPY """ Name: 'Tracking Camera' Blender: 246 Group: 'Add' Tooltip: 'A simple target-tracking camera' """ __author__= "Adhi Hargo" __url__= ["blender.org", "adhihargo.net", "blenderindonesia.org"] __version__= "1.0" __bpydoc__= """ """ from Blender import Armature, Camera, Constraint, Mathutils, Mesh, Object, Scene, Window from Blender.Mathutils import Vector, Rand def assign_vert_color(mesh_data, color): for face in mesh_data.faces: for col in face.col: (col.r, col.g, col.b) = color def add_camera(scn): cx, cy, cz = Window.GetCursorPos() obj_color = (Rand() * 255, Rand() * 255, Rand() * 255, 255) # Camera cam_data = Camera.New('persp', 'TCamera') cam_data.drawPassepartout = True cam_data.alpha = 0.8 cam_obj = scn.objects.new(cam_data, 'TCamera') cam_obj.setEuler(cx, cy, cz) cam_obj.nameMode = True # Target trg_data = Armature.New('TCamera_Target') trg_data.drawType = Armature.STICK trg_obj = scn.objects.new(trg_data) trg_obj.xRay = True trg_obj.setLocation(cx, cy, cz) trg_data.makeEditable() trg_trg = Armature.Editbone() trg_trg.head = Vector(0, 0, 0) trg_trg.tail = Vector(0, 0, 1) trg_data.bones['Target'] = trg_trg trg_cam = Armature.Editbone() trg_cam.head = Vector(5, -5, 5) trg_cam.tail = Vector(5, -5, 6) trg_cam.options = Armature.BONE_SELECTED trg_data.bones['Camera'] = trg_cam trg_data.update() trg_obj.setEuler(0, 0, 0) # Target cursor try: t_crs_data = Mesh.Get('Tc_Target_Crs') except: t_crs_data = Mesh.New('Tc_Target_Crs') t_crs_data.verts.extend(tc_target_crs_verts) t_crs_data.faces.extend(tc_target_crs_faces) t_crs_data.vertexColors = True try: t_crs_obj = Object.Get('Tc_Target_Crs') except: t_crs_obj = scn.objects.new(t_crs_data) t_crs_obj.layers = [] t_crs_obj.setLocation(1000, 1000, 1000) # Camera cursor try: c_crs_data = Mesh.Get('Tc_Camera_Crs') except: c_crs_data = Mesh.New('Tc_Camera_Crs') c_crs_data.verts.extend(tc_camera_crs_verts) c_crs_data.faces.extend(tc_camera_crs_faces) c_crs_data.vertexColors = True try: c_crs_obj = Object.Get('Tc_Camera_Crs') except: c_crs_obj = scn.objects.new(c_crs_data) c_crs_obj.layers = [20] c_crs_obj.setLocation(1000, 1000, 1000) trg_obj_pose = trg_obj.getPose() trg_obj_trg = trg_obj_pose.bones['Target'] trg_obj_trg.displayObject = t_crs_obj trg_obj_cam = trg_obj_pose.bones['Camera'] trg_obj_cam.displayObject = c_crs_obj # Constraint #1 cam_obj.constraints.append(Constraint.Type.CHILDOF) cam_loc = cam_obj.constraints[-1] cam_loc.name = 'Menempel' cam_loc[Constraint.Settings.TARGET] = trg_obj cam_loc[Constraint.Settings.BONE] = 'Camera' cam_obj.protectFlags = Object.ProtectFlags.LOC | Object.ProtectFlags.ROT # Constraint #2 trg_obj_cam.constraints.append(Constraint.Type.TRACKTO) cam_track = trg_obj_cam.constraints[-1] cam_track.name = 'Melacak' cam_track[Constraint.Settings.TARGET] = trg_obj cam_track[Constraint.Settings.BONE] = 'Target' cam_track[Constraint.Settings.TRACK] = Constraint.Settings.TRACKNEGZ cam_track[Constraint.Settings.UP] = Constraint.Settings.UPY scn.objects.camera = cam_obj scn.objects.active = trg_obj scn.update() Window.PoseMode(1) tc_target_crs_verts = [[0.05, 0.70, -0.05], [0.05, -0.70, -0.05], [-0.05, -0.70, -0.05], [-0.05, 0.70, -0.05], [0.05, 0.70, 0.05], [0.05, -0.70, 0.05], [-0.05, -0.70, 0.05], [-0.05, 0.70, 0.05], [0.05, 0.05, -0.05], [-0.05, 0.05, -0.05], [0.05, 0.05, 0.05], [-0.05, 0.05, 0.05], [0.05, -0.05, -0.05], [-0.05, -0.05, -0.05], [0.05, -0.05, 0.05], [-0.05, -0.05, 0.05], [0.70, -0.05, 0.05], [0.70, -0.05, -0.05], [0.70, 0.05, 0.05], [0.70, 0.05, -0.05], [-0.70, -0.05, 0.05], [-0.70, -0.05, -0.05], [-0.70, 0.05, 0.05], [-0.70, 0.05, -0.05], [-0.05, -0.05, 0.70], [0.05, -0.05, 0.70], [-0.05, 0.05, 0.70], [0.05, 0.05, 0.70], [-0.05, -0.05, -0.70], [0.05, -0.05, -0.70], [-0.05, 0.05, -0.70], [0.05, 0.05, -0.70]] tc_target_crs_faces = [[1, 5, 6, 2], [4, 0, 3, 7], [0, 8, 9, 3], [7, 11, 10, 4], [8, 0, 4, 10], [11, 7, 3, 9], [12, 1, 2, 13], [15, 6, 5, 14], [14, 5, 1, 12], [6, 15, 13, 2], [14, 12, 17, 16], [10, 14, 16, 18], [12, 8, 19, 17], [8, 10, 18, 19], [18, 16, 17, 19], [13, 15, 20, 21], [15, 11, 22, 20], [9, 13, 21, 23], [11, 9, 23, 22], [20, 22, 23, 21], [15, 14, 25, 24], [11, 15, 24, 26], [14, 10, 27, 25], [10, 11, 26, 27], [26, 24, 25, 27], [12, 13, 28, 29], [13, 9, 30, 28], [8, 12, 29, 31], [9, 8, 31, 30], [31, 29, 28, 30]] tc_camera_crs_verts = [[-0.06, -0.09, 0.92], [-0.06, -0.04, 1.01], [-0.06, 0.05, 1.07], [-0.06, 0.15, 1.07], [-0.06, 0.24, 1.01], [-0.06, 0.29, 0.92], [-0.06, 0.29, 0.82], [-0.06, 0.24, 0.73], [-0.06, 0.15, 0.68], [-0.06, 0.05, 0.68], [-0.06, -0.04, 0.73], [-0.06, -0.09, 0.82], [0.06, -0.09, 0.92], [0.06, -0.04, 1.01], [0.06, 0.05, 1.07], [0.06, 0.15, 1.07], [0.06, 0.24, 1.01], [0.06, 0.29, 0.92], [0.06, 0.29, 0.82], [0.06, 0.24, 0.73], [0.06, 0.15, 0.68], [0.06, 0.05, 0.68], [0.06, -0.04, 0.73], [0.06, -0.09, 0.82], [-0.06, 0.10, 0.87], [0.06, 0.10, 0.87], [0.06, 0.30, 0.53], [-0.06, 0.30, 0.53], [0.06, 0.11, 0.48], [0.06, 0.16, 0.39], [0.06, 0.25, 0.33], [0.06, 0.35, 0.33], [0.06, 0.44, 0.39], [0.06, 0.49, 0.48], [0.06, 0.49, 0.58], [0.06, 0.44, 0.67], [0.06, 0.35, 0.72], [0.06, 0.25, 0.72], [0.06, 0.16, 0.67], [0.06, 0.11, 0.58], [-0.06, 0.11, 0.48], [-0.06, 0.16, 0.39], [-0.06, 0.25, 0.33], [-0.06, 0.35, 0.33], [-0.06, 0.44, 0.39], [-0.06, 0.49, 0.48], [-0.06, 0.49, 0.58], [-0.06, 0.44, 0.67], [-0.06, 0.35, 0.72], [-0.06, 0.25, 0.72], [-0.06, 0.16, 0.67], [-0.06, 0.11, 0.58], [0.15, 0.20, 0.70], [-0.15, 0.20, 0.70], [-0.15, -0.20, 0.70], [0.15, -0.20, 0.70], [0.15, 0.20, -0.00], [-0.15, 0.20, -0.00], [-0.15, -0.20, -0.00], [0.15, -0.20, -0.00]] tc_camera_crs_faces = [[19, 7, 49, 37], [20, 19, 37, 38], [8, 20, 38, 50], [7, 8, 50, 49], [24, 0, 1], [25, 13, 12], [24, 1, 2], [25, 14, 13], [24, 2, 3], [25, 15, 14], [24, 3, 4], [25, 16, 15], [24, 4, 5], [25, 17, 16], [24, 5, 6], [25, 18, 17], [24, 6, 7], [25, 19, 18], [24, 7, 8], [25, 20, 19], [24, 8, 9], [25, 21, 20], [24, 9, 10], [25, 22, 21], [24, 10, 11], [25, 23, 22], [11, 0, 24], [25, 12, 23], [0, 12, 13, 1], [1, 13, 14, 2], [2, 14, 15, 3], [3, 15, 16, 4], [4, 16, 17, 5], [5, 17, 18, 6], [6, 18, 19, 7], [8, 20, 21, 9], [9, 21, 22, 10], [10, 22, 23, 11], [12, 0, 11, 23], [40, 28, 39, 51], [41, 29, 28, 40], [42, 30, 29, 41], [43, 31, 30, 42], [44, 32, 31, 43], [45, 33, 32, 44], [46, 34, 33, 45], [47, 35, 34, 46], [48, 36, 35, 47], [49, 37, 36, 48], [51, 39, 38, 50], [26, 39, 28], [27, 40, 51], [26, 28, 29], [27, 41, 40], [26, 29, 30], [27, 42, 41], [26, 30, 31], [27, 43, 42], [26, 31, 32], [27, 44, 43], [26, 32, 33], [27, 45, 44], [26, 33, 34], [27, 46, 45], [26, 34, 35], [27, 47, 46], [26, 35, 36], [27, 48, 47], [26, 36, 37], [27, 49, 48], [26, 37, 38], [27, 50, 49], [26, 38, 39], [27, 51, 50], [56, 52, 55, 59], [57, 53, 52, 56], [58, 54, 53, 57], [59, 55, 54, 58], [55, 52, 53, 54], [57, 56, 59, 58]] scn = Scene.GetCurrent() scn.objects.selected = [] add_camera(scn) Window.RedrawAll(1)