使用 OpenGL/GLSL 1.2 更改纹理色调
Change tone of texture with OpenGL/GLSL 1.2
我想要图片的纹理改变色调。我有以下代码:
//Function main
...
GLuint idvert = glGetAttribLocation(prog,"posicion");
GLuint idcol = glGetAttribLocation(prog,"color");
GLuint idtex1 = glGetAttribLocation(prog,"coordtx1");
GLuint px = glGetAttribLocation(prog,"px");
GLuint unit1 = glGetUniformLocation(prog,"tex1");
...
float ctex[] = {1.0,0.0,
0.0,1.0,
1.0,1.0,
0.0,0.0};
float data[] = {1.0, 1.0,-5.0,
-1.0,-1.0,-5.0,
1.0,-1.0,-5.0,
-1.0, 1.0,-5.0};
GLuint ind[] = {0,1,2,0,3,1};
GLfloat col[] = {1.0,0.0,0.0,1.0};
glGenBuffers(1,&triangleVBO);
glBindBuffer(GL_ARRAY_BUFFER,triangleVBO);
glBufferData(GL_ARRAY_BUFFER,sizeof(data),data,GL_STATIC_DRAW);
glGenBuffers(1,&triangleIND);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,triangleIND);
glBufferData(GL_ELEMENT_ARRAY_BUFFER,sizeof(ind),ind,GL_STATIC_DRAW);
glGenBuffers(1,&triangleCOL);
glBindBuffer(GL_ARRAY_BUFFER,triangleCOL);
glBufferData(GL_ARRAY_BUFFER,sizeof(col),col,GL_STATIC_DRAW);
glGenBuffers(1,&triangleT[0]);
glBindBuffer(GL_ARRAY_BUFFER,triangleT[0]);
glBufferData(GL_ARRAY_BUFFER,sizeof(ctex),ctex,GL_STATIC_DRAW);
//main loop
glUseProgram(prog);
glVertexAttrib1f(px,posicion);
glVertexAttrib1fv(idcol,col);
glActiveTexture(GL_TEXTURE0);
glUniform1i(unit1,0);
glBindTexture(GL_TEXTURE_2D,idtextura[0]);
glEnableVertexAttribArray(idtex1);
glEnableVertexAttribArray(idcol);
glEnableVertexAttribArray(idvert);
glBindBuffer(GL_ARRAY_BUFFER,triangleT[0]);
glVertexAttribPointer(idtex1,2,GL_FLOAT,GL_FALSE,0,(void*)0);
glBindBuffer(GL_ARRAY_BUFFER,triangleCOL);
glVertexAttribPointer(idcol,4,GL_FLOAT,GL_FALSE,0,(void*)0);
glBindBuffer(GL_ARRAY_BUFFER,triangleVBO);
glVertexAttribPointer(idvert,3,GL_FLOAT,GL_FALSE,0,(void*)0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,triangleIND);
glDrawElements(GL_TRIANGLES,6,GL_UNSIGNED_INT,(void*)0);
glBindTexture(GL_TEXTURE_2D,0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0);
glDisableVertexAttribArray(idvert);
glDisableVertexAttribArray(idcol);
glDisableVertexAttribArray(idtex1);
glUseProgram(0);
这些是我的着色器:
//Vertex shader
#version 120
attribute vec4 posicion;
attribute vec4 color;
attribute vec2 coordtx1;
attribute float px;
varying vec2 UV1;
varying vec4 colfrag;
vec4 tmp;
void main(){
tmp = vec4(posicion.x + px,posicion.y,posicion.z,1.0);
gl_Position = gl_ModelViewProjectionMatrix * tmp;
colfrag = color;
UV1 = coordtx1;
}
//Fragment Shader
#version 120
uniform sampler2D tex1;
varying vec2 UV1;
varying vec4 colfrag;
void main(){
vec4 color1 = texture2D(tex1,UV1);
gl_FragColor = color1 * colfrag;
}
问题是当我渲染时,我的图像是完全黑色的......怎么了?
对应于 tex1 的图像数据似乎没有加载到任何地方 - 您错过了对 glTexImage2D
的调用,可以在其中加载此数据。如果在绘制调用后检查glGetError
,则可能会看到错误。
相关文章:
- OpenInventor从9.8升级到10.4.2后,GLSL纹理返回零
- SFML纹理像播放器
- OpenGL大的3D纹理(>2GB)非常慢
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 着色器纹理值与创建纹理时写入的值不同
- OpenGL将纹理四边形渲染为(0,0)
- 宽度为奇数的16位纹理为片状
- 使用 CUDA 和纹理进行图像减法
- 在不使用统一的情况下将纹理传递给 GLSL 着色器?
- 将使用太多的纹理插值器 - 带旋转的着色器
- dx11 渲染到纹理仅显示透明颜色
- OpenGL 4.3 错误地将第 4 个纹理坐标映射到与第 3 个纹理坐标相同的位置
- 如何使用 DXGI 格式DXGI_FORMAT_R1_UNORM创建 2D 纹理?
- 纹理单位重叠?渲染了错误的纹理
- SFML 纹理变换(放大)
- SDL2 二维纹理分配/池化
- Qt OpenGL 渲染到纹理性能问题
- 为什么我会得到黑色纹理?
- glBindTexture 是否覆盖活动纹理单元的内容
- 使用 OpenGL/GLSL 1.2 更改纹理色调