DirectXにおける演算精度の低下問題とその対処方法

既定の設定ではDeviceクラスのインスタンス作成時に、CLRによってFPU (Floating-Point Unit) の演算が単精度に変更されます。これによりdouble型の演算もfloat型で行われるようになり、演算精度が低下します。

FPUの演算精度の設定は、アプリケーション全体に影響します。

倍精度の設定

これを回避するためには、デバイスを作成するときbehaviorFlags引数にFpuPreserveフラグを指定し、倍精度を使用するように指示します。

new Device(
    0,
    DeviceType.Hardware,
    this,
    CreateFlags.SoftwareVertexProcessing | CreateFlags.FpuPreserve,
    presentParameters
    );