Raspberry Pi 3へPyOpenGLをインストールしました。PyOpenGLは、グラフィックスハードウェア向けの2次元/3次元コンピュータグラフィックスAPIであるOpenGLを、Pythonからアクセスできるライブラリで、今回は、PyOpenGLのバージョン「3.1.1a1」をPython2.7からアクセスできるようにインストールしました。

PyOpenGLのインストール

次のコマンドにより、PyOpenGLをインストールします。

$ sudo easy_install pyopengl
Searching for pyopengl
Reading https://pypi.python.org/simple/pyopengl/
Downloading https://pypi.python.org/packages/f0/d6/daabe9beb313c0f40225e179f92d5faf8f0557213d75ff52b9b759f5d1c9/PyOpenGL-3.1.1a1.zip#md5=4fe5de1c531843a8e2a6769c26e4bfdd
Best match: PyOpenGL 3.1.1a1
Processing PyOpenGL-3.1.1a1.zip
Writing /tmp/easy_install-JtuFhM/PyOpenGL-3.1.1a1/setup.cfg
Running PyOpenGL-3.1.1a1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-JtuFhM/PyOpenGL-3.1.1a1/egg-dist-tmp-gSRgwA
warning: no previously-included files matching '*.odt' found anywhere in distribution
warning: no previously-included files matching '*.odp' found anywhere in distribution
warning: no previously-included files matching '.cvsignore' found anywhere in distribution
warning: no previously-included files matching '*.diff' found anywhere in distribution
warning: no previously-included files found matching 'src/*.h'
warning: no previously-included files found matching 'src/*.xml'
warning: no previously-included files found matching 'src/*.zip'
warning: no previously-included files found matching 'src/*.pdf'
warning: no previously-included files found matching 'src/*.zip'
warning: no previously-included files found matching 'src/*.txt'
warning: no files found matching 'src/win32deps.py'
warning: no files found matching 'src/toglinstall/get_togl.py'
warning: no files found matching 'metadata.py'
warning: no files found matching 'ChangeLog.txt'
warning: no previously-included files found matching 'OpenGL_accelerate'
zip_safe flag not set; analyzing archive contents...
OpenGL.wrapper: module references __file__
OpenGL.platform.ctypesloader: module references __file__
OpenGL.Tk.__init__: module references __file__
creating /usr/local/lib/python2.7/dist-packages/PyOpenGL-3.1.1a1-py2.7.egg
Extracting PyOpenGL-3.1.1a1-py2.7.egg to /usr/local/lib/python2.7/dist-packages
Adding PyOpenGL 3.1.1a1 to easy-install.pth file

Installed /usr/local/lib/python2.7/dist-packages/PyOpenGL-3.1.1a1-py2.7.egg
Processing dependencies for pyopengl
Finished processing dependencies for pyopengl

PyOpenGLは「/usr/local/lib/python2.7/dist-packages/PyOpenGL-3.1.1a1-py2.7.egg/OpenGL」にインストールされます。作成されたフォルダを次に示します。

PyOpenGLのインストール

正常にインストールされたか、次のようにpythonを実行してみます。

$ python
Python 2.7.9 (default, Sep 17 2016, 20:26:04)
[GCC 4.9.2] on linux2
Type “help”, “copyright”, “credits” or “license” for more information.
>>> from OpenGL.GL import *
>>> from OpenGL.GLU import *
>>>

PythonからアクセスできるOpenGLについて

Raspberry Pi 3にインストールしている次のバージョンでは、すでにPythonからアクセスできるOpenGLがインストールされています。

$ uname -a
Linux raspberrypi 4.9.24-v7+ #993 SMP Wed Apr 26 18:01:23 BST 2017 armv7l GNU/Linux

次のコマンドで確認すると、確かに「python-opengl – Python bindings to OpenGL (Python 2)等」が表示されます。

$ apt-cache search opengl | grep python
libtulip-python-4.6 – Tulip graph library – Qt/OpenGL GUI runtime
python-glitch – Python library for OpenGL graphics programming
python-gtkglext1 – GtkGLext python bindings
python-kivy – Kivy – Multimedia / Multitouch framework in Python (Python 2)
python-opengl – Python bindings to OpenGL (Python 2)
python-pyqt5.qtopengl – Python bindings for Qt5’s OpenGL module
python-pyqt5.qtopengl-dbg – Python bindings for Qt5’s OpenGL module (debug extension)
python-pyside.qtopengl – Qt 4 OpenGL module – Python bindings
python-qt4 – Python bindings for Qt4
python-qt4-gl – Python bindings for Qt4’s OpenGL module
python-qt4-gl-dbg – Python bindings for Qt4’s OpenGL module (debug extension)
python-sfml – Simple and Fast Multimedia Library – Python 2 Bindings
python-sfml-dbg – Simple and Fast Multimedia Library – Python 2 Debug Bindings
python-sfml-doc – Simple and Fast Multimedia Library – Documentation
python-soya – high level 3D engine for Python
python-soya-dbg – high level 3D engine for Python – debug extension
python-soya-doc – high level 3D engine for Python
python3-kivy – Kivy – Multimedia / Multitouch framework in Python (Python 3)
python3-opengl – Python bindings to OpenGL (Python 3)
python3-pyqt4 – Python3 bindings for Qt4
python3-pyqt4.qtopengl – Python 3 bindings for Qt4’s OpenGL module
python3-pyqt4.qtopengl-dbg – Python 3 bindings for Qt4’s OpenGL module (debug extension)
python3-pyqt5.qtopengl – Python 3 bindings for Qt5’s OpenGL module
python3-pyqt5.qtopengl-dbg – Python 3 bindings for Qt5’s OpenGL module (debug extension)
python3-pyside.qtopengl – Qt 4 OpenGL module – Python3 bindings
python3-sfml – Simple and Fast Multimedia Library – Python 3 Bindings
python3-sfml-dbg – Simple and Fast Multimedia Library – Python 3 Debug Bindings

しかしこの状態で、pythonを実行すると、次のように「>>> No module named OpenGL.GL」のエラーが表示され、OpenGLがインポートできません。

$ python
Python 2.7.9 (default, Sep 17 2016, 20:26:04)
[GCC 4.9.2] on linux2
Type “help”, “copyright”, “credits” or “license” for more information.
>>> from OpenGL.GL import *
Traceback (most recent call last):
  File ““, line 1, in 
ImportError: No module named OpenGL.GL
>>> No module named OpenGL.GL

どうも「apt-cache search」コマンドで表示されるのは、PyOpenGLではないようです。

PyOpenGLを使用したサンプルプログラム

PyOpenGLを確認するためのサンプルプログラム「openglsample2.py」を次に示します。

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

def display():
    glClear(GL_COLOR_BUFFER_BIT)
    glFlush()


def main():
    glutInit(sys.argv)
    glutInitWindowSize(300, 300)
    glutInitDisplayMode(GLUT_RGBA)
    glutCreateWindow(b"OpenGL")

    glutDisplayFunc(display)
    glClearColor(0.0, 0.0, 0.0, 1.0)
    glutMainLoop()

    return 0


if __name__ == "__main__":
    main()

次のコマンドで作成したサンプルプログラムを実行します。

$ python openglsample2.py

実行すると次のようにウインドウが表示されます。

PyOpenGLによるプログラムの実行