GLSL - перенос значения между границами

glsl shader wrap

9 просмотра

1 ответ

Как можно обернуть значение вокруг произвольных границ? Я хочу избежать проверок, поэтому я пришел к этому, который работает для нижней границы, используя шаг:

float check = step(-1, val)*2.0-1.0;
val *= check;

Это выведет любое значение, которое имеет вектор "val", когда оно больше -1, и обернется и перепрыгнет на 1, когда оно превысит его.

Моя цель состоит в том, чтобы, когда значение превышает определенный порог, оно «оборачивается» и начинается с противоположной стороны экрана. Таким образом, если движущаяся точка, например, превышает 1, она снова появится на экране в позиции -1 и будет продолжать двигаться дальше. С другой стороны, если ниже -1, он появится в позиции 1 и будет продолжать двигаться оттуда.

Я застрял на некоторое время и не могу обернуть голову вокруг этого ...

Спасибо!

Автор: Darien Brito Источник Размещён: 17.05.2019 02:57

Ответы (1)


0 плюса

Моя цель состоит в том, чтобы, когда значение превышает определенный порог, оно «оборачивается» и начинается с противоположной стороны экрана. Так, если движущаяся точка, например, превышает 1, она снова появится на экране в положении -1,

То, что вы хотите сделать, может быть достигнуто с помощью функции mod(x, y)https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/mod.xhtml , которая возвращает остаток от деления x на y:

y = mod(x+1.0, 2.0)-1.0 

Обратите внимание, что функция использует mod()https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/mod.xhtml поддержку genType. Это означает xи yможет даже иметь тип vec2, vec3или vec4. Конечно xи yдолжны быть однотипными.

Автор: Rabbid76 Размещён: 26.02.2019 07:46
Вопросы из категории :
32x32