OpenGL ES 2.0投影映射为正Y?

时间:2012-08-28 17:41:46

标签: android opengl-es opengl-es-2.0

我在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;

1 个答案:

答案 0 :(得分:1)

我建议只使用OpenGL的标准正投影功能,它允许您定义顶部,底部,左侧,右侧而不仅仅是宽度和高度,因此您可以以任何方式翻转Y轴:< / p>

OpenGLES 2.0中不存在此功能,但您可以将方程式复制到自己的正交函数中:

http://www.opengl.org/sdk/docs/man/xhtml/glOrtho.xml

另外,如果这是针对Android的(你的其他帖子是针对android的,所以我会假设),已经存在你可以使用的正交矩阵函数(android.opengl.Matrix.orthoM