0

私は OpenGL ES を使用して画像を描画しています。現在、ビューの設定は次のとおりです。

    gl.glClearColor(0.6f, 0.6f, 1f, 1f);
    gl.glClearDepthf(1.0f);
    gl.glViewport(0, 0, varScreenWidth, varScreenHeight);
    gl.glShadeModel(GL10.GL_SMOOTH);
    gl.glDisable(GL10.GL_DEPTH_TEST);
    gl.glEnable(GL10.GL_TEXTURE_2D);
    gl.glMatrixMode(GL10.GL_PROJECTION);
    gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
    gl.glLoadIdentity();
    gl.glViewport(0, 0, width, height);
    gl.glMatrixMode(GL10.GL_PROJECTION);
    gl.glOrthof(0f, width, 0f, height, -10f, 10f);
    gl.glMatrixMode(GL10.GL_MODELVIEW);
    gl.glLoadIdentity();

ビュー全体を Z 軸で回転させたいのですが、glRotate() を使用できません。オブジェクトが右から左に移動しているため、移動するときは Y 位置にオフセットを追加する必要があります。オブジェクトが Y 位置に自動的に移動するように、カメラ ロールのように Z 軸でビュー全体を回転させる方法が必要です。(ScreenWidth - ObjPositionX) と sin(Zroll) を乗算して y オフセットを追加しようとしましたが、オブジェクトがその位置に完全にとどまらない視覚的な問題がいくつかあります。助けてくれてありがとう...

  • 編集

わかりました、誰かが私にもっと明確になってほしいと思っていました。したがって、関数 glRotate は、オブジェクトをその起源上に転がしています。しかし、原点は単一のオブジェクトではなくビューの中心であるため、ビュー全体をZ軸で回転させる方法が必要です。したがって、オブジェクトが中央の左側にある場合、より高く見えます。オブジェクトが右側にある場合、下に表示されます。

4

2 に答える 2

0

これは表示機能にあると思います(これが属する場所です!ウィンドウのサイズ変更ハンドラーに投影とビューポートの設定を入れないでください-ひどく噛まれます!)

gl.glViewport(0, 0, width, height);

gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity(); // glOrtho needs a identity matrix to work upon
gl.glOrthof(0f, width, 0f, height, -10f, 10f);

gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();

表示ボリュームが [0, width]×[0, height] の範囲 (x,y) にまたがると想定しています。したがって、Z 軸に沿ってこのボリュームの中心を中心に回転するには、まずそこにピボット ポイントを移動する必要があります。変換は、スタックに乗算されたのと逆の順序で適用されるため、次のようになります。

gl.glTranslatef(width/2., height/2., 0); // move back to origin
gl.glRotate(angle, 0, 0, 1); // rotate about Z
gl.glTranslatef(-width/2, -height/2., 0); // move pivot point to middle of viewing volume

draw_scene();
于 2012-10-27T14:49:00.160 に答える
0

glRotatef() 関数を再び使用しました。問題は次のとおりです。 glTranslate() を使用して物事をその位置に配置していました。そのためには、すべてのオブジェクトに対して glLoadIdentity を呼び出す必要がありました。解決策: 現在、オブジェクトの描画を開始する直前に、glRotate() を 1 回だけ使用しています。物事をその位置に置くには: X オフセットを vertexBuffer 自体に追加できることに気付きました。それが誰かを助けることを願っています...

于 2012-10-27T18:00:58.550 に答える