2016-04-15 137 views
0

我有一个简单的RGBA纹理,我将在OpenGL中的矩形/四边形上进行投影。但是,我想在该纹理的RGB像素中执行一些操作,例如,我希望显示的颜色是原始图像的RGB像素的某个函数。纹理中的OpenGL片段着色器

我的问题是:我可以将片段着色器应用于2D纹理吗?如果可以,我如何访问原始纹理图像的RGB值?

任何帮助,将不胜感激。

回答

0

你当然可以做到这一点。像往常一样渲染四边形,并将纹理作为sampler2D制服发送到片段着色器。

在片段着色器中,您可以调用texturetexelFetchtexture样品的质地和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); 
相关问题