2016-12-13 7 views
-1

私はOpenGLを初めて使いました。私は25ミリ秒ごとに1度回転する三角形をアニメートする必要があります。私はこの三角形を青から緑、赤まで徐々に色を変えるようにプログラムしたいと思っています。三角を回転させ、その色を変更する

float rAngle=0.0; 

void handleResize(int w,int h) 
{ 
    glViewport(0,0,w,h); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluPerspective(45.0,(double)w/(double)h,1.0,200.0); 
} 

void drawscene() 
{ 
    glColor3f(0.0f,1.0f,0.0f); 
    glClear(GL_COLOR_BUFFER_BIT); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    glRotatef(-rAngle,0.0f,0.0f,0.1f); 
    glBegin(GL_TRIANGLES); 
    glVertex3f(-0.5f,0.5f,-5.0f); 
    glVertex3f(-1.0f,1.5f,-5.0f); 
    glVertex3f(-1.5f,0.5f,-5.0f); 
    glEnd(); 
    glFlush(); 
} 
void update(int value) 
{ 
    rAngle+=1.0f; 
    glutPostRedisplay(); 
    glutTimerFunc(25,update,0); 
} 

int main(int argc, char** argv) 
{ 
    glutInit(&argc, argv); 
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f); 
    glutInitWindowSize(500, 500); 
    glutInitWindowPosition(0, 0); 
    glutCreateWindow("OpenGL"); 
    glutDisplayFunc(drawscene); 
    glutReshapeFunc(handleResize); 
    glutTimerFunc(25,update,0); 
    glutMainLoop(); 
    return 0; 
} 
+6

あなたの問題は何ですか?シェーダを使用している最新のOpenGLも習得する必要があります。 – CroCo

答えて

2

OpenGLを使用するこの方法は推奨されません。

古い古いOpenGLを使いこなす理由はないことを指摘してみましょう。即時モードは約10年後に廃止されました。

modern OpenGLを参照してください。

質問は非常に不明ですが、私はあなたに必要な情報を提供しようとします。

プッシュ/ポップマトリックス:

glPushMatrix()

マトリックスモードのそれぞれについて、行列のスタックがあります。 GL_MODELVIEWモードでは、スタックの深さは少なくとも32です。他のモードのGL_COLOR、GL_PROJECTION、およびGL_TEXTUREでは、深さは少なくとも2です。どのモードの現在のマトリックスも、そのモードのスタックの最上部のマトリックスです。

glPushMatrixは、現在の行列スタックを1つ下に押して、現在の行列を複製します。つまり、glPushMatrix呼び出しの後、スタックの上にある行列は、その下にあるものと同じです。

glPopMatrixは現在のマトリックスをポップし、現在のマトリックスをスタックの下のものに置き換えます。

最初に、各スタックには1つの行列、恒等行列が含まれています。

回転:

glRotate()を呼び出して、現在の行列を回転させます。

カラー:

使用these色をレンダリングを選択します。

通常、glColor3f()またはglColor4f()が使用されます。

あなたのシナリオ:色をレンダリング選択する

  1. コールglColor3f()またはglColor4f()
  2. glPushMatrix()を呼び出してすべてを回転させないようにします。
  3. 行列を回転するにはglRotate()を呼び出します。
  4. レンダリングメッシュ。
  5. glPopMatrix()を呼び出して、回転した行列から戻します。

は、単位時間あたりに変更するには:

ちょうど時間をかけGL関数に送信されたデータを変更します。各フレームごとに回転/色の値を増やします。

私はマトリクスの数学とそれがグラフィックをどのように組み込んでいるかを読んでみることをお勧めします。

関連する問題