【发布时间】:2019-07-06 13:28:11
【问题描述】:
我正在使用适用于 Android 的 GPUImage 库将一些效果应用于位图。本质上,GPUImage 接受位图并使用 OpenGL ES,将 1 x 1 立方体渲染到位图大小的帧缓冲区中。用户可以编写自定义片段着色器来控制输出。
我正在尝试编写一个片段着色器,它可以在给定旋转角度的情况下旋转位图。这是我目前所拥有的:
varying vec2 textureCoordinate;
uniform sampler2D inputImageTexture;
uniform vec2 inputImageTextureSize;
uniform float angle;
const vec2 HALF = vec2(0.5);
void main()
{
float aSin = sin(angle);
float aCos = cos(angle);
vec2 tc = textureCoordinate;
tc -= HALF.xy;
tc *= mat2(aCos, aSin, -aSin, aCos);
tc += HALF.xy;
vec3 tex = texture2D(inputImageTexture, tc).rgb;
gl_FragColor = vec4(tex, 1.0);
}
它可以工作,但显然会扭曲位图(因为 GPUImage 视口设置为将 1 x 1 立方体映射到实际位图大小)。我无法弄清楚如何摆脱失真。我应该根据角度和 inputImageTextureSize 应用一些额外的缩放变换,但我没有得到正确的方程。 StackOverflow 上的所有答案都不适用于我的情况。请帮忙!
谢谢!
【问题讨论】:
标签: android opengl-es glsl shader gpuimage