OpenGL矩阵比例然后翻译仍在扩展我的位置

时间:2015-11-11 10:41:34

标签: matrix opengl-es opengl-es-2.0 matrix-transform

我正在尝试将文本模型网格放置在屏幕上。使用下面的代码,它按照代码建议绘制网格;网格左侧位于屏幕中央。但是,我想把它放在屏幕边缘的左边,这就是我被困住的地方。如果我取消对Matrix.translateM行的注释,我认为该位置现在位于屏幕的左侧,但似乎该位置正在缩放(!?)

我尝试过的一些场景:

a。)仅Matrix.scaleM (无Matrix.translateM)=网格的左侧定位为0.0f(屏幕中心),具有正确的比例。

b。)仅限Matrix.TranslateM (无Matrix.scaleM)=网格左侧正确定位在屏幕左侧的-1.77f,但缩放比例不正确。

c。) Matrix.TranslateM然后是Matrix.scaleM ,或者 Matrix.scaleM然后是Matrix.TranslateM = 比例是正确的,但是位置不正确。 看起来位置是缩放的,并且非常接近中心而不是屏幕左侧。

我在Java中的Android Studio编程中使用OpenGL ES 2.0。

屏幕边界(作为Matrix.orthoM的设置) 左:-1.77,右:1.77(中心为0.0),上:-1.0,下:1.0(中心为0.0)

网格高度为1.0f,因此如果没有Matrix.scaleM,则网格占据整个屏幕高度。

float ratio = (float) 1920.0f / 1080.0f;

float scale = 64.0f / 1080.0f; // 64px height to projection matrix

Matrix.setIdentityM(modelMatrix, 0);
Matrix.scaleM(modelMatrix, 0, scale, scale, scale); // these two lines
//Matrix.translateM(modelMatrix, 0, -ratio, 0.0f, 0.0f); // these two lines

Matrix.setIdentityM(mMVPMatrix, 0);
Matrix.orthoM(mMVPMatrix, 0, -ratio, ratio, -1.0f, 1.0f, -1.0f, 1.0f);

Matrix.multiplyMM(mMVPMatrix, 0, mMVPMatrix, 0, modelMatrix, 0);

1 个答案:

答案 0 :(得分:0)

谢谢,Ed Halferty和Matic Oblak,你们都是对的。正如Matic建议的那样,我现在先将Matrix.TranslateM放入,然后将Matrix.scaleM放在第二位。我还确保MVPMatrix 确实 模型视图投影,而不是投影视图模型< /强>

此外,现在使用Matrix.translateM将模型网格设置为-1.0f,它位于屏幕的左边缘,在任何情况下都优于-1.77f。

Correct position + scale, thanks!

    float ratio = (float) 1920.0f / 1080.0f;

    float scale = 64.0f / 1080.0f;

    Matrix.setIdentityM(modelMatrix, 0);
    Matrix.translateM(modelMatrix, 0, -1.0f, 0.0f, 0.0f);
    Matrix.scaleM(modelMatrix, 0, scale, scale, scale);

    Matrix.setIdentityM(mMVPMatrix, 0);
    Matrix.orthoM(mMVPMatrix, 0, -ratio, ratio, -1.0f, 1.0f, -1.0f, 1.0f);

    Matrix.multiplyMM(mMVPMatrix, 0, modelMatrix, 0, mMVPMatrix, 0);