在 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 设置为在二维中表示此变换的适当变换矩阵。
我必须在我的 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 设置为在二维中表示此变换的适当变换矩阵。