【发布时间】:2021-03-16 10:19:09
【问题描述】:
使用下面的着色器代码,我可以按原样显示图像。现在我想以一种方式显示图像的各个部分:
我有三个 GL 控件。
第一个 glcontrol 应该以弯曲的形状显示图像的第一部分,如图所示。所以我必须通过三个点 L1,L2,L3 并且应该在上面显示那些连接区域。
第二个 glcontrol 应该以弯曲的形状显示图像的最后一部分。为此,我必须通过 R1、R2、R3 点。
第三个 glcontrol 应该显示图像的剩余中心部分。
public 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;
varying vec2 vTexCoord;
uniform int sCurrentGLControl;
uniform int L1;
uniform int L2;
uniform int L3;
uniform int R1;
uniform int R2;
uniform int R3;
void main ()
{
vec4 color;
if(sCurrentGLControl==1) //first half
{
color = texture2D (sTexture, vec2(vTexCoord.x, vTexCoord.y));
}
else if(sCurrentGLControl==2) //third half
{
color = texture2D (sTexture, vec2(vTexCoord.x, vTexCoord.y));
}
else if(sCurrentGLControl==3) //second half
{
color = texture2D (sTexture, vec2(vTexCoord.x, vTexCoord.y));
}
gl_FragColor =color;
}"); GL.CompileShader(fragShader);
【问题讨论】:
标签: opengl glsl fragment-shader opentk