@versolite32

Как встроить Math.Random в webgl?

Есть такой скрипт на webgl https://codepen.io/Khangeldy/pen/pgXNMZ
Как сделать, значения переменных рандомными?
  • Вопрос задан
  • 79 просмотров
Пригласить эксперта
Ответы на вопрос 1
sfi0zy
@sfi0zy
Creative frontend developer
Стандартной функции rand в glsl в нашем распоряжении нет. Есть популярная реализация:

float rand(vec2 seed) {
    return fract(sin(dot(seed, vec2(12.9898,78.233))) * 43758.5453123);
}


Ее копипастят годами из проекта в проект, и используют, когда нужно что-то нарандомить.

Но глобальные константы должны быть именно константами, известными на этапе компиляции. На попытку присвоить им значение, вычисленное в какой-то функции - получим ошибки компиляции. Исключения по этой части в glsl делаются только для специальных переменных, в частности для uniform. Они могут быть определены уже в реальном времени. Можно было бы нарандомить все в main, и потом передавать все значения в остальные функции в качестве параметров, но может быть быстрее и удобнее добавить больше uniform-переменных, вроде:

var tuniform = {
	SEA_SPEED: {
		type: 'f',
		value: Math.random() * 10.0
	},
	time: {
// ...


в JS, и в шейдере:

// Вместо
// const float SEA_SPEED = 0.8;
// используем
uniform float SEA_SPEED;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы