GLSL将纹理渲染为黑色和蓝色

时间:2016-03-18 05:41:12

标签: c++ opengl glsl

我试图用openGL和GLSL渲染纹理。纹理应该在浮动立方体上呈现。

纹理:http://imgur.com/Actqtx1

结果:http://imgur.com/MXIOEvS

立方体是一种奇怪的蓝色和黑色混合物。即使我尝试其他纹理,结果也是一样的。在上面的屏幕截图中,我使用" fract(worldspace"以确保着色器正常工作)渲染了一架飞机。

很明显," color = texture(myTextureSampler,UV).rgb;"产生错误的颜色,但我不知道为什么。纹理坐标和纹理数据似乎可以正确读取和缓冲。

之前有没有人见过这种效果?有谁知道我的问题可能在哪里?我可以根据要求提供代码段。

1 个答案:

答案 0 :(得分:0)

你看错了方向。这不是你的着色器错了(也许是这样)。你的问题在纹理加载过程中更早开始。

你会看到你的纹理看起来有多么奇怪的倾斜。如果在调用glTexImage之前没有正确设置对齐和像素行步幅,通常会发生这种情况,请参阅glPixelStorei(GL_UNPACK_…,)参数。

我看到的另一个问题是,无论你加载到OpenGL中的是什么,都与原始图片没有任何相似之处。它看起来像bitnoise。这告诉我,你可能正在向OpenGL提供一些压缩数据,甚至可能是图片文件。

OpenGL不知道如何处理图像文件格式。它知道一些特殊的压缩格式,但这些格式是GPU用来降低内存带宽要求的压缩格式,而不是像PNG或JPEG那样。

如果您手头没有特殊的纹理压缩格式,OpenGL需要一个原始像素阵列。