# Camera transform not changing under follow path constraint

I'm moving my camera on a Bezier circle drawn around an object. To achieve this, I added an Empty, parented the Empty to the camera, added a Follow Path constraint to the Empty (set the target as my object), and finally added a Track To constraint to my camera. With this setup, I can move the camera on an arbitrary path by arranging the control points of the Bezier circle.

While doing this, I also want to get the camera location and orientation for each frame using this script:

import bpy
scene = bpy.context.scene

def handler(scene):
print("Frame Change", scene.frame_current)
print("Camera location", scene.camera.location)
print("Camera rotation", scene.camera.rotation_quaternion)

bpy.app.handlers.frame_change_pre.append(handler)
bpy.ops.screen.animation_play()


However, I always get the same camera transform regardless of the camera position along the path:

Frame Change 1
Camera location <Vector (0.0000, 0.0000, 0.0000)>
Camera rotation <Quaternion (w=1.0000, x=0.0000, y=0.0000, z=0.0000)>
Frame Change 2
Camera location <Vector (0.0000, 0.0000, 0.0000)>
Camera rotation <Quaternion (w=1.0000, x=0.0000, y=0.0000, z=0.0000)>
...


How can I get the world coordinates of the camera at each frame?

use this:

import bpy

ob = bpy.context.scene.objects["Camera"]

for frame in range(0,250):

bpy.context.scene.frame_set(frame)

print (ob.matrix_world[0][3], ob.matrix_world[1][3], ob.matrix_world[2][3])

• Thanks. Just a note: This gives the location; to get both location and rotation, we should use location, rotation = ob.matrix_world.decompose()[0:2]. Dec 3, 2021 at 13:28