Ответ 1
Для матрицы 4 × 4 вы можете использовать UnityEngine.Matrix4x4
. Если вы хотите использовать свою собственную структуру, я рекомендую вам реализовать ее так же, как реализовано UnityEngine.Matrix4x4
:
[StructLayout(LayoutKind.Sequential)]
public struct mat4f
{
public float m00;
public float m01;
public float m02;
public float m03;
public float m10;
public float m11;
public float m12;
public float m13;
public float m20;
public float m21;
public float m22;
public float m23;
public float m30;
public float m31;
public float m32;
public float m33;
public static mat4f Identity = new mat4f
{
m11 = 1.0f,
m22 = 1.0f,
m33 = 1.0f,
m44 = 1.0f
};
}
Это blittable type. Blittable types не требуют преобразования, когда они передаются между управляемым и неуправляемым кодом.
Использование примера:
mat4f matrix = mat4f.Identity;
myFunction(matrix); // Call DLL function
Существующие реализации аналогичны тем, которые я представил выше.
- Матричная реализация Unity (декомпилированный; исходный исходный код не доступен бесплатно). См.
UnityEngine.Matrix4x4
docs. - Матричная реализация SharpDX.
- Матричная реализация OpenTK. (Примечание: тип
Vector4
также является типом значения.)