如何将 GL_RED 格式转换为 GL_RGBA 格式
How to convert GL_RED to GL_RGBA format
这是片段着色器的代码。
in vec2 TexCoord;
uniform sampler2D texture1;
out vec4 OutColor;
void main()
{
OutColor = texture( texture1 , TexCoord);
}
每当传递任何 GL_RED
格式纹理时,灰度图像输出为红色。
我可以通过在着色器中使用纹理的红色参数来解决这个问题,但是是否可以将 GL_RED 图像作为 GL_RGBA 图像发送到着色器。
unsigned char* image = SOIL_load_image(file, &width, &height, &channels , SOIL_LOAD_AUTO);
// Set The Internal Format
if (channels == 4)
{
texture.Internal_Format = gammaCorrect ? GL_SRGB_ALPHA : GL_RGBA;
texture.Image_Format = gammaCorrect ? GL_SRGB_ALPHA : GL_RGBA;
}
else if(channels == 3)
{
texture.Internal_Format = gammaCorrect ? GL_SRGB : GL_RGB;
texture.Image_Format = gammaCorrect ? GL_SRGB : GL_RGB;
}
else if (channels == 1)
{
texture.Internal_Format = GL_RED;
texture.Image_Format = GL_RED;
}
使用 glTexParameter
设置纹理调整参数。例如:
glBindTexture(GL_TEXTURE_2D, textureObject);
if (channels == 1)
{
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, GL_RED);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_RED);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, GL_RED);
}
这会设置将应用于组件的调配。这样一个组件就可以从不同的渠道获取。
这是片段着色器的代码。
in vec2 TexCoord;
uniform sampler2D texture1;
out vec4 OutColor;
void main()
{
OutColor = texture( texture1 , TexCoord);
}
每当传递任何 GL_RED
格式纹理时,灰度图像输出为红色。
我可以通过在着色器中使用纹理的红色参数来解决这个问题,但是是否可以将 GL_RED 图像作为 GL_RGBA 图像发送到着色器。
unsigned char* image = SOIL_load_image(file, &width, &height, &channels , SOIL_LOAD_AUTO);
// Set The Internal Format
if (channels == 4)
{
texture.Internal_Format = gammaCorrect ? GL_SRGB_ALPHA : GL_RGBA;
texture.Image_Format = gammaCorrect ? GL_SRGB_ALPHA : GL_RGBA;
}
else if(channels == 3)
{
texture.Internal_Format = gammaCorrect ? GL_SRGB : GL_RGB;
texture.Image_Format = gammaCorrect ? GL_SRGB : GL_RGB;
}
else if (channels == 1)
{
texture.Internal_Format = GL_RED;
texture.Image_Format = GL_RED;
}
使用 glTexParameter
设置纹理调整参数。例如:
glBindTexture(GL_TEXTURE_2D, textureObject);
if (channels == 1)
{
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, GL_RED);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_RED);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, GL_RED);
}
这会设置将应用于组件的调配。这样一个组件就可以从不同的渠道获取。