android - 如何从 GLSL 着色器中删除水平条纹伪影?
问题描述
我正在处理具有深度效果视图的自定义照片。我正在将触摸坐标传递给 GLSurfaceView 渲染器以“更改视角”。但是纹理之间存在水平条纹,并且在执行此操作时它是 mirrow。
我的片段着色器代码:
#ifdef GL_ES
precision highp float;
#endif
varying vec2 texcoordVarying;
uniform sampler2D texture;
uniform sampler2D depth;
uniform float time;
uniform vec2 touch;
uniform vec2 limit;
uniform vec4 resolution;
vec2 mirrored(vec2 v) {
vec2 m = mod(v,2.);
return mix(m,2.0 - m, step(1.0 ,m));
}
void main(void) {
vec2 uv = 1.0 * gl_FragCoord.xy / resolution.xy ;
vec2 vUv = (uv - vec2(0.5))*resolution.zw + vec2(0.5);
vUv.y = 1. - vUv.y;
vec4 tex1 = texture2D(depth,mirrored(vUv));
vec2 fake3d = vec2(vUv.x + (tex1.r - 0.5)* touch.x/limit.x, vUv.y + (tex1.r - 0.5)* touch.y/limit.y );
gl_FragColor = texture2D(texture,mirrored(fake3d));
}
我正在传递这样的坐标:
queueEvent {
renderer.touchTargetX = event.rawX / renderer.width
renderer.touchTargetY = event.rawY / renderer.height
}
requestRender()
解决方案
如果您的换行模式是GL_REPEAT
,请尝试使用GL_CLAMP_TO_EDGE
.
推荐阅读
- python - android中的python套接字无法连接到在virtualbox中运行的python服务器
- elasticsearch - 过滤热门点击聚合未按预期工作
- javascript - mac Safari 上的 SpeechRecognition 事件监听器
- php - Apache 不发布 ram
- sql - Oracle DB 上的 Apache Drill Timestampdiff
- python - 如何为 Python 多处理中的每个 API 调用创建唯一进程 ID 以更好地记录日志
- python - 从 Python 中的文本文件中提取主机名和日期时间
- linux - Ubuntu 或任何 Linux 操作系统是否仅为系统任务(例如显示桌面主屏幕和移动鼠标指针)保留一些 RAM?
- c# - 根据类型显示日志消息
- reactjs - Next JS 应用程序在 localhost 上请求位置权限,但在部署到 Heroku、Vercel 或 Digital Ocean 时不会