GLSL Псевдослучайный в диапазоне

#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)