2016-02-09 3 views
0

Я новичок в шейдерах и не могу понять, почему функция mod() не работает так, как я ожидал. Я пишу шейдер для SKScene в SpriteKit, используя Xcode. Я могу изменить весь экран красного цвета, поэтому я знаю, что шейдер применяется к сцене. Было бы здорово, если бы кто-нибудь мог взглянуть на приведенный ниже код и помочь мне.Изменение 4-го пикселя с шейдером

Благодаря

vec2 xy = gl_FragCoord.xy; 
vec4 colour = vec4(0.0 ,0.0 ,0.0 ,1.0); 
float m = mod(xy.x, 3.0); 

if (m == 0.0) { 
    // never going here 
    colour.r = 1.0;//turn it red 
} 

gl_FragColor = colour; 
+0

Что именно вы ожидаете и как оно не работает? – thanksd

+0

Я ожидаю увидеть черный экран с красными вертикальными линиями каждый третий пиксель. Я ожидал, что значение от 0 до 2 будет возвращено. Экран всегда черный. кажется, что m никогда не равно нулю. – textfield

+0

Попробуйте изменить выражение modulo на 'float m = mod (xy.x, 4.0)' и ваш if-statement на 'if (int (m) == 0) {'. – 0x141E

ответ

0

Изменения мода значения для целых чисел работали.

highp int x = int(xy.x); 
//float m = xy.x - 3.0 * floor(xy.x/3.0); 
highp int m = mod(xy.x, 3); 
+1

Вы уверены, что это скомпилируется? Кроме того, похоже, что вы меняете каждый третий пиксель. – 0x141E

+0

Это все сработало. Это было связано с тем, что функция mod является целым числом, а не float. Да, это изменило каждый третий пиксель. Должно быть, он написал по ошибке, но принцип тот же. – textfield

Смежные вопросы