游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2030|回复: 2

DIRECTX 对DOUBLE转换产生了奇怪的影响

[复制链接]

4

主题

6

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2010-1-29 09:49:00 | 显示全部楼层 |阅读模式
就是这段VC++2008 小程序
double dd = 40175.417939814812;//这是从ACCESS中用_variant_t读出的时间字段,转成double
SYSTEMTIME  timeDest1,timeDest2;
VariantTimeToSystemTime(dd,&timeDest1);
g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                                      D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                      &d3dpp, &g_pd3dDevice );//这是diretx9的一个函数
VariantTimeToSystemTime(dd,&timeDest2);


按道理 timeDest1 的值应该和timeDest2的值一样,但实际上不一样。到底问题出在哪里???
有高手知道吗?

如果换成:

COleDateTime t1,t2;
t1.m_dt=40189.417939814812;
g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                                      D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                      &d3dpp, &g_pd3dDevice );//这是diretx9的一个函数
t2.m_dt=40189.417939814812;
t1和t2 的值也不同

0

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2012-12-27 18:41:05 | 显示全部楼层
你好,我现在也遇到了同样的问题,想请教下,你是怎么解决的呢?

0

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2012-12-27 18:55:41 | 显示全部楼层
调用D3D的 CreateDevice 函数后导致 COleDateTime::GetCurrentTime() 失败
当执行以下代码后,将导致 COleDateTime::GetCurrentTime() 失败
    if (FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,
        D3DDEVTYPE_HAL,
        hWnd,
        D3DCREATE_SOFTWARE_VERTEXPROCESSING,
        &d3dpp,
        &g_pd3dDevice)))
    {
        return FALSE;
    }
这是 CreateDevice 函数修改了系统的浮点运算精度,只要加上 D3DCREATE_FPU_PRESERVE 选项即可解决,修改后的代码如下:
    if (FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,
        D3DDEVTYPE_HAL,
        hWnd,
        D3DCREATE_SOFTWARE_VERTEXPROCESSING | D3DCREATE_FPU_PRESERVE,
        &d3dpp,
        &g_pd3dDevice)))
    {
        return FALSE;
    }
我这样改过之后,问题就解决了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-12 18:19

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表