Help us understand the problem. What is going on with this article?

ランダムな値を返す関数 on GLSL

More than 5 years have passed since last update.

実装

GLSL には noise[1234] が定義されているが、実装が GPU のドライバに強く依存するのでそれに依存しない擬似ランダム関数を GLSL だけで作れないかという話。http://stackoverflow.com/questions/4200224/random-noise-functions-for-glsl からそのまま引用。

float rand(vec2 co){
    return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
}

引数 co にはフラグメントシェーダの場合は gl_FragCoord.xy を渡す。引数は明らかに読み取り専用なので const vec2 co としたほうがよいかもしれない。使う場面として SSAO とか。

どこから出てきたの?

ちなみにこの関数についてどこがオリジナルなのかの質問もある。どうやらそのサイトはすでに消滅しており、2008年2月にアーカイブされてたものがおそらくのオリジナルだろうということのようだ。
http://stackoverflow.com/questions/12964279/whats-the-origin-of-this-glsl-rand-one-liner

Mali-400 上だと動かない模様

ARM の GPU である Mali-400 ではこの関数をそのまま使うことが出来ないようで対策版が作られている模様。
https://gist.github.com/johansten/3633917

shimacpyon
しまぴょんです。主に C++/Qt について書いています。
http://blog.hikarin.jp
dwango
Born in the net, Connected by the net.
https://dwango.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした