我正在尝试使用两种不同的纹理来构建3D泳池表,一种用于桌面,另一种用于桌腿和墙壁。桌面基本上是一个2D矩形,我在其上应用了一些绿色纹理,一切正常。另一方面,当我尝试纹理构成表格的立方体时,我遇到了一些采样或映射问题
这是我的代码:
创建vaos和地图
// Cube vertex data
float cubeVertices[ CUBE_NUM_VERTICES * VALS_PER_VERT ] = {
-1.0, -1.0, 1.0,
1.0, -1.0, 1.0,
1.0, 1.0, 1.0,
-1.0, 1.0, 1.0,
-1.0, -1.0, -1.0,
1.0, -1.0, -1.0,
1.0, 1.0, -1.0,
-1.0, 1.0, -1.0 };
// 12 triangles - 2 per face of the cube
unsigned int legWallIndices[CUBE_NUM_TRIS*3] = {
0,1,2, 2,3,0,
1,5,6, 6,2,1,
5,4,7, 7,6,5,
4,0,3, 3,7,4,
3,2,6, 6,7,3,
4,5,1, 1,0,4
};
float tableTopVertices[4 * VALS_PER_VERT] = {
-2.5f, 0.26f, -5.0f,
2.5f, 0.26f, -5.0f,
2.5f, 0.26f, 5.0f,
-2.5f, 0.26f, 5.0f,
};
unsigned int tableTopIndices[2*3] = {
0,1,2, 2,3,0,
};
float tabletTopTexCoord[4 * VALS_PER_TEX] = {
0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f
};
float legWallTexCoord[8 * VALS_PER_TEX] = {
1.0f, 0.0f,
0.0f, 0.0f,
0.0f, 1.0f,
1.0f, 1.0f,
// not working properly idk why
1.0f, 0.0f,
0.0f, 0.0f,
0.0f, 1.0f,
1.0f, 1.0f,
};
顶点着色器
in vec2 green_tex_coord;
in vec2 wood_tex_coord;
out vec2 st1;
out vec2 st2;
void main(void)
{
st1 = green_tex_coord;
st2 = wood_tex_coord;
}
片段着色器
in vec2 st1;
in vec2 st2;
uniform sampler2D greenTexMap;
uniform sampler2D woodTexMap;
void main(void)
{
vec4 topClr = vec4(0.04, 0.42, 0.1, 1.0);
vec4 sideClr = vec4(0.5, 0.35, 0.05, 1.0);
if (predicate){
fragColour = topClr * texture(greenTexMap, st1);
}else{
fragColour = sideClr * texture(woodTexMap, st2);
}
}
这是结果(绿色纹理正在工作,但木材不起作用)table
如果我删除* texture(woodTexMap, st2)
颜色变化(它显示sideClr),这意味着纹理到达片段但是它被严重采样或映射。如果我删除sideClr *
,颜色会再次变化,显示纯色而不是纹理(实际上它看起来像是对我照片的左下角进行采样)。
我是以错误的方式绘制它还是采样问题?