正弦波近似SmoothTriangleWave

正弦波近似 http://blog.csdn.net/ring0hx/article/details/44492415

复制代码
float4 SmoothCurve( float4 x ) {
  return x * x *( 3.0 - 2.0 * x );
}
float4 TriangleWave( float4 x ) {
  return abs( frac( x + 0.5 ) * 2.0 - 1.0 );
}
float4 SmoothTriangleWave( float4 x ) {
  return SmoothCurve( TriangleWave( x ) );
}
复制代码

在做一些游戏效果的时候经常需要用到正弦波,它平滑又有周期性,但是sin的计算开销略大。作为优化,在GPU Gem上看到一个用三次函数平滑三角波得到近似正弦波的方法不错:

<code class="language-c hljs  has-numbering">float4 SmoothCurve( float4 x ) {
  <span class="hljs-keyword" style="color: rgb(0, 0, 255);">return x * x *( <span class="hljs-number">3.0 - <span class="hljs-number">2.0 * x );
}
float4 TriangleWave( float4 x ) {
  <span class="hljs-keyword">return <span class="hljs-built_in">abs( frac( x + <span class="hljs-number">0.5 ) * <span class="hljs-number">2.0 - <span class="hljs-number">1.0 );
}
float4 SmoothTriangleWave( float4 x ) {
  <span class="hljs-keyword">return SmoothCurve( TriangleWave( x ) );
}</span></span></span></span></span></span></span></span></span></code>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

三角波TriangleWave 函数图 
TriangleWave 函数图

平滑函数SmoothCurve 函数图 
SmoothCurve函数图

最后得到的SmoothTriangleWave函数图 
SmoothTriangleWave函数图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值