在 GLControl 上显示特定的纹理区域 - openTK

Showing particular region of texture on GLControl - openTK

我必须在我的 Glcontrol 上显示选定的图像区域。为此,我有两个变量 LeftSideVal 和 RightSideVal。 LeftSideVal在0到0.5的范围内,RightSideVal在0.5到1.0的范围内。

如果我设置 LeftSideVal =0.3 和 RightSideVal=0.8,那么我必须在 GLControl 上显示 0.3 和 0.8 之间的区域,并显示其全部大小(视口)。

我试过如下。但它不能正常工作。更改值时显示一些模糊区域。

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

===着色器代码===

  if( vTexCoord.x >=LeftSideVal && vTexCoord.x <=RightSideVal){      
  vec4 color=texture2D (sTexture, vec2(vTexCoord.x+LeftSideVal,vTexCoord.y)); 
  gl_FragColor=color;
  }

范围[left side val, right side val]是整个屏幕显示的纹理坐标范围。所以你需要映射它。

在你的着色器中 usw

float s = LeftSideVal + vTexCoord.x*(RightSideVal-LeftSideVal);
texture(sTexture, vec2(s, vTexCoord.y));

严格来说,纹理坐标变换可以用另一种矩阵乘法来表示。通用版本为

uniform mat3 T;

/* ... */

texture(sTexture, (T*vec2(vTexCoord,1).xy)

其中 T 设置为在二维中表示此变换的适当变换矩阵。