Camera matrix.
Answer here relates wiki link in title to produce the matrix based on camera data.
How can I get the camera's projection matrix?
What is blender's camera projection matrix model?
3x4 camera matrix from blender camera
Blender by default uses mostly 4x4 matrices to transform 3d vectors. https://en.wikipedia.org/wiki/Homogeneous_coordinates#Use_in_computer_graphics_and_computer_vision enabling the use of a singular matrix for rotation, translation and scale.
It slackly lets us multiply a 4x4 matrix by a 3d column vector to produce a 3d result.
Similarly the 3x4 camera projection matrix is used producing a 2D result,
Further from Camera matrix wiki.
Finally, also the 3D coordinates are expressed in a homogeneous representation ${x}$ and this is how the camera matrix appears:
$$ \begin{pmatrix} y_1 \\ y_2 \\ 1 \end{pmatrix} \sim \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & \frac{1}{f} & 0 \end{pmatrix} \, \begin{pmatrix} x_1 \\ x_2 \\ x_3 \\ 1 \end{pmatrix} $$ or $$ \mathbf{y} \sim \mathbf{C} \, \mathbf{x} $$
However we are also interested in projection giving the depth from image plane.
To the other bit, to convert to 3 rows 4 columns. Blender matrices are defined in row order.
import bpy
from mathutils import Matrix
context = bpy.context
scene = context.scene
camera = scene.camera # bpy.types.Camera
render = scene.render
# compute projection matrix -> Returns: 4x4 projection matrix
projection_mat = camera.calc_matrix_camera(
context.evaluated_depsgraph_get(),
x=render.resolution_x,
y=render.resolution_y,
scale_x=render.pixel_aspect_x,
scale_y=render.pixel_aspect_y
)
print(projection_mat)
M = Matrix(projection_mat[:-1])
print(M)
Result on default scene
<Matrix 4x4 (2.7778, 0.0000, 0.0000, 0.0000)
(0.0000, 4.9383, 0.0000, 0.0000)
(0.0000, 0.0000, -1.0020, -0.2002)
(0.0000, 0.0000, -1.0000, 0.0000)>
<Matrix 3x4 (2.7778, 0.0000, 0.0000, 0.0000)
(0.0000, 4.9383, 0.0000, 0.0000)
(0.0000, 0.0000, -1.0020, -0.2002)>
Somewhat related in projecting scene objects onto camera plane. https://blender.stackexchange.com/a/160388/15543