0
我有一個簡單的RGBA紋理,我將在OpenGL中的矩形/四邊形上進行投影。但是,我想在該紋理的RGB像素中執行一些操作,例如,我希望顯示的顏色是原始圖像的RGB像素的某個函數。紋理中的OpenGL片段着色器
我的問題是:我可以將片段着色器應用於2D紋理嗎?如果可以,我如何訪問原始紋理圖像的RGB值?
任何幫助,將不勝感激。
我有一個簡單的RGBA紋理,我將在OpenGL中的矩形/四邊形上進行投影。但是,我想在該紋理的RGB像素中執行一些操作,例如,我希望顯示的顏色是原始圖像的RGB像素的某個函數。紋理中的OpenGL片段着色器
我的問題是:我可以將片段着色器應用於2D紋理嗎?如果可以,我如何訪問原始紋理圖像的RGB值?
任何幫助,將不勝感激。
你當然可以做到這一點。像往常一樣渲染四邊形,並將紋理作爲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);