【发布时间】:2021-02-06 11:21:06
【问题描述】:
我有一个滑块,其值范围从零到一。现在使用此滑块的值,我想将图像从图像的底部裁剪到图像的一半以及从图像的顶部到图像的一半。我通过调整 GLControl 的高度完成了第一个(底部裁剪)。不确定这是实现这一目标的正确方法。但它工作正常。我不知道第二个选项(从图像的顶部裁剪到一半)。请帮忙拿下。 附件是我在执行底部裁剪时得到的输出,分别为 0,0.4,1.0。
int FramereHeight = (glControl2.Height / 2) / 10; // crop the middle camera upto half of it's height
if (NumericUpdownMiddleBottomCropVal != 0.0)//value ranges from zero to one
{
glControl2.Height = glControl2.Height - Convert.ToInt32(NumericUpdownMiddleBottomCropVal * 10 * FramereHeight);
}
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_2;varying vec2 vTexCoord;
uniform float sSelectedCropVal;
uniform float sSelectedTopCropVal;uniform float sSelectedBottomCropVal;
void main ()
{
if (abs(vTexCoord.y-0.5) * 2.0 > 1.0 - 0.5*sSelectedCropVal)
discard;
vec4 color = texture2D (sTexture_2, vec2(vTexCoord.x, vTexCoord.y));
gl_FragColor =color;
}"); GL.CompileShader(fragShader);
}
【问题讨论】:
标签: c# opengl glsl fragment-shader opentk