2012-05-29 4 views
0

Я использую three.js для вызова фрагментарного шейдера - этот шейдер определяет цвет моего материала, разбитый на rgb, - и я хочу посмотреть, могу ли я умножить эти цвета по случайному значению. Это код, я использую до сих пор:three.js/webGL/GLSL - использование случайной математики

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 
+1

Вы хотите, чтобы случайное число отличалось для каждого фрагмента, но не менялось от кадра к кадру? Вы хотите, чтобы он был одинаковым для каждого фрагмента, но менялся от кадра к кадру? Или вы хотите оба, создавая тем самым кошмар мигающих пикселей для зрителя? –

+0

Либо я полагаю. Кошмар мигающих пикселей звучит интригующе =) Я экспериментирую на этом этапе. – mheavers

ответ

4

Для psuedorandom значений в шейдере я настоятельно рекомендую Ashima's WebGL noise library. Он принимает значение x/y/z и выплескивает симплексный шум. Это означает, что он стабилен от кадра к кадру. Если вам нужны случайные значения, которые меняют, передайте модулированное по времени значение в функцию шума.

+0

Я могу поручиться за качество их реализации шума Perlin, поскольку я использовал его в прошлом. Один из авторов говорит об этом немного подробнее: http://stackoverflow.com/a/9823712/19679 –