游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5622|回复: 12

时代进步了~ 卡马克开方落后了

[复制链接]

193

主题

870

帖子

903

积分

高级会员

Rank: 4

积分
903
QQ
发表于 2009-3-24 17:55:00 | 显示全部楼层 |阅读模式
Orz代码虽然重写了N次
但 Q3用的开放函数




  1. inline float QuakeRsqrt(float p)

  2. {

  3.   long i;

  4.   float x2, rt;

  5.   const float threehalfs = 1.5F;

  6.   x2 = p *0.5f;

  7.   rt = p;

  8.   i = *(static_cast<long *>( static_cast<void*>(&rt)));

  9.   i = 0x5f3759df -(i >>1);

  10.   rt = *(static_cast<float *>( static_cast<void*>(&i)));

  11.   //rt = * (float*)&i;

  12.   rt = rt *(threehalfs -(x2 *rt *rt));

  13.   return rt;

  14. }

复制代码



一直舍不得丢掉,虽然基本上没用过。

不过最近又看了一些文章,发现CUP可以硬件开方了,在很多环境下,直接调用平台的开方函数,甚至比卡神的开方快3倍,精度也要高。

不得不感慨时代的进步啊。

Ogre刚开始的时候,大家都觉得Ogre效率低,原因是太多虚函数。不过现在虚函数莫再提了。

游戏精粹早期还说不要使用RTTI,效率差,现在到处都在用。


我刚开始写代码的时候,也喜欢用boost loki这种模板很多的库,当时一编译就是半个小时到一个小时,现在换了AMD 7520 重新编译整个工程,不会超过5分钟。

随着时代的进步,很多常识也要改了。

1

主题

22

帖子

201

积分

中级会员

Rank: 3Rank: 3

积分
201
发表于 2009-3-24 18:28:00 | 显示全部楼层

Re:时代进步了~ 卡马克开方落后了

AMD 7520 大概相当于 inter的什么级别的CPU,有这么快吗?完全编译一次OGRE大概要多久。。
我的笔记本编译太慢了,有点心动了。

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2009-3-24 19:47:00 | 显示全部楼层

Re:时代进步了~ 卡马克开方落后了

486时代cpu就有开方指令了,奔腾时代浮点就比整数快了,你这常识也落后太多了。

虚函数、RTTI效率差现在也没改变,只不过复杂度的提高已经使效率差异变得不是那么重要了。

2

主题

50

帖子

50

积分

注册会员

Rank: 2

积分
50
发表于 2009-3-24 22:29:00 | 显示全部楼层

Re: Re:时代进步了~ 卡马克开方落后了

qrli: Re:时代进步了~ 卡马克开方落后了

486时代cpu就有开方指令了,奔腾时代浮点就比整数快了,你这常识也落后太多了。

虚函数、RTTI效率差现在也没改变,只不过复杂度的提高已经使效率差异变得不是那么重要了。


请教一下,IA32下面哪个指令可以开方?

11

主题

190

帖子

255

积分

中级会员

Rank: 3Rank: 3

积分
255
发表于 2009-3-25 09:27:00 | 显示全部楼层

Re: Re: Re:时代进步了~ 卡马克开方落后了

EA: Re: Re:时代进步了~ 卡马克开方落后了



请教一下,IA32下面哪个指令可以开方?

同问...

-----------------
欢迎光临我的博客 http://www.thecodeway.com

6

主题

47

帖子

49

积分

注册会员

Rank: 2

积分
49
发表于 2009-3-25 13:02:00 | 显示全部楼层

Re:时代进步了~ 卡马克开方落后了

id tech 5 与 虚幻3 比起来哪个更强。。。

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2009-3-25 13:48:00 | 显示全部楼层

Re: Re: Re:时代进步了~ 卡马克开方落后了

EA: Re: Re:时代进步了~ 卡马克开方落后了



请教一下,IA32下面哪个指令可以开方?


fsqrt
sqrtds

11

主题

190

帖子

255

积分

中级会员

Rank: 3Rank: 3

积分
255
发表于 2009-3-25 14:10:00 | 显示全部楼层

Re: Re: Re: Re:时代进步了~ 卡马克开方落后了

qrli: Re: Re: Re:时代进步了~ 卡马克开方落后了



fsqrt
sqrtds

多谢!
搜了一下Ogre的代码,原来早就用上了,露怯了,呵呵

  1. // returns a for a * a = r
  2. float asm_sqrt( float r )
  3. {
  4. #if OGRE_COMPILER == OGRE_COMPILER_MSVC && OGRE_ARCH_TYPE == OGRE_ARCHITECTURE_32

  5. __asm {
  6. fld r // r0 = r
  7. fsqrt // r0 = sqrtf( r0 )
  8. } // returns r0

  9. #else

  10.   return sqrt( r );

  11. #endif
  12. }
复制代码



-----------------
欢迎光临我的博客 http://www.thecodeway.com


59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2009-3-25 15:01:00 | 显示全部楼层

Re:时代进步了~ 卡马克开方落后了

What's New in the March 2009 DirectX SDK

XNA Math provides developers a cross-platform native-code method of generating SIMD instructions without having to resort to special case code. Based on the Xbox 360 SDK's Xbox math library, this set of headers supports the most common vectorized math operations used in graphics and animation. The implementation supports Windows 32-bit (x86) and Windows 64-bit (x64) targets using SSE2 intrinsics, and is fully cross-platform with the optimized Xbox 360 XDK version.

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
发表于 2009-3-26 09:09:00 | 显示全部楼层

Re:时代进步了~ 卡马克开方落后了

楼主你在非X86/X64平台上试试看
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-20 15:46

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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