繁体   English   中英

OpenGL纹理无法渲染

[英]OpenGL texture doesn't render

纹理根本无法渲染,几何图形全为黑色。

截图: http//i.imgur.com/ypMdQY4.png

代码: http//pastebin.com/SvB8rxxt

我还将链接到我要渲染的纹理和Transformations.py模块,但是我没有声誉,不能放置两个以上的链接。 谷歌搜索“现代opengl 02”将为您提供从中获得前者的教程,而“ transformations py”将为您提供后者。

搜索“ TEXTURE STUFF START”以查找设置纹理的位置。

我尝试戳所有部分(图像加载,纹理加载,纹理坐标数据,着色器),但我不知道真正确定哪个缺陷的方法,就我所知,一切似乎都很好。

更新 :更新了代码,修复了一些潜在的问题,但仍然存在相同的问题。

我不是python专家,所以也许我缺少了一些东西。

将所有片段渲染为黑色必须是以下事情之一:

  1. 未加载纹理数据
  2. 纹理未绑定到该着色器的采样器
  3. 照明数学出现问题
  4. 制服没有正确发送到着色器
  5. 法线的错误属性(例如如果它们全为0)。

由于您的着色器是直接的finalColor = texture(tex, fragTexCoord); 排除了照明数学和制服。 因此,纹理采样器一定有问题。

在iOS中,当我绑定纹理时,我必须执行以下操作:

    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, texture);
    glUniform1i(glUniforms[U_textureSampler], 0);

我认为您需要应用相同的步骤。 也许texturebuffer.bind()为您执行了这些步骤之一。 但是在其他地方,您需要激活纹理采样器,将其绑定并设置统一。

未激活的纹理可能显示为黑色。 设置不正确的制服可能会为该制服返回0。

渲染时,必须将着色器的“ uniform sampler2D tex”连接到要绑定的纹理。

我还认为调用您的纹理ID tex (将其返回给glGenTextures然后又称为统一的“ tex”)是令人困惑的,并且形式可能很糟。这是两种不同的情况。一是纹理id,另一是统一变量。

我要做的第一件事是将id的名称从tex更改为texID以使它们texID 然后,您可能会发现,在代码中没有任何地方可以获取glsl统一变量tex的统一位置(glGetUniformLocation),顺便说一下,必须编译着色器之后进行此操作。 也许我没有看到python中的一些帮助器。

但是,当您执行texture buffer.bind ,将事物连接到统一变量'tex'的位置在哪里?

*更新1 *

关于如何获得统一位置并使用它的建议。 着色器编译后执行此操作。 它将统一的位置ID传回您的应用程序:

u_tex = glGetUniformLocation(shader, "tex")

将纹理id变量更改为texID如下所示:

texID = glGenTextures(1)
glBindTexture(GL_TEXTURE_2D, texID)

然后在您的显示循环中,当您绑定纹理以使用它时,请执行以下操作:

glActiveTexture(GL_TEXTURE0)
glBindTexture(GL_TEXTURE_2D, texID)
glUniform1i(u_tex, 0)

而且我不得不承认我不知道texturebuffer.bind()作用。 因此,请尝试在该行之前或之后的三行。

*更新2 *

只是注意到您还缺少glEnable(GL_TEXTURE_2D) ,它应该与glTexParameter东西一起放在那里。 将其添加到这些行上方。

*更新3 *

就像在着色器中进行测试一样,替换finalColor = texture(tex, fragTexCoord); finalColor = vec4(1.0,0.0,0.0,1.0); 看看盒子是否变成红色。 因为现在我想到了,所以我不知道finalColor是什么。 应该是gl_FragColor =

*更新4 *

执行上述测试,并确保可以手动设置片段的颜色。 我没有意识到您使用的是OpenGL 3.0。 我当时在想2.0。 输出变量名称取决于您的glsl版本。 您已将版本设置为1.3。 请参阅这篇文章,并确保您也正在正确地执行该部分: 片段着色器如何知道要用于像素颜色的变量?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM