Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将2D纹理缩放到模型缩放以防止拉伸_C++_Opengl - Fatal编程技术网

C++ 将2D纹理缩放到模型缩放以防止拉伸

C++ 将2D纹理缩放到模型缩放以防止拉伸,c++,opengl,C++,Opengl,我有一个OpenGL 3.3程序,其中有不同的对象,例如一个简单的立方体。立方体的尺寸为1x1x1(顶点从-0.5、-0.5、-0.5到0.5、0.5、0.5),并且在每侧使用一个2D纹理进行纹理处理。纹理是可重复的(无缝的) 使用我的实际代码,模型缩放如下所示(忽略实际纹理): 这样缩放之后: out vec4 FragColor; in vec2 TexCoord; // texture samplers uniform sampler2D texture_diffuse1; unif

我有一个OpenGL 3.3程序,其中有不同的对象,例如一个简单的立方体。立方体的尺寸为1x1x1(顶点从-0.5、-0.5、-0.5到0.5、0.5、0.5),并且在每侧使用一个2D纹理进行纹理处理。纹理是可重复的(无缝的)

使用我的实际代码,模型缩放如下所示(忽略实际纹理):

这样缩放之后:

out vec4 FragColor;

in vec2 TexCoord;

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

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


在这种情况下,中的纹理应保持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);
}

你想让它看起来像什么?如果比例不是整数呢?不确定你的意思,拉伸是实际的比例,没有办法。也许你可以让木框架不标度,只标内部的正方形。这将需要您增加多边形数并仅拉伸内部正方形,这样帧将只会变得更长而不是更厚。在这种情况下,中的纹理应保持z方向的大小,但在z轴上重复。这可能不起作用,但如果将比例矩阵传递给vertexshader,开始时应该是identity,然后执行如下操作:
vec4 texCoord4=scaleMatrix*vec4(TexCoord,0,1)
TexCoord=vec2(texCoord4)`您可能还需要一个
glTexParameteri(GL_纹理2D,GL_纹理包裹,GL_重复)如果在z轴上缩放,它将不起作用,但只要稍加修改,您就可以完成您想要的maybe@DraykoonD我已经想到了这个选项,但是你怎么说它不适用于z轴。你希望它看起来像什么?如果比例不是整数呢?不确定你的意思,拉伸是实际的比例,没有办法。也许你可以让木框架不标度,只标内部的正方形。这将需要您增加多边形数并仅拉伸内部正方形,这样帧将只会变得更长而不是更厚。在这种情况下,中的纹理应保持z方向的大小,但在z轴上重复。这可能不起作用,但如果将比例矩阵传递给vertexshader,开始时应该是identity,然后执行如下操作:
vec4 texCoord4=scaleMatrix*vec4(TexCoord,0,1)
TexCoord=vec2(texCoord4)`您可能还需要一个
glTexParameteri(GL_纹理2D,GL_纹理包裹,GL_重复)如果在z轴上缩放,它将不起作用,但只要稍加修改,您就可以完成您想要的maybe@DraykoonD我已经想到了这个选项,但是你怎么说它不适用于z轴。