Opengl GL:将图像映射到立方体的面:使用ilutGLLoadImage()获取全黑纹理
我只想将图像作为纹理映射到立方体的面并显示出来。立方体上没有我的图像,而是全黑的。我的图片都是64x64 jpg的 我的申请代码如下。最初,它是一个生成2个棋盘纹理的程序,每次在立方体的所有面上显示1个,允许用户在它们之间切换。我想要的不是所有面上的棋盘,而是图像。我已经注释掉了他们的纹理生成和纹理加载代码,最重要的是,将其替换为ilutGLLoadImage()(来自DevIL):它应该可以一举杀死大多数图像纹理加载鸟类。这在init()中发生。唯一的控制台输出是“1,2”(来自my cout),这意味着图像已加载并提供了有效的纹理ID。为什么立方体是黑色的 应用程序代码(init()是开始查找的好地方): 片段着色器:Opengl GL:将图像映射到立方体的面:使用ilutGLLoadImage()获取全黑纹理,opengl,texture-mapping,devil,Opengl,Texture Mapping,Devil,我只想将图像作为纹理映射到立方体的面并显示出来。立方体上没有我的图像,而是全黑的。我的图片都是64x64 jpg的 我的申请代码如下。最初,它是一个生成2个棋盘纹理的程序,每次在立方体的所有面上显示1个,允许用户在它们之间切换。我想要的不是所有面上的棋盘,而是图像。我已经注释掉了他们的纹理生成和纹理加载代码,最重要的是,将其替换为ilutGLLoadImage()(来自DevIL):它应该可以一举杀死大多数图像纹理加载鸟类。这在init()中发生。唯一的控制台输出是“1,2”(来自my cout
#version 150
in vec2 texCoord;
out vec4 fColor;
uniform sampler2D texture;
void main()
{
fColor = texture2D( texture, texCoord );
}
可能重复?看起来可能是ilutGLLoadImage中的错误。@jozzas我刚刚添加了GL错误检查,就像他所做的那样。我确实有一个错误:1280,GL\u无效\u枚举。和他的错误不一样,我不明白原因是什么。也许是个bug?嗯,可能不是ilutGLLoadImage中的bug。我尝试了这里给出的函数。还在拿一个黑色的立方体,你看到他的了吗?也许用他的资料作为参考,看看你能做些什么。谢谢,我刚查过。我正试图尽可能密切地关注它,比如电话的顺序。我添加了他的输出,让我知道我的图像加载了正确的属性。我们的代码之间最大的区别在于我使用了a)可编程着色器(参见我的原始帖子)和b)GLUT。他没有。
#version 150
in vec4 vPosition;
in vec2 vTexCoord;
out vec4 color;
out vec2 texCoord;
uniform vec3 theta;
void main()
{
const float DegreesToRadians = 3.14159265 / 180.0;
vec3 c = cos( DegreesToRadians * theta );
vec3 s = sin( DegreesToRadians * theta );
mat4 rx = mat4( 1.0, 0.0, 0.0, 0.0,
0.0, c.x, -s.x, 0.0,
0.0, s.x, c.x, 0.0,
0.0, 0.0, 0.0, 1.0);
mat4 ry = mat4( c.y, 0.0, s.y, 0.0,
0.0, 1.0, 0.0, 0.0,
-s.y, 0.0, c.y, 0.0,
0.0, 0.0, 0.0, 1.0 );
// Workaround for bug in ATI driver
ry[1][0] = 0.0;
ry[1][1] = 1.0;
mat4 rz = mat4( c.z, -s.z, 0.0, 0.0,
s.z, c.z, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0 );
// Workaround for bug in ATI driver
rz[2][2] = 1.0;
texCoord = vTexCoord;
gl_Position = rz * ry * rx * vPosition;
}
#version 150
in vec2 texCoord;
out vec4 fColor;
uniform sampler2D texture;
void main()
{
fColor = texture2D( texture, texCoord );
}