将android.graphics.Matrix转换应用于Open GL ES着色器

时间:2014-10-02 13:40:36

标签: android canvas matrix opengl-es

我目前正在使用4x4矩阵转换为"像素"坐标到OpenGL,我的场景全屏,所以我的屏幕矩阵看起来像这样:

2f / width, 0f, 0f, 0f,
0f, -2f / height, 0f, 0f,
0f, 0f, 0f, 0f,
-1f, 1f, 0f, 1f

然后我将这个矩阵映射为" uScreen"在顶点着色器中以这种方式:

uniform mat4 uScreen;
attribute vec2 aPosition;
attribute vec2 aTexPos;
varying vec2 vTexPos;
void main() {
    vTexPos = aTexPos;
    gl_Position = uScreen * vec4(aPosition.xy, 0.0, 1.0);
}

使用此片段着色器绘制:

precision mediump float;
uniform sampler2D uTexture;
varying vec2 vTexPos;
void main() {
    gl_FragColor = texture2D(uTexture, vTexPos);
}

所以,让我们说现在我有一些3x3 android.graphics.Matrix完成的转换(只是缩放和平移以及2D旋转)如何将这些转换应用于此着色器?我已经尝试将它映射到顶点着色器中的mat3并执行" uScreen * uTransform * vec4(aPosition.xy,0.0,1.0)"但它不起作用。

更新 我试图以这种方式将Canvas Matrix映射到着色器:

uniform mat4 uScreen;
uniform mat3 uTransform;
attribute vec2 aPosition;
attribute vec2 aTexPos;
varying vec2 vTexPos;
void main() {
    vTexPos = aTexPos;
    gl_Position = uScreen * mat4(uTransform) * vec4(aPosition.xy, 0.0, 1.0);
};

现在它正确缩放但翻译不起作用

0 个答案:

没有答案