我有一个简单的RGBA纹理,我将在OpenGL的矩形/四边形上投影。
但是,我想在该纹理的rgb像素中进行一些操作,例如,我希望显示的颜色是原始图像的RGB像素的某些功能。
我的问题是:我可以将片段着色器应用于2D纹理吗?如果可以,我如何访问原始纹理图像的rgb值?
任何帮助都将不胜感激。
答案 0 :(得分:0)
你当然可以这样做。像往常一样渲染四边形并将纹理作为sampler2D
制服发送到片段着色器。
在片段着色器中,您可以调用texture
或texelFetch
。 texture
对纹理进行采样,texelFetch
从纹理中查找RGB纹素,而不执行插值等。
以下是片段着色器的外观示例:
片段着色器
#version 330 core
uniform vec2 resolution;
uniform sampler2D myTexture;
out vec3 color;
void main()
{
vec2 pos = gl_FragCoord.xy / resolution.xy;
pos.y = resolution.y - pos.y;
color = texture(myTexture, pos).xyz;
}
然后在申请方面:
<强>初始化强>
glGenTextures(1, &m_textureID);
glBindTexture(GL_TEXTURE_2D, m_textureID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, m_imageWidth, m_imageHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, pImage);
m_textureUniformID = glGetUniformLocation(m_programID, "myTexture");
渲染循环
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, m_textureID);
glUniform1i(m_textureUniformID, 0);