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
使用OpenGL/GLSL时,多维数据集映射无法正常工作_Opengl_Glsl_Shader_Skybox - Fatal编程技术网

使用OpenGL/GLSL时,多维数据集映射无法正常工作

使用OpenGL/GLSL时,多维数据集映射无法正常工作,opengl,glsl,shader,skybox,Opengl,Glsl,Shader,Skybox,我对立方体映射技术有一个奇怪的行为:我所有的像素着色器都返回黑色。所以我得到了一个黑屏 情况如下: 我有一个场景只有一个简单的立方体网格(天空盒)和一个轨迹球相机组成 现在,让我们检查资源(6个单独纹理的方面): 以下是图像的详细信息: 因此,正如您所看到的,这些纹理需要以GL_RGB格式加载 现在,对于初始化部分,让我们看看客户端C++纹理加载代码(我使用‘魔鬼’库加载我的图像): 如您所见,立方体贴图纹理绑定到纹理单元1 下面是顶点着色器: #version 400 /* ** Ver

我对立方体映射技术有一个奇怪的行为:我所有的像素着色器都返回黑色。所以我得到了一个黑屏

情况如下:

我有一个场景只有一个简单的立方体网格(天空盒)和一个轨迹球相机组成

现在,让我们检查资源(6个单独纹理的方面):

以下是图像的详细信息:

因此,正如您所看到的,这些纹理需要以GL_RGB格式加载

现在,对于初始化部分,让我们看看客户端C++纹理加载代码(我使用‘魔鬼’库加载我的图像):

如您所见,立方体贴图纹理绑定到纹理单元1

下面是顶点着色器:

#version 400

/*
** Vertex attributes.
*/
layout (location = 0) in vec3 VertexPosition;

/*
** Uniform matrix buffer.
*/
uniform mat4 ModelViewProjMatrix;

/*
** Outputs.
*/
out vec3 TexCoords;

/*
** Vertex shader entry point.
*/
void main(void)
{
    TexCoords = VertexPosition;

    gl_Position = ModelViewProjMatrix * vec4(VertexPosition, 1.0f);
}
最后是片段着色器:

#version 400

/*
** Output color value.
*/
layout (location = 0) out vec4 FragColor;

/*
** Vertex inputs.
*/
in vec3 TexCoords;

/*
** Texture uniform.
*/
uniform samplerCube CubeMapSampler;

/*
** Fragment shader entry point.
*/
void main(void)
{
    vec4 finalColor = texture(CubeMapSampler, TexCoords);

    FragColor = finalColor;
}
因此,所有编译和执行的程序都显示以下结果:

<>但是我想确切地说我使用英伟达NVIEW调试器,我想首先向您展示立方体映射在GPU上正确加载:

正如您在上面的代码片段中所看到的,我的纹理是绑定到unit texture 1的RGB纹理,它是GL_纹理_CUBE_贴图纹理类型。所以直到这里一切似乎都是正确的

如果我在片段着色器中替换该行:

vec4 finalColor = texture(CubeMapSampler, TexCoords);
vec4 finalColor = vec4(TexCoords, 1.0f);
std::cout << glGetError() << std::endl;
顺便说一句:

vec4 finalColor = texture(CubeMapSampler, TexCoords);
vec4 finalColor = vec4(TexCoords, 1.0f);
std::cout << glGetError() << std::endl;
在没有线框的情况下,我得到了以下结果(我直接将模型空间中的顶点坐标渲染为颜色):

与线框的结果相同:

另外,我想精确地指出:

vec4 finalColor = texture(CubeMapSampler, TexCoords);
vec4 finalColor = vec4(TexCoords, 1.0f);
std::cout << glGetError() << std::endl;

std::你能在纹理上设置
GL\u TEXTURE\u MIN\u FILTER
参数吗?是的,我刚刚更新了我的帖子。MIN和MAG过滤器类型为GL_线性,my wrapping类型均等于GL_CLAMP_to_EDGE。另外,我在初始化和主循环期间没有OpenGL错误。真奇怪,谢谢你!你是对的。我意外地将最小过滤器值从最初的GL_-LINEAR重置为GL_-LINEAR\u-MIPMAP\u-LINEAR,并且我没有调用方法glGenerateMipmap(此->m_目标)。这就是立方体贴图颜色渲染不起作用的原因。但是,我想知道为什么函数“glGetError”没有为此返回错误!谢谢你的帮助!再见。@user1364743:它没有重新报告错误,因为这不是错误条件。