取一张透明纹理覆盖在屏幕上,然后写shader渲染这张透明纹理,通过uniform传入 矩形区域的起点坐标以及长宽(相对于屏幕的)
比如起点是,x,y,矩形长宽是width,height,纹理坐标是uv
shader里这么写
gl_FragColor = vec4(1.)*( step(x,uv.x) + step(uv.x,x+width) )*( step(y,uv.y) + step(uv.y,y+height) );最后一步,把这张纹理拉伸到和屏幕相同尺寸~
比如起点是,x,y,矩形长宽是width,height,纹理坐标是uv
shader里这么写
gl_FragColor = vec4(1.)*( step(x,uv.x) + step(uv.x,x+width) )*( step(y,uv.y) + step(uv.y,y+height) );最后一步,把这张纹理拉伸到和屏幕相同尺寸~
解决方案 »
- 急!请问如何下载这里的东西?
- android中多个case一起测的时候,Test run failed: Process crashed.
- 求助:谁知道有什么书是专门讲解android每个模块源码的。
- 关于intent-filter的问题,请教大家
- 求高人指点
- 怎么样获取asp页面中的所有数据显示到android控件中啊?
- 关于微信的疑问
- android手机手动加载wifi驱动的问题
- Android 界面切换开关门动画求解
- 应用权限的问题!
- 【提问】做了一个安卓应用需要连局域网的,之前都是用自己电脑作服务器,能否把服务器放在网上 ?这样就不是连局域网了,要做怎样的改变呢?
- Android如何读取摄像头硬件信息?
话说:这个vec4(1.)*是什么东东?PS:难点在于怎么去掉当前像素点的像素。
比如你要框的区域是半透明,红色,那么颜色可以是 vec4(1.0,0.0,0.0,0.5);然后框的4个顶点是 (a,b) (c,b)
(a,d) (c,d) // 这4个顶点的坐标也是要传入shader内
vev2 uv = v_texCoord.xy // v_texCoord 是 外部传入的贴图像素点坐标,当然也可以按当前屏幕的像素点坐标来算
gl_FragColor = vec4(1.0, 0.0, 0.0, 0.5) * step(a,uv.x)*step(uv.x,c)*step(uv.y,b)*step(d,uv.y);
//
step(a,uv.x)*step(uv.x,c)*step(uv.y,b)*step(d,uv.y)
的结果是,如果当前像素点的坐标uv位于矩形内则唯1,否则为0这样在矩形内的颜色就显示为你设定的颜色 vec4(1.0, 0.0, 0.0, 0.5);
其他区域因为*0 则显示为全透明,这样就符合要求了,如果要描边还要判断左边点是不是正好位于矩形边框上,代码会稍微复杂点
所有像素均变为灰色,这个就很难了,不知道opengl 有没有提供这方面的功能