游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2766|回复: 3

问一下float跟dword之间转换的问题

[复制链接]

64

主题

272

帖子

272

积分

中级会员

Rank: 3Rank: 3

积分
272
发表于 2007-12-7 23:15:00 | 显示全部楼层 |阅读模式
今天在看点精灵的内容的时候,有个地方说setrenderstate的参数要是DWORD,

他里面用的类型转换函数是这样的

DWORD FtoDw(float f)
{
        return *((DWORD*)&f);
}

这里面为什么不直接return (DWORD)f;而要这么麻烦的要用指针呢??? [em9]

还有,这样的转换会引起精度问题吧。书上设置点的最小大小为FtoDw(0.2),这样的点会变成0了吧?????

5

主题

68

帖子

75

积分

注册会员

Rank: 2

积分
75
QQ
发表于 2007-12-8 12:07:00 | 显示全部楼层

Re:问一下float跟dword之间转换的问题

因为SetRenderState的参数是写死的,如果想得到一个float值,就必须这样传,在内部会用FtoDW再转回FLOAT类型,
float DWtoF(DWORD dw)
{
    return *((float*)&dw);
}
单纯地使用FtoDw和DWtoF都是没有意义的.

64

主题

272

帖子

272

积分

中级会员

Rank: 3Rank: 3

积分
272
 楼主| 发表于 2007-12-8 22:11:00 | 显示全部楼层

Re:问一下float跟dword之间转换的问题

楼上的意思是我们用了FtoDW后,系统会自己进行DWtoF???

另外转换之后不会出现截尾问题吗?像float转为int再int转为float就会引起截尾……

最后那个……为什么要强制转换成指针类型再解引用而不进行普通的类型转换啊????难道这样就不会

产生截尾???

5

主题

68

帖子

75

积分

注册会员

Rank: 2

积分
75
QQ
发表于 2007-12-9 00:43:00 | 显示全部楼层

Re:问一下float跟dword之间转换的问题

普通类型转换肯定会有精度问题,你把地址传进去,再用(DOWRD*)转换,就把这个地址里的东西用DWORD来表示了,这样不会产生精度问题,然后在API内部会再用FtoDW转换回float类型,其实DWORD在这里用VOID来理解更好.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-17 11:43

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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