【问题标题】:three.js / webGL / GLSL - utilizing random maththree.js / webGL / GLSL - 利用随机数学
【发布时间】:2012-06-03 21:56:45
【问题描述】:

我正在使用 three.js 来调用片段着色器——该着色器为我的材质指定一种颜色,分解为 rgb——我想看看是否可以将这些颜色乘以一个随机值。这是我目前使用的代码:

gl_FragColor = vec4( color.r*.5, color.g, color.b, smoothstep( 8000.0, -8000.0, gl_FragCoord.z / gl_FragCoord.w ) ); //MH - creates colors by multiplying color values

如果它是 javascript,这就是我想要做的,但显然这在 GLSL 着色器脚本中不起作用:

gl_FragColor = vec4( color.r*Math.random(), color.g, color.b, smoothstep( 8000.0, -8000.0, gl_FragCoord.z / gl_FragCoord.w ) ); //MH - creates colors by multiplying color values

【问题讨论】:

  • 您是否希望每个片段的随机数不同,但不随帧变化?您是否希望每个片段都相同但逐帧变化?还是两者都想要,从而为观看者带来像素闪烁的噩梦?
  • 要么我想。闪烁像素的噩梦听起来很有趣 =) 我现在正在尝试。

标签: javascript glsl webgl three.js


【解决方案1】:

对于着色器中的伪随机值,我强烈推荐Ashima's WebGL noise library。它接受 x/y/z 值并吐出单纯形噪声。这意味着它从帧到帧都是稳定的。如果您需要改变的随机值,请将时间调制值传递给噪声函数。

【讨论】:

  • 我可以保证他们的 Perlin 噪声实现的质量,因为我过去使用过它。其中一位作者在此答案中对此进行了更多讨论:stackoverflow.com/a/9823712/19679
猜你喜欢
  • 2018-07-04
  • 2012-08-11
  • 2019-09-23
  • 2013-04-22
  • 2015-02-05
  • 2012-08-07
  • 2020-02-21
  • 2013-05-30
  • 1970-01-01
相关资源
最近更新 更多