Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C GLSL纹理贴图产生纯色_C_Opengl_Glsl_Shader - Fatal编程技术网

C GLSL纹理贴图产生纯色

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

我正在尝试编写一些基本着色器,以将ppm文件映射到我的形状。不幸的是,我得到的不是漂亮的五彩纹理(我使用的是石砖图案),而是深紫色的纯色阴影

这是我的代码:
初始化:

呈现:

顶点着色器:

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);