纹理不适合方形-OpenGL
我正在尝试创建一个正方形,并在其中间放置一个红色圆圈。正如您在简单的垂直贴图(-1,1)范围到(0,1)范围中所看到的: 如果您查看simple.frag,有以下几行:纹理不适合方形-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
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);