当前位置: 首页 > 知识库问答 >
问题:

OpenGL-链接两个纹理不起作用

方长卿
2023-03-14

我正在尝试将FBO的深度纹理和颜色纹理链接到GLSL着色器(版本4.0)

问题是,同时只有一个链接,这很奇怪,因为其他纹理可以很好地链接在一起(例如:漫反射贴图、法线贴图和镜面反射贴图)

以下是我的绑定RT代码:

void RenderTexture::BindRead(GLuint locationColor,GLuint locationDepth,unsigned int unit,unsigned int dUnit)
{
    colorUnit = unit;
    this->depthUnit = dUnit;
    assert(unit >= 0 && unit <= 31);
    glActiveTexture(GL_TEXTURE0 + unit);
    glBindTexture(GL_TEXTURE_2D,m_rt);
    if (hasDepth)
    {
        assert(depthUnit >= 0 && depthUnit <= 31);
        glActiveTexture(GL_TEXTURE0 + dUnit);
        glBindTexture(GL_TEXTURE_2D,m_depth);
        glUniform1i(locationDepth,dUnit);
    }
    glUniform1i(locationColor,unit);
}

我真的不知道这里怎么了。。。

共有1个答案

芮瑾瑜
2023-03-14

终于,我找到了解决办法!问题是,我在设置了值之后绑定了程序,应该是在之前,这也修复了我遇到的许多其他错误。

 类似资料:
  • 我想将两个1d纹理传递到片段着色器中。我正在创建两个sampler1d纹理,将它们绑定到我的着色器程序,但似乎两个采样器使用相同的纹理。当我对texture1使用采样texelFetch时,它使用了我在texture2中定义的错误颜色。 当我希望看到红色屏幕时,下面的着色器程序会返回绿色屏幕。播放参数我看到,纹理1的buf中的任何变化都会改变纹理2的颜色。有什么办法解决吗? 这是我将着色器采样器绑

  • 我试图用opengl在Qt中显示纹理,但当我运行时它就是不显示纹理。 我做了一些研究,发现我需要将纹理的高度和宽度设为2的幂。我的纹理现在是(1024x1024)。 我还添加了很多glTexParameterf,可以解决我的问题,但仍然没有运气。 EDIT1:是不是我的质地太大了? EDIT2:glBindTexture(GL_TEXTURE_2D,m_textureID);放置在glBindTe

  • 纹理根本不渲染,几何体都是黑色的。 截图:http://i.imgur.com/ypMdQY4.png 代码:http://pastebin.com/SvB8rxxt 我也会链接到我试图渲染的纹理和transformations.py模块,但是我没有被允许放置两个以上链接的声誉。谷歌搜索“现代opengl 02”会给你前者的教程,“转换py”会给你后者。 搜索“纹理材料开始”以查找纹理材料的设置位

  • 嘿,我不能让我的纹理出现,我不知道怎么了。辅导没有帮助。这是我的代码: spriteX=0,spriteY=0,spriteW=400,spriteL=400,x=0,y=0 这是我得到的输出:输出窗口 正如你所见,黑色三角形显示得很好,但没有纹理

  • 我正在尝试在OpenGL/LWJGL中制作一个简单的按钮, 我可以正确地渲染我的2D四边形,但是当我实现纹理时,整个四边形只有大约3/4的部分得到了纹理,就像这样:https://dl.dropboxusercontent.com/u/60223805/glerror1.png 如果我删除纹理坐标,我得到这个:https://dl.dropboxusercontent.com/u/60223805

  • 所以最近我开始阅读OpenGL维基文章。这就是我在这里描述OpenGL纹理的方式。不过,有几点尚不清楚。 以下陈述是真的、假的还是视情况而定? 将两个纹理绑定到同一个纹理单元是不可能的。 将两个采样器绑定到同一个纹理单元是不可能的。 将一个纹理绑定到两个不同的纹理单元是不可能的。 将一个采样器绑定到两个不同的纹理单元是不可能的。 应用程序有责任明确将什么采样器类型传递给什么统一变量。 着色器程序有