#random #parallel-processing #range #glsl #compute-shader
Вопрос:
Мне нужно сгенерировать псевдослучайное число в указанном диапазоне, используя glsl
Что-то вроде этого
float rand(vec2 co)
{
return fract(sin(dot(co.xy,vec2(12.9898,78.233))) * 43758.5453);
}
или это
highp float rand(vec2 co)
{
highp float a = 12.9898;
highp float b = 78.233;
highp float c = 43758.5453;
highp float dt= dot(co.xy ,vec2(a,b));
highp float sn= mod(dt,3.14);
return fract(sin(sn) * c);
}
как отсюда, так и отсюда, соответственно, вероятно, сработало бы, но мне нужно иметь возможность указать диапазон (т. Е. 1-10) для каждого псевдослучайного числа.
Кроме того, я использую вычислительный шейдер glsl, а не вершинный шейдер, поэтому у меня нет доступа к типичным переменным вершинного шейдера, таким как st
Комментарии:
1. «таким образом, у меня нет доступа к типичным переменным вершинного шейдера, таким как st» —
st
доступ к компонентам вектора. Смотри, Как Кружится2. Обе функции создают случайные значения в диапазоне [0.0, 1.0]. Вы можете сопоставить это с диапазоном [a, b] с помощью a (b-a) * x или
mix(a, b, x)