两个图像并排 - OpenGL
Two images side by side - OpenGL
我想使用 opengl 并排显示两个图像(一个在屏幕左侧,另一个在屏幕右侧)。我为此使用了下面的着色器代码。它全屏显示两个图像。但是只能看到两个图像的一部分。我应该在哪里更正代码以在两侧显示完整图像?
private void CreateShaders()
{
/***********Vert Shader********************/
vertShader = GL.CreateShader(ShaderType.VertexShader);
GL.ShaderSource(vertShader, @"attribute vec3 a_position;
varying vec2 vTexCoord;
void main()
{
vTexCoord = (a_position.xy + 1) / 2;
gl_Position = vec4(a_position, 1);
}");
GL.CompileShader(vertShader);
/***********Frag Shader ****************/
fragShader = GL.CreateShader(ShaderType.FragmentShader);
GL.ShaderSource(fragShader, @"precision highp float;
uniform sampler2D sTexture;uniform sampler2D sTexture1;
uniform int screenwidth;
varying vec2 vTexCoord;
void main ()
{
vec4 color = texture2D (sTexture, vTexCoord); //image 1
vec4 color1=texture2D (sTexture1, vTexCoord); //image2
if(vTexCoord.x<0.5)
gl_FragColor = color;
else
gl_FragColor = color1;
}");
GL.CompileShader(fragShader);
}
您必须在片段着色器中缩放和平移纹理坐标的 x
分量,
为左侧纹理坐标vec2(vTexCoord.x*2.0, vTexCoord.y)
,
右侧是 vec2(vTexCoord.x*2.0-1.0, vTexCoord.y))
:
varying vec2 vTexCoord;
void main ()
{
vec4 color1 = texture2D(sTexture, vec2(vTexCoord.x*2.0, vTexCoord.y));
vec4 color2 = texture2D(sTexture, vec2(vTexCoord.x*2.0-1.0, vTexCoord.y));
gl_FragColor = vTexCoord.x < 0.5 ? color1 : color2;
}
我想使用 opengl 并排显示两个图像(一个在屏幕左侧,另一个在屏幕右侧)。我为此使用了下面的着色器代码。它全屏显示两个图像。但是只能看到两个图像的一部分。我应该在哪里更正代码以在两侧显示完整图像?
private void CreateShaders()
{
/***********Vert Shader********************/
vertShader = GL.CreateShader(ShaderType.VertexShader);
GL.ShaderSource(vertShader, @"attribute vec3 a_position;
varying vec2 vTexCoord;
void main()
{
vTexCoord = (a_position.xy + 1) / 2;
gl_Position = vec4(a_position, 1);
}");
GL.CompileShader(vertShader);
/***********Frag Shader ****************/
fragShader = GL.CreateShader(ShaderType.FragmentShader);
GL.ShaderSource(fragShader, @"precision highp float;
uniform sampler2D sTexture;uniform sampler2D sTexture1;
uniform int screenwidth;
varying vec2 vTexCoord;
void main ()
{
vec4 color = texture2D (sTexture, vTexCoord); //image 1
vec4 color1=texture2D (sTexture1, vTexCoord); //image2
if(vTexCoord.x<0.5)
gl_FragColor = color;
else
gl_FragColor = color1;
}");
GL.CompileShader(fragShader);
}
您必须在片段着色器中缩放和平移纹理坐标的 x
分量,
为左侧纹理坐标vec2(vTexCoord.x*2.0, vTexCoord.y)
,
右侧是 vec2(vTexCoord.x*2.0-1.0, vTexCoord.y))
:
varying vec2 vTexCoord;
void main ()
{
vec4 color1 = texture2D(sTexture, vec2(vTexCoord.x*2.0, vTexCoord.y));
vec4 color2 = texture2D(sTexture, vec2(vTexCoord.x*2.0-1.0, vTexCoord.y));
gl_FragColor = vTexCoord.x < 0.5 ? color1 : color2;
}