2014-12-18 3 views
2

Я передаю vec4 к шейдерам с АБВ и значение цвета, и я попытался побитовое смещение компонент цвета для своих Rg и ​​б поплавков, но имеющие вопросы:Цвет побитового сдвига в OpenGL шейдеров GLSL

Vertex шейдеров:

#version 150 

in vec4 position; 

out vec2 Texcoord; 

uniform mat4 model; 
uniform mat4 view; 
uniform mat4 proj; 

void main() 
{ 
    Texcoord = vec2(position.w, position.w); 
    gl_Position = proj * view * model * vec4(position.xyz, 1.0); 
} 

Фрагмент шейдеры:

#version 150 

in vec2 Texcoord; 
out vec4 outColor; 

uniform sampler2D tex; 

void main() 
{ 
    float data = Texcoord.r; 
    float r = (data>> 16) & 0xff; 
    float g = (data>> 8) & 0xff; 
    float b = data & 0xff; 
    outColor = vec4(r, g, b, 1.0); 
} 

Ошибка:

Error compiling shader: 
0(11) : error C1021: operands to ">>" must be integral 
0(12) : error C1021: operands to ">>" must be integral 
0(13) : error C1021: operands to "&" must be integral 

Любые идеи, что я делаю неправильно?

+0

Там нет оператора сдвига с плавающей точкой типа данных (по крайней мере, не в языке, который я знаю). См. [Это сообщение] (http://stackoverflow.com/questions/9315539/left-shift-float-type) для объяснения – BDL

+0

Вместо этого вы можете вместо этого ввести команду pack –

+1

Я не могу придумать, по какой причине чтобы бит сдвигал значение с плавающей запятой, не могли бы вы точно определить, что вы пытаетесь сделать? –

ответ

2

OK получил это сделать :)

#version 150 

in vec2 Texcoord; 
out vec4 outColor; 

uniform sampler2D tex; 

vec3 unpackColor(float f) 
{ 
    vec3 color; 
    color.r = floor(f/65536); 
    color.g = floor((f - color.r * 65536)/256.0); 
    color.b = floor(f - color.r * 65536 - color.g * 256.0); 
    return color/256.0; 
} 

void main() 
{ 
    float data = Texcoord.r; 
    vec3 unpackedValues = unpackColor(Texcoord.r); 

    outColor = vec4(unpackedValues.bgr, 1.0); 
} 

я проходил 4 бита образования к моему шейдер X Y Z координата точки в облаке точек и четвёртое значение закодирован цвет поплавка. Поэтому мне нужно было извлечь информацию rgb из float, чтобы дать каждой точке цвет.

Спасибо за помощь, ребята :)

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