opengl-es - 如何快速翻转 OpenGL ES FBO?
问题描述
版本:Android OpenGL ES 2.0
我使用5个滤镜和FBO渲染位图,每个滤镜都需要位图纹理和位图的蒙版纹理,我的问题是每次滤镜渲染后,下一个滤镜得到的FBO是颠倒的,偶数滤镜上的蒙版和纹理方向相反,我想知道如何在下一个过滤器使用之前快速翻转FBO?
#version 100
precision mediump float;
uniform sampler2D uTexture;
uniform sampler2D uMaskTexture;
varying vec2 vTexCoord;
void main(){
float mask=texture2D(uMaskTexture, vTexCoord);
gl_FragColor=texture2D(uTexture*mask, vTexCoord);
}
为了简化问题,这 5 个过滤器与上面的代码类似。uTexture 来自上一个滤镜的 FBO,uMaskTexture 是一个没有任何变化的纹理
解决方案
看来你的纹理坐标是错误的。更正纹理坐标属性。这意味着您必须“翻转”纹理坐标的 y 分量。0变成1,1变成0:
当然这也可以在片段着色器中完成:
void main()
{
vec2 uv = vec2(vTexCoord.x, 1.0-vTexCoord.y);
float mask = texture2D(uMaskTexture, uv);
gl_FragColor = texture2D(uTexture, uv) * mask;
}
或在顶点着色器中:
attribute vec2 aTexCoord;
varying vec2 vTexCoord;
void main
{
vTexCoord = vec2(aTexCoord.x, 1.0-aTexCoord.y);
// [...]
}
推荐阅读
- reactjs - 为什么我的新字符串值在 React.js 中未定义?
- vue.js - 计算对象 V 模型在更改后未更新
- javascript - 错误:Route.get() 需要回调函数,但得到了 [object Undefined]:
- spring-boot - Spring Boot 应用程序与 Spring Cloud Sleuth 与 Istio 中的 Jaeger 集成
- haskell - 如何通过浏览器正确减少 GET 请求的服务 API 路径 (:>) 组合树?
- json - JSON 中的字段可以有不同的类型,我可以用 Go 中的单个结构来表示它吗?
- python - 检查是否安装了pip?
- java - 如何在 java.util.Map 中转换 google.protobuf.Struct 字段
? - phpstorm - 如何在 PhpStorm 中调用 Live Template 的选择菜单?
- r - 如何在 r shiny(increment) 中更改全局变量的值