纹理不适合方形-OpenGL

纹理不适合方形-OpenGL,opengl,glsl,shader,framebuffer,render-to-texture,Opengl,Glsl,Shader,Framebuffer,Render To Texture,我正在尝试创建一个正方形,并在其中间放置一个红色圆圈。正如您在简单的垂直贴图(-1,1)范围到(0,1)范围中所看到的: 如果您查看simple.frag,有以下几行: if(abs(length(coord - vec2(0.5,0.5))) < 0.3) simple.vert: #version 330 core layout (location = 0) in vec3 position; out vec2 coord; void main(){ coord = pos

我正在尝试创建一个正方形,并在其中间放置一个红色圆圈。正如您在简单的垂直贴图(-1,1)范围到(0,1)范围中所看到的:

如果您查看simple.frag,有以下几行:

if(abs(length(coord - vec2(0.5,0.5))) < 0.3)
simple.vert:

#version 330 core

layout (location = 0) in vec3 position;
out vec2 coord;
void main(){
    coord = position.xy*0.5 + vec2(0.5,0.5);
    gl_Position =  vec4(position, 1.0f);
}
simple.frag:

#version 330 core
in vec2 coord;
out vec4 color;
void main(){
    if(abs(length(coord - vec2(0.5,0.5))) < 0.3)
        color = vec4(1.0f, 0.0f, 0.0f, 1.0f);
    else
        color = vec4(0.0f, 1.0f, 0.0f, 1.0f);
}
quad.frag:

#version 330 core
in vec2 TexCoords;
out vec4 color;

uniform sampler2D screenTexture;

void main()
{ 
    color = texture(screenTexture, TexCoords);
}

绘制纹理时,必须修改视口。如果使用窗口的视口,OpenGL将假定纹理与窗口大小相同。因此,只有整个图像的左下角最终会出现在纹理中

因此,在渲染到纹理之前:

glViewport(0, 0, 256, 256);

。。。并在绘制最终场景之前将其还原。

绘制纹理时,必须修改视口。如果使用窗口的视口,OpenGL将假定纹理与窗口大小相同。因此,只有整个图像的左下角最终会出现在纹理中

因此,在渲染到纹理之前:

glViewport(0, 0, 256, 256);

。。。并在绘制最终场景之前还原该场景。

取决于输入的数据。你一定要为你的问题写一篇简短的介绍(你想做什么…)。从一大堆代码开始从来都不是一个好主意。阅读。我编辑了问题。显示四边形顶点。我想,
inVAO
只是一个全屏的四元屏幕?不,不是。角是-1,-1,-1,1,1,1,-1和1,1。我编辑了代码。这取决于你输入的数据。你一定要为你的问题写一篇简短的介绍(你想做什么…)。从一大堆代码开始从来都不是一个好主意。阅读。我编辑了问题。显示四边形顶点。我想,
inVAO
只是一个全屏的四元屏幕?不,不是。角是-1,-1,-1,1,1,1,-1和1,1。我编辑了代码。@wEight-视口的更改是必要的,因为OP首先绘制纹理,然后在第二步中使用纹理绘制四边形。视口调整仅在第一步中需要。如果你有一个随时可用的纹理,你就不必费心了。@wEight-视口的更改是必要的,因为OP首先绘制纹理,然后在第二步中使用纹理绘制四边形。视口调整仅在第一步中需要。如果你有一个随时可用的纹理,你不需要麻烦它。
#version 330 core
in vec2 coord;
out vec4 color;
void main(){
    if(abs(length(coord - vec2(0.5,0.5))) < 0.3)
        color = vec4(1.0f, 0.0f, 0.0f, 1.0f);
    else
        color = vec4(0.0f, 1.0f, 0.0f, 1.0f);
}
#version 330 core
layout (location = 0) in vec3 position;
layout (location = 1) in vec2 texCoords;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
out vec2 TexCoords;

void main()
{
    gl_Position = projection * view *  model * vec4(position, 1.0f);
    TexCoords = texCoords;
}
#version 330 core
in vec2 TexCoords;
out vec4 color;

uniform sampler2D screenTexture;

void main()
{ 
    color = texture(screenTexture, TexCoords);
}
glViewport(0, 0, 256, 256);