Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从openGL控件的顶部和底部剪切特定区域时,投影不起作用_C#_Opengl_Glsl_Opentk_Coordinate Transformation - Fatal编程技术网

C# 从openGL控件的顶部和底部剪切特定区域时,投影不起作用

C# 从openGL控件的顶部和底部剪切特定区域时,投影不起作用,c#,opengl,glsl,opentk,coordinate-transformation,C#,Opengl,Glsl,Opentk,Coordinate Transformation,借助链接,我可以在纹理上应用投影。 现在,我想从glcontrol的顶部和底部剪切/删除相等的区域,然后需要在剩余区域应用相同的投影。我试过下面的方法。但如图所示,投影上缺少顶部和底部曲线。 我怎样才能把它带回到这个地区 高精度浮点; 均匀结构; 可变矢量2 vTexCoord; void main() { float img_h_px=432.0;//以像素为单位的图像高度 浮动区域\u h\u px=39.0;//以像素为单位的区域高度 浮点数w=面积h_px/img_h_px; 如果(vT

借助链接,我可以在纹理上应用投影。 现在,我想从glcontrol的顶部和底部剪切/删除相等的区域,然后需要在剩余区域应用相同的投影。我试过下面的方法。但如图所示,投影上缺少顶部和底部曲线。 我怎样才能把它带回到这个地区

高精度浮点;
均匀结构;
可变矢量2 vTexCoord;
void main()
{
float img_h_px=432.0;//以像素为单位的图像高度
浮动区域\u h\u px=39.0;//以像素为单位的区域高度
浮点数w=面积h_px/img_h_px;
如果(vTexCoord.y(1.0-w)){
gl_FragColor=vec4(1.0,0.0,1.0,1.0);
}
其他的
{
vec2 pos=vTexCoord.xy*2.0-1.0;
浮动b=0.5;
浮动v_标度=(1.0+b)/(1.0+b*sqrt(1.0-pos.x*pos.x));
浮动u=asin(位置x)/3.1415+0.5;
浮动v=(位置y*v_刻度)*0.5+0.5;
如果(v<0.0 | | v>1.0)
丢弃;
vec3 texColor=texture2D(u_纹理,vec2(u,v)).rgb;
gl_FragColor=vec4(texColor.rgb,1.0);
}    
}

相对于控件的大小,底部和顶部区域的大小(底部和顶部区域的总和)是
2.0*area\u h\u px/img\u h\u px
=
2.0*w
。 控制尺寸和“可见”区域的比率(
h_比率
)为:

float w=面积h\u px/img\u h\u px;
浮球h_比=1.0-2.0*w;
您必须根据“可见”区域和控件大小的比例缩放纹理查找的y坐标,这是
h_比率
1.0/h_比率
)的倒数:

float v=(位置y*v_刻度/h_比率)*0.5+0.5;
最终着色器:

高精度浮点;
均匀结构;
可变矢量2 vTexCoord;
void main()
{
float img_h_px=432.0;//以像素为单位的图像高度
浮动区域\u h\u px=39.0;//以像素为单位的区域高度
浮点数w=面积h_px/img_h_px;
浮球h_比=1.0-2.0*w;
vec2 pos=vTexCoord.xy*2.0-1.0;
浮动b=0.5;
浮动v_标度=(1.0+b)/(1.0+b*sqrt(1.0-pos.x*pos.x));
浮动u=asin(位置x)/3.1415+0.5;
浮动v=(位置y*v_刻度/h_比率)*0.5+0.5;
vec3 texColor=texture2D(sTexture,vec2(u,v)).rgb;
vec4 color=vec4(texColor.rgb,1.0);
如果(vTexCoord.y(1.0-w))
颜色=vec4(1.0,0.0,1.0,1.0);
否则如果(v<0.0 | | v>1.0)
丢弃;
gl_FragColor=颜色;
}

如果要将整个区域着色为紫色,则必须设置
颜色
,而不是片段:

if(v<0.0 | | v>1.0)
颜色=vec4(1.0,0.0,1.0,1.0);

投影工作正常。但当尝试使用下面的代码剪切曲线时,不能完全从顶部和底部曲线进行剪切//****裁剪投影****if(IsCutProjection==1){if(abs(pos.y)*(1.0+b)>1.0){discard;}}@user2431727您必须按
1.0/h_比率
-
if(abs(pos.y)*(1.0+b)/h_比率>1.0){discard;}