立方体贴图中的纹理错误

我正在尝试将这个纹理应用为立方体贴图 。 这是我的结果: 用更正的纹理坐标更新图像

显然,我正在做我的纹理坐标的东西,但我不能为我的生活弄清楚什么。 我甚至没有看到纹理片段的模式。 他们看起来像是一堆不同的面孔。 任何人都可以点亮这个?

顶点着色器:

#version 400 in vec4 vPosition; in vec3 inTexCoord; smooth out vec3 texCoord; uniform mat4 projMatrix; void main() { texCoord = inTexCoord; gl_Position = projMatrix * vPosition; } 

我的片段着色器:

 #version 400 smooth in vec3 texCoord; out vec4 fColor; uniform samplerCube textures void main() { fColor = texture(textures,texCoord); } 

立方体的顶点:

 point4 worldVerts[8] = { vec4( 15, 15, 15, 1 ), vec4( -15, 15, 15, 1 ), vec4( -15, 15, -15, 1 ), vec4( 15, 15, -15, 1 ), vec4( -15, -15, 15, 1 ), vec4( 15, -15, 15, 1 ), vec4( 15, -15, -15, 1 ), vec4( -15, -15, -15, 1 ) }; 

立方体渲染:

 void worldCube(point4* verts, int& Index, point4* points, vec3* texVerts) { quadInv( verts[0], verts[1], verts[2], verts[3], 1, Index, points, texVerts); quadInv( verts[6], verts[3], verts[2], verts[7], 2, Index, points, texVerts); quadInv( verts[4], verts[5], verts[6], verts[7], 3, Index, points, texVerts); quadInv( verts[4], verts[1], verts[0], verts[5], 4, Index, points, texVerts); quadInv( verts[5], verts[0], verts[3], verts[6], 5, Index, points, texVerts); quadInv( verts[4], verts[7], verts[2], verts[1], 6, Index, points, texVerts); } 

背面function(因为这是立方体的内部):

 void quadInv( const point4& a, const point4& b, const point4& c, const point4& d , int& Index, point4* points, vec3* texVerts) { quad( a, d, c, b, Index, points, texVerts, a.to_3(), d.to_3(), c.to_3(), b.to_3()); } 

四画图function:

 void quad( const point4& a, const point4& b, const point4& c, const point4& d, int& Index, point4* points, vec3* texVerts, const vec3& tex_a, const vec3& tex_b, const vec3& tex_c, const vec3& tex_d) { texVerts[Index] = tex_a.normalized(); points[Index] = a; Index++; texVerts[Index] = tex_b.normalized(); points[Index] = b; Index++; texVerts[Index] = tex_c.normalized(); points[Index] = c; Index++; texVerts[Index] = tex_a.normalized(); points[Index] = a; Index++; texVerts[Index] = tex_c.normalized(); points[Index] = c; Index++; texVerts[Index] = tex_d.normalized(); points[Index] = d; Index++; } 

编辑:我忘了提及,在图像中,相机直接指向立方体的背面。 如果你眯起眼睛,你可以看到从角落里出来的对角线。

我尝试着将纹理坐标写成Nathan Reed所建议的颜色,并且仍然从片段着色器中得到了随机值,所以我尝试用(0,1,0)replace所有的纹理坐标(所以颜色,所有的面都应该是绿色的)。 相反,我得到这个: 测试图像

带有b和d顶点的旧结果在纹理中交换: 渲染

好的,我明白了! 即使只传递3个坐标,glVertexAttribPointer()的大小也必须设置为4。

感谢所有帮助过我的人。 我不得不说,我从来没有想过把纹理坐标写成颜色数据!