如何解决在 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 举报,一经查实,本站将立刻删除。