OpenGLライブラリを使う(CとPythonコードの比較)
これまでPythonでOpenGLをどのように使うのか、適当なチュートリアルがなかったのでなかなか理解できないまま、長い時間が経ってしまった。
最近、PyOpenGLを使ったコードをながめていたときに、C言語でOpenGLを使うときの関数をそのまま呼んでいるのに気づく。いろいろ試してみて、CとPythonでOpenGLを使うコードは大きく変わらない、ことが分かった。
C言語を使うサンプルだけれども、OpenGLを初めて使う人向けのチュートリアルを見つける。
OpenGLプログラミングコース(株式会社エクサ)
例えば、一番簡単なウィンドウを開くCのプログラムは以下のようになる。
/* --- clr.c */ #include <GL/glut.h> void initialize(void) { glClearColor(0.5f, 0.9f, 0.3f, 1.0f); } void display(void) { glClear( GL_COLOR_BUFFER_BIT ); glFlush(); } void keyboard( unsigned char c, int x, int y ) { if ( c==27 ) exit(0); } void reshape(int w, int h) { } int main(int argc, char *argv[]) { glutInit( &argc, argv ); glutInitDisplayMode( GLUT_RGB ); glutInitWindowPosition( 100, 100 ); glutInitWindowSize( 500, 400 ); glutCreateWindow( argv[0] ); glutDisplayFunc( display ); glutKeyboardFunc( keyboard ); glutReshapeFunc( reshape ); initialize(); glutMainLoop(); return 0; }
同じ処理をPythonで行う場合は、以下のように書く。全く同じ関数を使って、見事に動く。
# --- clr.py from OpenGL.GL import * from OpenGL.GLUT import * #from OpenGL.GLU import * import sys ESCAPE = '\033' def initialize(): glClearColor(0.5, 0.9, 0.3, 1.0) def display(): glClear( GL_COLOR_BUFFER_BIT ) glFlush() def keyboard(*args): if args[0] == ESCAPE: sys.exit() def reshape(w, h): pass def main(): glutInit(sys.argv) glutInitDisplayMode( GLUT_RGB ) glutInitWindowPosition( 100, 100 ) glutInitWindowSize( 500, 400 ) glutCreateWindow( sys.argv[0] ) glutDisplayFunc( display ) glutKeyboardFunc( keyboard ) glutReshapeFunc( reshape ) initialize() glutMainLoop() print "Hit ESC key to quit." main()
ウィンドウが開くだけのプログラムだけれど。
今後はCのチュートリアルで勉強する。Cの方が描画速度は速そうだし、Pythonのコードに変換するのは容易だということが分かった。