If I have a 3d point $(x,y,z)$ and I want to translate it by a vector $v$, I can just multiply it by a matrix as shown here
https://en.wikipedia.org/wiki/Translation_(geometry)
Also I know that if I want to translate n points at the same time, I can just combine it into
$ \begin{bmatrix} 1 & 0 & 0 & v_x \\ 0 & 1 & 0 & v_y \\ 0 & 0 & 1 & v_z \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x_1 & x_2 & \dots & x_n \\ y_1 & y_2 & \dots & y_n \\ z_1 & z_2 & \dots & z_n \\ 1 & 1 & \dots & 1 \end{bmatrix} = \begin{bmatrix} x_1' & x_2' & \dots & x_n' \\ y_1' & y_2' & \dots & y_n' \\ z_1' & z_2' & \dots & z_n' \\ 1 & 1 & \dots & 1 \end{bmatrix} $
But what if I want to translate n points, but each points moves by a different distance/vector. Is there a way to combine all the calculations in the least amount of matrix calculations so that I can feed it into the GPU to compute faster?
Does anyone know?
Thanks
EDIT
I can see 1 way, but does anyone know if there is a better way. This one seems to increase size of the matrix linearly by a factor of 4 for each point. $ \begin{bmatrix} 1 & 0 & 0 & v_{x1} & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & v_{y1} & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & v_{z1} & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 & 0 & 0 & v_{x2} \\ 0 & 0 & 0 & 0 & 0 & 1 & 0 & v_{y2} \\ 0 & 0 & 0 & 0 & 0 & 0 & 1 & v_{z2} \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x_1 & 0 \\ y_1 & 0 \\ z_1 & 0 \\ 1 & 0 \\ 0 & x_2 \\ 0 & y_2 \\ 0 & z_2 \\ 0 & 1 \\ \end{bmatrix} = \begin{bmatrix} x_1' & 0 \\ y_1' & 0 \\ z_1' & 0 \\ 1 & 0 \\ 0 & x_2' \\ 0 & y_2' \\ 0 & z_2' \\ 0 & 1 \\ \end{bmatrix} $