我在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;
}
Fragment Shader:
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) - topleft corner
0,0----------> X++
|
|
|
↓
Y--
我希望投影能够映射,以便Y在屏幕上变为正面。
编辑 - 解决方案:
我已经取代了OrthographicMatrix功能的设置,以使用内置的Android矩阵库:
Matrix.orthoM(orthographicMatrix, 0, 0, w, h, 0, -10f, 10f);
并将我的顶点着色器更改为:
gl_Position = u_MVPMatrix * a_position;
答案 0 :(得分:1)
我建议只使用OpenGL的标准正投影功能,它允许您定义顶部,底部,左侧,右侧而不仅仅是宽度和高度,因此您可以以任何方式翻转Y轴:< / p>
OpenGLES 2.0中不存在此功能,但您可以将方程式复制到自己的正交函数中:
http://www.opengl.org/sdk/docs/man/xhtml/glOrtho.xml
另外,如果这是针对Android的(你的其他帖子是针对android的,所以我会假设),已经存在你可以使用的正交矩阵函数(android.opengl.Matrix.orthoM
)