人工知能に関する断創録

このブログでは人工知能のさまざまな分野について調査したことをまとめています(更新停止: 2019年12月31日)

OpenGLウィンドウの表示

PyOpenGLで遊ぶためのウィンドウを表示するところまで。OpenGL自体にはウィンドウを表示する関数はないためGLUTと呼ばれる拡張ツールキットを使います。以下のサンプルを実行するにはPyOpenGLとGLUTのインストールが必要です。PyOpenGLのインストール(2008/5/3)を参照してください。

gl_window.py
f:id:aidiary:20100814102420p:plain

ウィンドウの表示

#!/usr/bin/env python
#coding:utf-8
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
import sys

def main():
    glutInit(sys.argv)
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE)
    glutInitWindowSize(300, 300)  # ウィンドウサイズ
    glutInitWindowPosition(100, 100)  # ウィンドウ位置
    glutCreateWindow("OpenGLウィンドウの表示")  # ウィンドウを表示
    glutDisplayFunc(display)  # 描画関数を登録
    init()
    glutMainLoop()

def init():
    glClearColor(0.0, 0.0, 1.0, 1.0)  # クリア色の指定

def display():
    """描画処理"""
    glClear(GL_COLOR_BUFFER_BIT)  # 画面のクリア
    glFlush()  # OpenGLコマンドの強制実行

if __name__ == "__main__":
    main()

PyOpenGLにはウィンドウを表示する機能がないためGLUTと呼ばれる拡張ユーティリティを使います。あたまにglutとついている関数はほとんどがGLUTの関数です。一方、glとちている関数はOpenGLの関数です。GLUTを使うときにはglutInit()でGLUTを初期化します。

ウィンドウの作成

ウィンドウを表示するにはGLUTのglutCreateWindow()です。引数にはウィンドウのタイトルを書きます。ウィンドウのサイズは glutInitWindowSize()、ウィンドウの位置はglutInitWindowPosition()で変えられます。

背景色の指定

init()は自作関数でOpenGLで1回だけ実行すればよい初期化処理を書きます。ここでは、glClearColor()でウィンドウのクリア色を指定しています。4つ引数がありますが、

  glClearColor(赤, 緑, 青, アルファ値)

です。値は0.0から1.0までを取り、1.0のときその色が強く出ます。ここでは、青を1.0にしているので青で塗りつぶされたウィンドウになります。Pygameでは0から255までと整数を使うことが多いですが、OpenGLでは0.0から1.0の小数を使うんですね。アルファ値は透明色で 0.0のとき完全に透明、1.0のとき不透明になります。ここではあんまり関係ないです。

描画関数の登録

ウィンドウ内への描画を行うのがdisplay()です。ここに画面に描画する命令をいろいろ書いていきます。display()は、 glutDisplayFunc()に登録しておくとOpenGLによって自動的に呼び出されます。自分では呼び出しません。こういう関数はコールバック関数と言います。display()内では、glClear()で画面をクリアしています。クリアするときにglClearColor()で設定した色が使われます。glFlush()はOpenGLの描画命令を強制的に実行するコマンドです。これを書いておくと描画が確実に実行されます。画面のクリアしか書いてないのでまだ図形は何も描画されていません。次回は三角形、四角形、ポリゴンなどを描画してみます。