6

MySQLデータベースからC#.NETアプリケーションにデータを読み込んでいます。データはDBType.Doubleとしてデータベースに保持されますが、私のアプリケーションで使用するために、Convert.ToDecimal()を使用してDecimalにキャストしました。データは測量で使用される位置データであり、Direct3Dウィンドウに3Dモデルを表示するために使用できます。

Direct3Dウィンドウ、つまりDirect3D dllがロードされていない場合、変換は正常に機能するため、データベースに保持されている1769301.6485186936、588030.8152837148などの値は、1769301.64851869、588030.81528371としてロードされます。ただし、Direct3Dモジュールをロードした場合、変換の結果、同じ値が1769301.7112576、5880300.79401984に変換されます。

基本的なコードは次のとおりです。ここで、頂点は3つの10進値、X、Y、およびZのクラス/構造体です。

List<vertex> positions = new List<vertex>();

using (MySqlCommand cmd = new MySqlCommand("SELECT x, y, z FROM positionTable;", conn))
{

  MySqlDataReader dr = cmd.ExecuteReader();
  try
  {
    while (dr.Read())
    {
      vertex position = new vertex();
      position.X = Convert.ToDecimal(dr[0]);
      position.Y = Convert.ToDecimal(dr[1]);
      position.Z = Convert.ToDecimal(dr[2]);

      positions.Add(position);
    }
  }
}
4

1 に答える 1

5

Direct3D デバイスを作成するときは、 で指定D3DCREATE_FPU_PRESERVED3DCREATEます。これがないと、DirectX (9) はスレッドを単精度浮動小数点演算を使用するように切り替えます。これは、マネージ コードでも数値計算に影響を与えます。

于 2012-04-10T21:17:01.827 に答える