我尝试开发一个交换像素(相机预览)底部< =>的Android应用程序最佳。 swap diagram
所以我写了这个顶点着色器,但它显示了非常奇怪的东西(带有数字噪音的黑屏)。
attribute vec4 vPosition;
attribute vec2 inputTextureCoordinate;
varying vec2 textureCoordinate;
void main()
{
if (vPosition.y > 0.0)
{
gl_Position = vPosition - vec4(0.0, 1.0, 0.0, 0.0);
}
else
{
gl_Position = vPosition + vec4(0.0, 1.0, 0.0, 0.0);
}
textureCoordinate = inputTextureCoordinate;
}
但下面的顶点着色器可以工作,但它只会将顶部像素移动到底部。
attribute vec4 vPosition;
attribute vec2 inputTextureCoordinate;
varying vec2 textureCoordinate;
void main()
{
if (vPosition.y > 0.0)
{
gl_Position = vPosition - vec4(0.0, 1.0, 0.0, 0.0);
}
else
{
gl_Position = vPosition;
}
textureCoordinate = inputTextureCoordinate;
}
你知道如何在我的图表中交换像素(使我的第一个顶点着色器工作)? 谢谢
答案 0 :(得分:1)
避免使用着色器performance中的if
语句可能会恶化。
简单的解决方案可能是在片段着色器中交换纹理坐标。我想你的v
纹理坐标沿着渲染相机图像的四边形的整个高度从0到1。然后在片段着色器中使用以下代码就可以了。
textureCoordinate = vec2(textureCoordinate.u, 1 - textureCoordinate.v);
但是,实际纹理坐标交换取决于您在四边形顶点定义纹理坐标的方式。