我想將我的文本模型網格放置在屏幕上。使用下面的代碼,它會根據代碼提示繪製網格;網格左側位於屏幕中央。但是,我想將它放在屏幕邊緣左側,這就是我卡住的地方。如果我對Matrix.translateM行取消註釋,我會認爲該位置現在位於屏幕的左側,但似乎該位置正在縮放(!?)OpenGL矩陣縮放然後翻譯仍然縮放我的位置
我嘗試過幾種情況:
a。)Matrix.scaleM only(no Matrix.translateM)=網格的左邊位於0.0f(屏幕的中心),具有正確的比例。
b。)Matrix.TranslateM only(no Matrix.scaleM)=網格的左側在屏幕左側正確定位-1.77f,但縮放不正確。
℃。)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.0 f,所以如果沒有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);
您是否嘗試過反向排序? mMVPMatrix = modelMatrix * mMVPMatrix? –
翻譯絕對在你的案例中的規模之前。如前所述,乘法順序似乎是錯誤的。正如MVP這個名字表明它是model * view *投影,但是你有投影*模型。矩陣乘法的順序很重要。 –
謝謝,你們倆。馬蒂奇,我將它改爲Matrix.translateM,然後是Matrix.scaleM,同時也扭轉了我的MVP,現在效果很好!現在,如何信貸,信貸到期? – CoryU