1

OpenGL を使用してマップを描画しています。XMLファイルを読み込んで対応するバッファを設定した後、マップを描画しています。このマップには、道路、高速道路、および境界が含まれています。私が欲しいのは、マップに触れるたびに、特定のレイヤーの色を変更する必要があることです。

私が直面している問題は、画面に触れるたびに、タッチしたポイントの画面ピクセルを取得しているだけです。このポイントを OpenGL 座標に変換して、このポイントを描画されたマップと一致させ、選択したポイントを強調表示できるようにします。

この点を OpenGL 座標に変換する方法は?

4

3 に答える 3

2

スクリーン ポイントを OpenGL ワールド空間に投影解除する必要があります。

vec3 UnProjectPoint( const vec3& Point, const max4& Projection, const mat4& ModelView )
{
    vec4 R( Point, 1.0f );

    R.x = 2.0f * R.x - 1.0f;
    R.y = 2.0f * R.y - 1.0f;
    R.y = -R.y;

    R.z = 1.0f;

    R = Projection.GetInversed() * R;
    R = ModelView.GetInversed() * R;

    return R.ToVec3();
}
于 2013-08-29T12:03:40.090 に答える
0

GLSurfaceView クラスの onTouchEvent(MotionEvent e) をオーバーライドし、 onSurfaceChanged(GL10 gl, int width, int height) メソッドの Renderer クラスで以下のコードを使用することをお勧めします。

GLU.gluOrtho2D(gl,0,width,0,height);

上記のコードは、画面座標を openGL SurfaceView 画面にマップし、ポイントを画面上に簡単に配置できます。ただし、これは 2D ビューのみになります。

于 2013-09-10T10:07:29.310 に答える
0

変換行列とカメラ位置を使用して、画面座標を OpenGL に変換できます。参照: https://stackoverflow.com/a/11716990/1369222

于 2013-08-29T11:56:27.270 に答える