微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在 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,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] 是在整个屏幕上显示的纹理坐标范围。所以你需要映射它。

在你的着色器中

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

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

uniform mat3 T;

/* ... */

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。