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_Fragment Shader - Fatal编程技术网

C++ glsl着色器传递和渲染纹理

C++ glsl着色器传递和渲染纹理,c++,opengl,glsl,shader,fragment-shader,C++,Opengl,Glsl,Shader,Fragment Shader,我正在尝试传递并使用纹理来着色。。。但每次我尝试用最简单的方式使用它时,我都会得到一个黑盒子,有时是白盒子——这取决于我给它的纹理。。不知何故 下面是代码片段witch应该可以工作的地方(我已经移除了包装器以使其更简单): 顶点着色器: #version 120 void main() { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; gl_TexCoord[0] = gl_MultiTexCoord0; }

我正在尝试传递并使用纹理来着色。。。但每次我尝试用最简单的方式使用它时,我都会得到一个黑盒子,有时是白盒子——这取决于我给它的纹理。。不知何故

下面是代码片段witch应该可以工作的地方(我已经移除了包装器以使其更简单):

顶点着色器:

#version 120

void main()
{
    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
    gl_TexCoord[0] = gl_MultiTexCoord0;
}
片段着色器:

#version 120

uniform sampler2D sampler;

void main()
{   
    gl_FragColor = texture2D(sampler, gl_TexCoord[0].xy);
}
当然,我试图绑定的纹理是存在的,并且是完整的。以下是它的参数:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);

正如Plow在评论中所说,我相信这与纹理坐标没有设置有关。仅为第二个四边形设置纹理坐标。第二个四边形也不是使用着色器程序绘制的,而是在与第一个完全相同的坐标中绘制的,这意味着它应该是完全白色的(因为
glColor3f(1.0,1.0,1.0)
),或者根本不应该绘制它(取决于您的相机位置以及是否启用了深度测试)


尝试只绘制第一个四边形,并正确设置纹理坐标。

正如Plow在评论中所说,我认为这与未设置纹理坐标有关。仅为第二个四边形设置纹理坐标。第二个四边形也不是使用着色器程序绘制的,而是在与第一个完全相同的坐标中绘制的,这意味着它应该是完全白色的(因为
glColor3f(1.0,1.0,1.0)
),或者根本不应该绘制它(取决于您的相机位置以及是否启用了深度测试)


尝试仅绘制第一个四边形,并正确设置纹理坐标。

如果在片段着色器中输出其他固定颜色会发生什么情况?它像一个符咒一样工作…它一定是某个地方有什么愚蠢的东西-我找不到什么。我尝试了一些纹理。。即使使用土壤库从文件中加载了一些原始的,每次我只是从纹理中获取纯色填充。每一次,同一纹理的颜色都是相同的,取自不同的部分,但通常取自右上角(1,1)。有趣的是,着色器、纹理、FBO和其他东西工作正常,请帮助。。你是我最后的希望:(我认为问题在于,在将四边形渲染到FBO时,需要设置纹理坐标。顺便说一句:最好避免使用固定函数管道,这将使代码更快,最终的生活更轻松。如果在片段着色器中输出其他固定颜色,会发生什么情况?它像一个符咒一样工作……它一定是stupid某处-我找不到什么。我尝试了几种纹理。即使是使用土壤库从文件中加载的一些原始纹理,每次我只是从纹理中获取纯色填充。每次相同纹理的颜色相同,从不同部分获取,但通常从右上角(1,1).有趣的是,着色器、纹理、FBO和其他东西工作正常,请帮助..你是我最后的希望:(我认为问题在于,在将四边形渲染到FBO时,需要设置纹理坐标。顺便说一句:最好避免使用固定的函数管道,这将使您的代码更快,最终生活更轻松。是的……就是这样!我一直在寻找代码中的一些核心错误,尽管我一直在寻找一些简单的错误首先…我的朋友在看了我的代码5分钟后发现了它。但无论如何,谢谢你宝贵的帮助!=]呵呵,很好。:)没问题!是的……就是这样!我花了很长时间在我的代码中寻找一些核心错误,尽管我先寻找了一些简单的错误……我的朋友在查看我的代码5分钟后发现了它……但无论如何,谢谢你宝贵的帮助!=]呵呵,很好。:)没问题!
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);