gpt4 book ai didi

c# - Convert.ToDecimal 在加载 DirectX/Direct3D 时给出不同的结果

转载 作者:可可西里 更新时间:2023-11-01 06:47:07 25 4
gpt4 key购买 nike

我正在将数据从 MySQL 数据库加载到 C# .NET 应用程序中。数据作为 DBType.Double 保存在数据库中,但为了在我的应用程序中使用,我使用 Convert.ToDecimal() 转换为 Decimal。该数据是测量中使用的位置数据,可用于在 Direct3D 窗口中显示 3D 模型。

当 Direct3D 窗口和 Direct3D dll 未加载时,转换工作正常,因此数据库中保存的值如 1769301.6485186936、5880300.8152837148 被加载为 1769301.64851869、5880300.81528371。但是,如果我已经加载了 Direct3D 模块,那么转换结果将相同的值转换为 1769301.7112576、5880300.79401984。

基本代码如下,其中顶点是 3 个十进制值 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);
}
}
}

最佳答案

当您创建 Direct3D 设备时,您要指定 D3DCREATE_FPU_PRESERVE in D3DCREATE .否则,DirectX (9) 会将线程切换为使用单精度浮点运算,即使在您的托管代码中,这也会对数值计算产生影响。

关于c# - Convert.ToDecimal 在加载 DirectX/Direct3D 时给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10096527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com