OpenGL 3.3纹理映射3D对象

时间:2017-04-25 08:35:22

标签: c++ opengl texture-mapping

我正在尝试使用两种不同的纹理来构建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 *,颜色会再次变化,显示纯色而不是纹理(实际上它看起来像是对我照片的左下角进行采样)。

我是以错误的方式绘制它还是采样问题?

0 个答案:

没有答案