3

画面上にテキスト モデル メッシュを配置しようとしています。以下のコードを使用すると、コードが示唆するようにメッシュが描画されます。画面の中央にあるメッシュの左側。しかし、画面の左端に配置したいのですが、ここで行き詰まります。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);
4

1 に答える 1

2

Ed Halferty と Matic Oblak に感謝します。どちらも正しいです。Matic が示唆したように、Matrix.TranslateM を最初に配置し、次に Matrix.scaleM を配置しました。MVPMatrix が確かに モデルビュープロジェクションであり、プロジェクションビューモデルではないことも確認しました。

また、モデル メッシュの Matrix.translateM を -1.0f にすると、画面の左端になり、いずれにしても -1.77f よりも優れています。

正しい位置 + スケール、ありがとう!

    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);
于 2015-11-11T20:26:09.247 に答える