QML — использование fmod() в ShaderEffect?

#qt #qml #glsl

#qt #qml #glsl

Вопрос:

Я пытаюсь вычислить «циклическое смещение» в моем шейдере GLSL (т. Е. Вычислить value offset , привязанный к [0, 1] диапазону).

В настоящее время я в конечном итоге прибегаю к неприятному взлому, включающему множество приведений и умножение / деление на 100, чтобы значения были целыми, чтобы работал integer-mod (%) . Это выглядит примерно так:
float x = float(int((qt_TexCoord0.x timeOffset) * 100.0) % 100) / 100.0

Два вопроса:
1. Есть ли что-то подобное fmod() , что я мог бы использовать вместо этого?
2. Возможно ли использовать #include's в шейдерах GLSL? Или мне нужно встроить какой-либо импорт, который я хотел бы выполнить в противном случае?

Ответ №1:

GLSL предоставляет mod() , который вычисляет x-y*floor(x/y) , в то время как HLSL fmod() , я полагаю, вычисляет x-y*trunc(x/y)

https://www.opengl.org/sdk/docs/man4/html/mod.xhtml

На момент написания #include препроцессор еще недоступен.

https://www.opengl.org/wiki/Core_Language_ (GLSL)