はじめに C#でOpenTKを使っていると.NET標準のSystem.Numerics.Vector3と、OpenTKが提供するOpenTK.Mathematics.Vector3の両方を利用するケースがある。 両者はともに内部で3つのfloat値(x、y、z)を持つため、実際のメモリ領域は同じ形式だが、型が異なるために直接キャストできず、毎回明示的な変換や新規インスタンスの生成が必要になり面倒。 手法 C#では、構造体やフィールドがメモリ上でどのように配置されるかを明示的に制御するための仕組みが用意されている。 [StructLayout(LayoutKind.Explicit)]属性を利用…