Hi,
I want to make sure I don't do any mistake in the camera vector calculation.
As far as I know, the normal vector of a camera in chunk coordinate system can be calculated by:
principal_pixel = PhotoScan.Vector(camera.sensor.width/2+camera.sensor.calibration.cx, camera.sensor.height/2+camera.sensor.calibration.cy)
normal_vector = camera.transform.mulv(camera.sensor.calibration.unproject(principal_pixel))
Then it should work to transform the vector to world coordinate system by
world_vector = chunk.transform.matrix.mulv(normal_vector)
and I can also get the camera rotation matrix in the world by
T = chunk.transform.matrix
m = chunk.crs.localframe(T.mulp(camera.center))
R= m * T * camera.transform * PhotoScan.Matrix().Diag([1, -1, -1, 1])
R = R.rotation()
I would like to know that whether the vector's direction is defined as y axis to north, x axis to east, and xy plane is parallel to the horizon, or is it based on the camera orientation. If it is based on camera orientation, can I transform it by multiply the transpose rotation matrix?
Appreciated for your help to make it clear!