C GLSL纹理贴图产生纯色
我正在尝试编写一些基本着色器,以将ppm文件映射到我的形状。不幸的是,我得到的不是漂亮的五彩纹理(我使用的是石砖图案),而是深紫色的纯色阴影 这是我的代码:C GLSL纹理贴图产生纯色,c,opengl,glsl,shader,C,Opengl,Glsl,Shader,我正在尝试编写一些基本着色器,以将ppm文件映射到我的形状。不幸的是,我得到的不是漂亮的五彩纹理(我使用的是石砖图案),而是深紫色的纯色阴影 这是我的代码: 初始化: 呈现: 顶点着色器: varying vec2 uv; void main() { uv = vec2(gl_MultiTexCoord0.st); gl_Position = ftransform(); } 片段着色器: uniform sampler2D texture1; varying vec2 uv
初始化: 呈现: 顶点着色器:
varying vec2 uv;
void main() {
uv = vec2(gl_MultiTexCoord0.st);
gl_Position = ftransform();
}
片段着色器:
uniform sampler2D texture1;
varying vec2 uv;
void main() {
gl_FragColor = texture2D(texture1, uv);
}
有人看到这里有什么问题吗?我似乎不明白
我试着用一种基本的白色,读2x2的浮动,但我还是得到了一种颜色。它是浅红色。看起来您在拥有所有其他纹理功能后正在绑定纹理。您应该将对glBindTexture的调用放在对glGenTextures的调用之后,因为您必须先绑定纹理,然后才能将图像上载到其中。另一个问题是,在调用glUniform1i(varloc,textName)时,不应将采样器的统一变量设置为textName,而应将其设置为0,因为该变量表示活动纹理单元,并且您使用了glActiveTexture(GL_TEXTURE0) 看起来您在拥有所有其他纹理函数后正在绑定纹理。您应该将对glBindTexture的调用放在对glGenTextures的调用之后,因为您必须先绑定纹理,然后才能将图像上载到其中。另一个问题是,在调用glUniform1i(varloc,textName)时,不应将采样器的统一变量设置为textName,而应将其设置为0,因为该变量表示活动纹理单元,并且您使用了glActiveTexture(GL_TEXTURE0) 如果整个对象只有一种颜色,纹理坐标可能有问题。我会试着看看它们是否正确。可以通过如下方式修改片段着色器来完成此操作:
gl_FragColor = vec3(uv.xy, 0);
如果您的整个图像仍然使用一种颜色渲染,则发送纹理坐标的方式有问题。您正在使用一些不推荐使用的功能(即时模式,gl_multi-excoord0),可能它没有像您预期的那样协同工作:
“请记住,对于GLSL 1.30,您应该定义自己的顶点属性。”如果您得到的是整个对象的单一颜色,则纹理坐标可能有问题。我会试着看看它们是否正确。可以通过如下方式修改片段着色器来完成此操作:
gl_FragColor = vec3(uv.xy, 0);
如果您的整个图像仍然使用一种颜色渲染,则发送纹理坐标的方式有问题。您正在使用一些不推荐使用的功能(即时模式,gl_multi-excoord0),可能它没有像您预期的那样协同工作:
“请记住,对于GLSL 1.30,您应该定义自己的顶点属性。”glGenTexture之后的绑定也会产生纯色,这次是黑色。事实上,glTexImage2D之前的任何时候绑定都会导致黑色,而后缀则会导致紫色。这是不是因为我的图像可能没有被上传,结果我得到了所有的0?我认为紫色是更好的结果,因为它不是0。我怀疑我的问题在于我的纹理访问。在glGenTextures之后,你肯定需要glBindTexture。我想你打电话给GLTEXTERE2D也有问题。第三个参数必须是命名常量之一,如GL_RGB,而不是数字3。glGenTexture之后的绑定也会导致纯色,这次是黑色。事实上,glTexImage2D之前的任何时候绑定都会导致黑色,而后缀则会导致紫色。这是不是因为我的图像可能没有被上传,结果我得到了所有的0?我认为紫色是更好的结果,因为它不是0。我怀疑我的问题在于我的纹理访问。在glGenTextures之后,你肯定需要glBindTexture。我想你打电话给GLTEXTERE2D也有问题。第三个参数需要是一个命名常量,如GL_RGB,而不是数字3。我无意中在我的所有列表节点(顶点)中使用了相同的纹理坐标。这帮我调试了它!非常感谢。把坐标画成颜色真是个好主意。我无意中在我的所有列表节点(顶点)中使用了相同的纹理坐标。这帮我调试了它!非常感谢。把坐标画成颜色真是个好主意。
gl_FragColor = vec3(uv.xy, 0);