1

我在弄清楚为什么我的三角形没有呈现在预期位置时遇到了一些麻烦。

我想画这个三角形:

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};

首先,我创建一个投影矩阵,如此处所述

float aspect_ratio = 800.0f/480.0f; 
ortho_matrix(-aspect_ratio, aspect_ratio, -1.0f, 1.0f, -1.0f, 1.0f, PROJECTION_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 发送到我的着色器,

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

其中顶点使用此矩阵进行平移。然而,这不是我所期待的结果。

下图是上述代码的结果: 错误的三角形位置

我希望三角形的原点位于 0, 0, 0 - 所以在屏幕的中心是这样的: 预期的三角形位置

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

编辑 好的,似乎坐标以某种方式被镜像了......所以看起来像这样

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

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

4

1 回答 1

0

您正在向后进行顶点着色器乘法。

它应该是 :

gl_Position = orthoMatrix * vPosition;

于 2012-08-20T18:20:50.650 回答