0

私はOpenGLES2.0で予測を行っていますが、残念ながらYを正にして、TouchEventsを使いやすくしたいと思っています。

現在、これは射影行列です。

private void setOrthographicMatrix(int w, int h)
{
    orthographicMatrix[0] = (float) (2.0f / w ); //a
    orthographicMatrix[3] = -1f;                 //tx
    orthographicMatrix[5] = (float) (2.0f / h);  //b
    orthographicMatrix[7] = 1f;                  //ty
    orthographicMatrix[10] = -1f;                //c
    orthographicMatrix[15] = 1f;                 //1

//  a, 0, 0, tx,
//  0, b, 0, ty,
//  0, 0, c, tz,
//  0, 0, 0, 1
}

頂点シェーダー:

attribute vec4 a_position;
attribute vec2 a_texCoord;

varying vec2 v_texCoord;

uniform mat4 u_MVPMatrix;

void main()
{
    //Pass Values to Fragment Shader
    v_texCoord = a_texCoord; 

    //Set Position
    gl_Position = a_position * u_MVPMatrix;
}

フラグメントシェーダー:

precision mediump float;

varying vec2 v_texCoord;

uniform vec4 u_color;
uniform sampler2D u_s_texture;

void main()
{
    gl_FragColor = texture2D(u_s_texture, v_texCoord) * u_color;
}

結果は次のとおりです。(0,0)-左上隅

0,0----------> X++
|
|
|
↓
Y--

そして、Yが画面の下で正になるように、投影をマッピングしたいと思います。

編集-解決策:

OrthographicMatrix関数のセットアップを、組み込みのAndroidMatrixライブラリを使用するように置き換えました。

Matrix.orthoM(orthographicMatrix, 0, 0, w, h, 0, -10f, 10f);

そして、私の頂点シェーダーをこれに変更しました:

gl_Position = u_MVPMatrix * a_position;
4

1 に答える 1

1

OpenGLの標準の正射影関数を使用することをお勧めします。これにより、幅と高さだけでなく、上、下、左、右を定義できるため、Y軸を好きなように反転できます。

この関数はOpenGLES2.0には存在しませんが、方程式を独自の正投影関数にコピーできます。

http://www.opengl.org/sdk/docs/man/xhtml/glOrtho.xml

また、これがAndroid用の場合(他の投稿はAndroid用なので、私はそう思います)、使用できるオルソ行列関数がすでに存在します(android.opengl.Matrix.orthoM

于 2012-08-28T18:46:12.900 に答える