2012-04-06 27 views
0

OpenGLESを使って作業する最初の10分間に私が気づいた問題が少しありますが、実際には関数呼び出しはほとんど同じですが、メソッドの設定方法はまったく異なります。OpenGl ES 2D Android再描画

OpenGLでポリゴンをアニメーション化する基本について理解しています。モデルマトリックスを変更してシーンを再描画し、ダブルバッファリングを使用して、物事をすばやく移動したり、物事をすばやく更新したりするときに表示される遅れを減らすアイデア。

ここに私の質問です。どのように私は同じを達成するだろう。 CまたはC++のOpenGlでは、シーンを再描画するdisplay()関数を呼び出す独自のメソッドを持つことができます。

私は周りを見回し、単純なポリゴンを描く方法を再学習しなければなりませんでした。私はそれが完全に異なっていると仮定します。私はここを見回し、物事のためのチュートリアルをいくつか見つけましたが、その変化の背後にある方法論を実際に家に持ち込むものはありません。私はそれをコピーと理解することに興味があります。

おかげ

新素材:

ここでは、私がアンドロイドで達成しようとしていますものです。このコードはCです。私の読んだところでは、OpenGLは廃止されていると理解していますが、私は同じことを達成できるはずです。

このコードは、ボタンが押されるのを待つリスナーを持っていることを反映しています。一度リスナーが表示されると、関連付けられたコードを実行してディスプレイを再描画します。これは私の理解から、OpenGL ESと異なる場合です。

void main(int argc, char** argv) 
    { 

     /* Standard GLUT initialization */ 

     glutInit(&argc,argv); 

     /* default, not needed */ 
     glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);  

     glutInitWindowSize(500,500); /* 500 x 500 pixel window */ 

     /* place window top left on display */ 
     glutInitWindowPosition(0,0);  

     glutCreateWindow("COMP-5/6400 Assignment 2"); /* window title */ 

     /* display callback invoked when window opened */ 
     glutDisplayFunc(display); 
     glutSpecialFunc (processSpecialKeys); 
     myinit(); /* set attributes */ 

     glutMainLoop(); /* enter event loop */ 
    } 

    void processSpecialKeys(int key, int x, int y) 
    { 
     switch(key){ 
      case GLUT_KEY_UP: 
       moveUp(); 
      break; 
      case GLUT_KEY_DOWN: 
        moveDown(); 
      break; 
      case GLUT_KEY_LEFT: 
       moveLeft(); 
      break; 
      case GLUT_KEY_RIGHT: 
       moveRight(); 
      break; 
     } 
    } 

    void moveUp(){ 
    personX= (5.0*cosf(personRota))+personX; 
    personY= (5.0*sinf(personRota))+personY; 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    display(); 
    } 
+0

あなたは、もはや 'glVertexXY'がないということを意味しますか?そして、あなたはそれを言及しなかったので - あなたは['GLSurfaceView'](http://developer.android.com/reference/android/opengl/GLSurfaceView.html)を見つけましたか? –

+0

彼らはglVertexXYで何の理由かわからなかった。私が読んだことから、人々はそれが非効率的であると言っています...そのインターネット、私は巨大な塩でそれを取るので。私は今夜​​家に帰るときにglsurfaceviewを見ていない。私は感謝するだろう! – Elliott

答えて

0

うまく即時モードの違いを説明し、モードAPIを保持表情hereを、持っていてください。私はOpenGL wikiでまともなものを見つけられませんでした(の言及は一切ありません。どこでもまったく)。 Kurt Akelay and Pat Hanrahanには良いスライドがいくつかあります。 "Interface Choices"を検索してください。これらは信頼されるべきです、ちょうど信頼私;)

+0

私はあなたが何を意味するかを見ます。しかし、私の質問は、あなたが再描画をどうやってやり直しているのかにはまだ戻っています。私は、ボタンリスナーを持っていて、スクリーンの向こう側にキャラクターを動かすことができるようにしたい。 – Elliott

+0

ええと、これは変更されていません - 描画する前にすべてのバッファを 'glClear'してから描画する必要があります。 'GLSurfaceView'はダブルバッファリングを行います。おそらく、誤解を排除するために、コードを投稿することができますか? –

+0

Stefan、ありがとうOpenGL ESで何を達成しようとしているのかを見るためのコードをいくつか追加しましたが、display()を省略しました。基本的に私はアンドロイドに、スプライトの位置を更新してキャンバスを再表示するように画面上のボタンを押すことができるようにしたいと考えています。ありがとうございました – Elliott

関連する問題