Hope is a Dream. Dream is a Hope.

非公開ブログは再開しました。

OpenGL初心者でもわかるグラフ描画の猫の手

OpenGL初心者でもわかるグラフ描画の猫の手

これまで、Matlabを使って解析をしているが、そろそろオープンソースを使っておかないと今後Matlabを使えなくなったときに手がつけきれなくなると思いPythonを使って数値計算をできるように心がけている。

先日ウェーブレット解析をしてみようと、Pythonを使って進めていた。

アルゴリズムの実装はPython+Numpy+Scipy

GUIにはPyQt

グラフの表示にはPyQtGraph

しかし、全然進まない。

アルゴリズムの実装段階(理解段階)においては計算途中のデータを可視化しながら進める必要がある。

Matlabであればその都度グラフを表示するのだが、使いなれていないPyQtGraphだと、PyQtGraphの使い方も調べなければいけないし、アルゴリズムのミスも見つけなければいけないとかなり手間がかかってややこしくなった。結局PyQtの描画周辺の理解が浅いことと、アルゴリズムの実装とを別で考えなければ行けないことが身にしみてわかった。できるつもりになっていた自分が恥ずかしい。その反省もふまえまずは、グラフィック系の基礎勉強をする事にする。それで選んだのがOpenGLOpenGLならプラットフォームや言語に左右されることなく使えるし、今後の技術として学んでおきたいところ。Pythonで動かすにはPyOpenGLというライブラリがあるのでPyQtと平行して使う事にする。

事前調査

OpenGLとは

OpenGL(オープンジーエル、Open Graphics Library)は、Khronosグループが策定しているグラフィックスハードウェアのアプリケーションプログラミングインタフェース (API)。2次元・3次元コンピュータグラフィックス両方が扱える。オープン仕様として公開され、幅広い処理系に対応しているため、広く一般に普及している。グラフィックデバイスとの直接通信を行なう抽象化レイヤーAPIであるため、非常に高速に動作し、高精度な3D画像を描画できる。有償・無償の豊富な補助ライブラリがあるのも特色として挙げられる。http://ja.wikipedia.org/wiki/OpenGL

GL,GLU,GLUTとは

pyqtのサンプルを調べていると、GL,GLU,GLUTとインポートしているのを見受けられるので調べると。どうも拡張ライブラリみたいだ。ここら辺はチュートリアルを回しながらわかってくるだろう。

 

補助・拡張ライブラリ
 OpenGLそのものは、ハードウェアに近い低次のライブラリである。そのため、よりソフトウェアに近い、多くの高次の補助・拡張ライブラリが存在する。主に、3D描画機能を簡易化・拡張するもの、ウインドウシステムをサポートするもの、グラフィックス面以外の機能を付加するものに分けられる。

参考サイト

PyOpenGL本家

http://pyopengl.sourceforge.net/documentation/index.html

 Python Programming in PyOpenGl (PDF, 英語)

手取り足取り教えてくれる

http://www.math.uiuc.edu/~gfrancis/illimath/StanBlank/PyOpenGL.pdf

2D graphics rendering tutorial with PyOpenGL

http://cyrille.rossant.net/2d-graphics-rendering-tutorial-with-pyopengl/

 

とりあえずサンプルをまねしてみる。

なにごともまずは半歩踏み出さないと行けない。参考記事ばっかり眺めてても一生わからない。

# ogl1.py

from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *

def draw():
    glClear(GL_COLOR_BUFFER_BIT)
    glutWireTeapot(0.5)
    glFlush()

glutInit(sys.argv)
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB)
glutInitWindowSize(250,250)
glutInitWindowPosition(100,100)
glutCreateWindow("My Second OGL Program")
glutDisplayFunc(draw)
glutMainLoop()

結果。ティーポットがでてきた。

スクリーンショット 2015-04-21 21.27.00

 

OpenGLによる3次元CGプログラミング

OpenGLによる3次元CGプログラミング

GLUTによるOpenGL入門―「OpenGL Utility Toolkit」で簡単3Dプログラミング! (I・O BOOKS)

GLUTによるOpenGL入門―「OpenGL Utility Toolkit」で簡単3Dプログラミング! (I・O BOOKS)

入門ゲームプログラミング (Professional Game Developerシリーズ)

入門ゲームプログラミング (Professional Game Developerシリーズ)

実例で学ぶゲーム3D数学

実例で学ぶゲーム3D数学

理系が恋に落ちたので証明してみた。(1) (メテオCOMICS)

理系が恋に落ちたので証明してみた。(1) (メテオCOMICS)