use*_*204 3 c++ opengl glsl fragment-shader
我将 vec4 传递给带有 xyz 和颜色值的着色器,并且尝试将颜色分量按位移动到它们自己的 rg 和 b 浮点,但遇到问题:
顶点着色器:
#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);
}
Run Code Online (Sandbox Code Playgroud)
片段着色器:
#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);
}
Run Code Online (Sandbox Code Playgroud)
错误:
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
Run Code Online (Sandbox Code Playgroud)
有什么想法我做错了吗?
好的,完成了:)
#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);
}
Run Code Online (Sandbox Code Playgroud)
我将 4 位结构传递给点云中一个点的着色器 xyz 坐标,第四个值是浮点数中的编码颜色。所以我需要从浮点数中提取 RGB 信息,为每个点赋予颜色。
感谢大家的帮助:)