C# 用C语言实现三维图形4*4矩阵和3/4元素向量的优化方法

C# 用C语言实现三维图形4*4矩阵和3/4元素向量的优化方法,c#,matrix,data-structures,3d,linear-algebra,C#,Matrix,Data Structures,3d,Linear Algebra,出于教育目的,我将实施离线光线跟踪器。由于我不打算建立一个3D图形库,我不需要任何泛型、leet面向对象设计等结构的概括。唯一的目标是在我的具体环境中实现尽可能快的速度。我感兴趣的结构是4*4矩阵和3/4向量的双精度: public struct Vec3_fields { public double x, y, z; //constructors and methods } 或 Vec4也是如此。 现在有了矩阵的选项。事情就是这样的 另一个选项是显式编码所有16个字段,如V

出于教育目的,我将实施离线光线跟踪器。由于我不打算建立一个3D图形库,我不需要任何泛型、leet面向对象设计等结构的概括。唯一的目标是在我的具体环境中实现尽可能快的速度。我感兴趣的结构是4*4矩阵和3/4向量的双精度:

public struct Vec3_fields
{
    public double x, y, z;

    //constructors and methods
}

Vec4也是如此。 现在有了矩阵的选项。事情就是这样的

另一个选项是显式编码所有16个字段,如Vec3_字段:

public double x0, y0, z0, w0, x1 ... w3;
最后一个明显的方法是获得长度为16的数组:


我对每个表示的性能方面很感兴趣,比如空间位置和.net特定的问题。

为什么希望它处于非托管状态?我这样做是为了获得固定大小的缓冲区。
public struct Mat4_array_of_Vec4
{
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
    private readonly Vec4[] value;

    public Mat4_array_of_Vec4(
        double p00, double p01, double p02, double p03,
        double p10, double p11, double p12, double p13,
        double p20, double p21, double p22, double p23,
        double p30, double p31, double p32, double p33)
    {
        value = new[]
        {
            new Vec4(p00, p01, p02, p03),
            new Vec4(p10, p11, p12, p13),
            new Vec4(p20, p21, p22, p23),
            new Vec4(p30, p31, p32, p33)
        };
    }
}
public double x0, y0, z0, w0, x1 ... w3;
public fixed double v[16];