OGL ES 2.0正交矩阵结果位置意外

时间:2012-08-20 17:50:32

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

我弄清楚,为什么我的三角形没有呈现在预期的位置。

我想绘制这个三角形:

private float vVertices[] = { 0.0f, 0.0f, 0.0f, 1.0f,
                              1.0f, 1.0f, 0.0f, 1.0f,
                              1.0f, 0.0f, 0.0f, 1.0f};

首先,我按照here

所述创建投影矩阵
float aspect_ratio = 800.0f/480.0f; 
ortho_matrix(-aspect_ratio, aspect_ratio, -1.0f, 1.0f, -1.0f, 1.0f, PROJECTION_MATRIX);

然后我创建一个View Matrix并将这两个相乘:

Matrix.setLookAtM(VIEW_MATRIX, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);    
Matrix.multiplyMM(mMVPMatrix, 0, PROJECTION_MATRIX, 0, VIEW_MATRIX, 0);

现在我将mvpMatrix发送到我的Shader,

String vertexShader = "attribute vec4 vPosition; \n" +
                      "uniform mat4 orthoMatrix;" +
                      "void main()\n" +
                      "{\n" +
                      "    gl_Position = vPosition * orthoMatrix;" +
                      "}";

使用此矩阵转换顶点。 但是,这不是我期待的结果。

以下图片是上述代码的结果: Wrong Triangle Position

我希望三角形的原点是0,0,0 - 所以在屏幕的中心是这样的: Expected Triangle Position

从上面的代码中,有人能告诉我我做错了什么,或者我错过了什么?

修改的 好吧,似乎koordinates以某种方式反映了...... 所以它看起来像这样

1 ----+---- -1

当我反转ortho_matrix调用中的aspect_ratio参数时,它看起来是正确的。但为什么这个nessecary?

1 个答案:

答案 0 :(得分:0)

你正在向后做顶点着色器乘法。

应该是:

gl_Position = orthoMatrix * vPosition;