Как скрыть / удалить определенную область сверху и снизу изображения - GLControl - PullRequest
1 голос
/ 01 июля 2019

Я могу отобразить изображение ниже, используя opengl в моем glControl. Есть ли способ вырезать или скрыть определенную область (скажем, 50 пикселей сверху и снизу) в равной степени как снизу, так и сверху glControl? Ниже приведен код, который я использовал для расчета размера glControl. Могу ли я добиться этого, изменив значения в окне просмотра?

private void OpenGL_Size(GLControl glControl, VideoCaptureDevice videoSource)//always in portrait  mode

{
    decimal RateOfResolution = (decimal)videoSource.VideoResolution.FrameSize.Width / (decimal)videoSource.VideoResolution.FrameSize.Height;

    decimal screenHeightbyTwo = this._Screenheight / 2;             
    RateOfResolution = 1 / RateOfResolution;// portrait 
    openGLheight = Convert.ToInt32(screenHeightbyTwo);   // height is fixed; calculate the width
    openGLwidth = (Convert.ToInt32(RateOfResolution * screenHeightbyTwo));

    glControl.Width = openGLwidth;
    glControl.Height = openGLheight;
}

GL.Viewport(new Rectangle(0, 0, glControl.Width, glControl.Height));

Код шейдера

precision highp float;
uniform sampler2D sTexture;
varying vec2 vTexCoordIn;
void main ()
{ 
    vec4 color = texture2D(sTexture,vTexCoordIn);
    gl_FragColor = color;
}

1 Ответ

1 голос
/ 01 июля 2019

Если вы хотите пропустить некоторые части текстуры, вы можете использовать ключевое слово discard. Эта команда приводит к тому, что выходные значения фрагмента отбрасываются, а фрагменты не отображаются вообще.

precision highp float;

uniform sampler2D sTexture;
varying vec2 vTexCoordIn;

void main ()
{ 
    if (vTexCoordIn.y < 0.1 || vTexCoordIn.y > 0.9)
        discard;

    vec4 color = texture2D(sTexture, vTexCoordIn);
    gl_FragColor = color;
}

Если задана высота изображения и высота области, которую нужно отбросить, то условие:

float img_h_px  = 432.0; // height of the image in pixel
float area_h_px = 50.0;  // area height in pixel

float w = area_h_px/img_h_px;
if (vTexCoordIn.y < w || vTexCoordIn.y > (1.0-w))
    discard;
...