缩放2D纹理以模拟缩放以防止拉伸

时间:2017-12-01 07:16:32

标签: c++ opengl

我有一个OpenGL 3.3程序,它有不同的对象,例如一个简单的立方体。立方体的尺寸是1x1x1(顶点从-0.5,-0.5,-0.5到0.5,0.5,0.5)并且每边都有一个2D纹理纹理。纹理是可重复的(无缝)。

使用我的实际代码,模型缩放看起来像这样(忽略实际纹理):

enter image description here

像这样缩放后:

enter image description here

在这种情况下,纹理应保持z方向的大小,但在z轴上重复。

是否有一种很好的方法可以将纹理适当地缩放到模型的缩放以防止它拉伸?或者我是否必须创建3D纹理?

我发现的问题是,在我的着色器中,我只得到立方体的(缩放)点,例如-0.5,-1,5,-0.5,但纹理的坐标仅为2D(0.0, 0.0)并且我不知道我必须缩放纹理的哪一面,因为我不知道它当前将呈现在哪一面。

然而,为了完整起见,顶点着色器代码:

layout (location = 0) in vec3 aPos;
layout (location = 1) in vec3 aNormal;
layout (location = 2) in vec2 aTexCoord;

out vec2 TexCoord;
out vec3 FragPos;
out vec3 Normal;

uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;

void main()
{
    FragPos = vec3(model * vec4(aPos, 1.0));
    Normal = mat3(transpose(inverse(model))) * aNormal;
    TexCoord = aTexCoord;
    gl_Position = projection * view * model * vec4(aPos, 1.0);


    //gl_Position = projection * view * model * vec4(aPos, 1.0f);
    //TexCoord = aTexCoord;
}

片段着色器如下所示:

out vec4 FragColor;

in vec2 TexCoord;

// texture samplers
uniform sampler2D texture_diffuse1;
uniform vec4      color;

void main()
{
    FragColor = color + texture(texture_diffuse1, TexCoord);
}

0 个答案:

没有答案