我目前正在使用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);
};
现在它正确缩放但翻译不起作用