我正在尝试将文本模型网格放置在屏幕上。使用下面的代码,它按照代码建议绘制网格;网格左侧位于屏幕中央。但是,我想把它放在屏幕边缘的左边,这就是我被困住的地方。如果我取消对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);
答案 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);