Note) for simplicity, i will use mgl32 to represent both mgl32 and mgl64.
so, Mat4 of mgl32 and Matrix3D will be used to represent matrix in mgl32 and Matrix3D in WPF.
You must be careful to set Matrix3D's OffsetX, OffsetY and OffsetZ after getting transformation matrix from Transform3DGroup when you use WPF.
It's because WPF's Transform3DGroup can hold transformations including translation but Transform3DGroup.Value, which is a translation matrix of Matrix3D, does not include translation transformation.
mgl32's Mat4, which is a transformation matrix, can hold all transformations including translations.
Matrix representations in golang and WPF are different. In golang, transformation matrix is column major, that is, the first column contains the x-axis, the second column contains the y-axis, and the third column contains the z-axis. However, In C#, transformatin matrix is row marjor where the first row contains the x-axis, the second row contains the y-axis, and the third row contains the z-axis. So, you must transpose the matrix to change the order.
In golang, Mat4.Data will give the matrix data array which is [16]float32 for mgl32. So, you can export transformMatrix.Transpose().Data which is array of float32.
In c#, matrix.M[row,col] can be used to access matrix element.
in golang, after you build transformation matrix, export Mat4.Transpose().Data
and in c#, you can set the transformation matrix by accessing matrix.M[i,j] :
// build transforma matrix
// export
send matrix.Data as [16]float64
// in c#
double[16] arr = receive double[16] from golang
for(i=0;i<4;i++) for(j=0;j<4;j++)
matrix.M[i,j] = arr[4*i + j]
Note that above assining of matrx.M[i,j] will all the elements of transformation matrix of golang including Offset. So in this case, we don't need to set Offset of Matrix3D.