3DCG

Python3で「OpenGL」を学ぶ 「PyOpenGL」NeHe Lesson4

三角形と四角形を回転させる

それぞれの頂点を指定する前に、glRotatef()で適用する回転を指定する。

# 三角形の回転角度
rtri = 0.0

#四角形の回転角度
rquad = 0.0

# メインの描画関数
def DrawGLScene():
    global rtri, rquad

    # 画面とデプスバッファのクリア
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
    # ビューのリセット 
    glLoadIdentity()

    # 左1.5移動、奥へ6.0移動
    glTranslatef(-1.5, 0.0, -6.0)

    # スムースカラーモードは有効になっている(lesson1を確認)
    # 三角形を描画
    
    glRotatef(rtri, 0.0, 1.0, 0.0)       # Y軸で回転
    glBegin(GL_POLYGON)                 # 三角形の描画
    glColor3f(1.0, 0.0, 0.0)            # 赤
    glVertex3f(0.0, 1.0, 0.0)           # 上
    glColor3f(0.0, 1.0, 0.0)            # 緑
    glVertex3f(1.0, -1.0, 0.0)          # 右下
    glColor3f(0.0, 0.0, 1.0)            # 青
    glVertex3f(-1.0, -1.0, 0.0)         # 左下
    glEnd()                             # 描画終了

    # 回転を「元に戻し」、四角形の回転へ影響しないようにする。
    # 平行移動も「元に戻す」ことになる。これは行列スタックも使える。
    glLoadIdentity()

    # 右に1.5、奥に6.0移動
    glTranslatef(1.5, 0.0, -6.0)

    # 四角形を描画
    glRotatef(rquad, 1.0, 0.0, 0.0) # X軸で回転
    glColor3f(0.3, 0.5, 1.0)            # 青みがかった色
    glBegin(GL_QUADS)                   # 四角形の描画開始
    glVertex3f(-1.0, 1.0, 0.0)          # 左上
    glVertex3f(1.0, 1.0, 0.0)           # 右上
    glVertex3f(1.0, -1.0, 0.0)          # 右下
    glVertex3f(-1.0, -1.0, 0.0)         # 左下
    glEnd()                             # 描画終了

    # 値は著者の経験則から小さい値の方がうまくいくことが確認されている
    rtri = rtri + 1.0 # 三角形の回転角度の変数を増やす
    rquad = rquad - 1.0 # 四角形の回転角度の変数を小さくする

    # 二重にバッファリングしているため、バッファを入れ替えて描画されたものを表示する
    glutSwapBuffers()

実行結果

私の環境(GTX 1080)では、回転変数の変更に使う値を1.0から0.01にするとちょうど良くなりました。(1.0にすると高速に回転しすぎて点滅するような描画になりました) gifでフレームレートが低めになっています。