我在 OpenGL ES 2.0 中有一个投影,但不幸的是我希望 Y 为正值,这样我更容易使用 TouchEvents。
现在这是投影矩阵:
private void setOrthographicMatrix(int w, int h)
{
orthographicMatrix[0] = (float) (2.0f / w ); //a
orthographicMatrix[3] = -1f; //tx
orthographicMatrix[5] = (float) (2.0f / h); //b
orthographicMatrix[7] = 1f; //ty
orthographicMatrix[10] = -1f; //c
orthographicMatrix[15] = 1f; //1
// a, 0, 0, tx,
// 0, b, 0, ty,
// 0, 0, c, tz,
// 0, 0, 0, 1
}
顶点着色器:
attribute vec4 a_position;
attribute vec2 a_texCoord;
varying vec2 v_texCoord;
uniform mat4 u_MVPMatrix;
void main()
{
//Pass Values to Fragment Shader
v_texCoord = a_texCoord;
//Set Position
gl_Position = a_position * u_MVPMatrix;
}
片段着色器:
precision mediump float;
varying vec2 v_texCoord;
uniform vec4 u_color;
uniform sampler2D u_s_texture;
void main()
{
gl_FragColor = texture2D(u_s_texture, v_texCoord) * u_color;
}
结果是: (0,0) - 左上角
0,0----------> X++
|
|
|
↓
Y--
我希望投影映射,因此 Y 在屏幕下方变为正数。
编辑 - 解决方案:
我已将 OrthographicMatrix 函数的设置替换为使用内置的 Android Matrix 库:
Matrix.orthoM(orthographicMatrix, 0, 0, w, h, 0, -10f, 10f);
并将我的顶点着色器更改为:
gl_Position = u_MVPMatrix * a_position;