PyOpenGLを使ったPythonでのOpenGLの簡単な紹介

このチュートリアルでは、PythonでPyOpenGLライブラリを使用する方法を学びます。

OpenGLはWindows、Linux、MacOSを含む複数のプラットフォームでサポートされているグラフィックライブラリで、他の複数の言語でも使用することができます。

OpenGLは、他の類似のグラフィックライブラリと比較して、かなりシンプルです。

まず、私たちのシステムにセットアップすることから始め、次にこのライブラリの使い方を示す簡単な例を書きます。

インストール

Pythonを使用してOpenGLをインストールする最も簡単な方法は、pipパッケージマネージャを使用することです。

pipがインストールされている場合、以下のコマンドを実行して、OpenGLをダウンロードし、インストールします。

$ pip install PyOpenGL PyOpenGL_accelerate


タイプミスを防ぐために、上記のコマンドをコピーしておくことをお勧めします。

このコマンドの実行が終了すると、インストールが成功した場合、最後に次のような出力が得られます。

Successfully installed PyOpenGL-3.1.0 PyOpenGL-accelerate-3.1.0


もし、これがうまくいかない場合は、手動でダウンロードすることもできます。

そのためには、このリンクをクリックし、「downloading and installation」の見出しまでスクロールダウンし、そこにあるすべてのファイルをダウンロードします。

その後、これらのファイルをダウンロードしたフォルダに移動し、ターミナルまたはコマンドプロンプトで次のコマンドを実行します。

$ python setup.py


PythonでOpenGLライブラリを使用するには、Visual C++ 14.0のビルドツールがシステムにインストールされている必要があることを述べておきます。

さて、OpenGLをシステムにうまくインストールできたので、実際に手を動かしてみましょう。

コーディング演習

OpenGL をコードで使用するために最初にしなければならないことは、OpenGL をインポートすることです。

そのために、以下のコマンドを実行します。

import OpenGL


先に進む前に、あなたのプログラムでこのライブラリを使おうとするときはいつでもインポートする必要がある他のいくつかのライブラリがあります。

以下は、それらのインポートのためのコードです。

import OpenGL.GL
import OpenGL.GLUT
import OpenGL.GLU
print("Imports successful!") # If you see this printed to the console then installation was successful


必要なインポートが終わったので、まず、グラフィックスを表示するウィンドウを作りましょう。

そのためのコードを以下に示します。

また、コメントでその説明をします。

def showScreen():
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) # Remove everything from screen (i.e. displays all white)


glutInit() # Initialize a glut instance which will allow us to customize our window
glutInitDisplayMode(GLUT_RGBA) # Set the display mode to be colored
glutInitWindowSize(500, 500)   # Set the width and height of your window
glutInitWindowPosition(0, 0)   # Set the position at which this windows should appear
wind = glutCreateWindow("OpenGL Coding Practice") # Give your window a title
glutDisplayFunc(showScreen)  # Tell OpenGL to call the showScreen method continuously
glutIdleFunc(showScreen)     # Draw any graphics or shapes in the showScreen function at all times
glutMainLoop()  # Keeps the window created above displaying/running in a loop


上記のインポートとこのコードをひとつの Python (.py) ファイルにコピーして、実行してください。

すると、白い四角い画面が現れるはずです。

ここで、何か図形を描きたい場合は、showScreen関数で描画する必要があります。

では、OpenGLを使って正方形を作ってみましょう。

その前に、OpenGLが従う座標系を理解する必要があります。

(0,0)点はウィンドウの左下で、そこから上に行けばY軸にそって移動し、右に行けばX軸にそって移動することになります。

つまり、ウィンドウの左上の点は (0, 500) で、右上の点は (500, 500) で、右下の点は (500, 0) となります。

注意:この例では500×500のウィンドウを作成しましたが、これはコンピュータのフルスクリーンではありません。

さて、それでは正方形のコードを書いてみよう。

コードの解説はコメント欄にあります。

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


w, h = 500,500


# ---Section 1---
def square():
    # We have to declare the points in this sequence: bottom left, bottom right, top right, top left
    glBegin(GL_QUADS) # Begin the sketch
    glVertex2f(100, 100) # Coordinates for the bottom left point
    glVertex2f(200, 100) # Coordinates for the bottom right point
    glVertex2f(200, 200) # Coordinates for the top right point
    glVertex2f(100, 200) # Coordinates for the top left point
    glEnd() # Mark the end of drawing


# This alone isn't enough to draw our square


# ---Section 2---


def showScreen():
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) # Remove everything from screen (i.e. displays all white)
    glLoadIdentity() # Reset all graphic/shape's position
    square() # Draw a square using our function
    glutSwapBuffers()


#---Section 3---


glutInit()
glutInitDisplayMode(GLUT_RGBA) # Set the display mode to be colored
glutInitWindowSize(500, 500)   # Set the w and h of your window
glutInitWindowPosition(0, 0)   # Set the position at which this windows should appear
wind = glutCreateWindow("OpenGL Coding Practice") # Set a window title
glutDisplayFunc(showScreen)
glutIdleFunc(showScreen) # Keeps the window open
glutMainLoop()  # Keeps the above created window displaying/running in a loop


上のコードを実行すると正方形が描画されますが、正方形の色はウィンドウの色と同じなので表示されません。

以下の行を glLoadIdentity 文の下、square() 文の上に追加してください。

glColor3f(1.0, 0.0, 3.0) # Set the color to pink


しかし、このコードはまだ完全ではありません。

現在のコードは、正方形を一度描いてから、もう一度画面をクリアしています。

私たちはそんなことはしたくありません。

なぜなら、正方形は一瞬で現れ、一瞬で消えるからだ。

これを避けるために、別の関数を書いてみよう。

# Add this function before Section 2 of the code above i.e. the showScreen function
def iterate():
    glViewport(0, 0, 500,500)
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    glOrtho(0.0, 500, 0.0, 500, 0.0, 1.0)
    glMatrixMode (GL_MODELVIEW)
    glLoadIdentity()


このiterate関数を上のコードのセクション2で呼び出す。

この関数は、showScreen関数のglLoadIdentityの下とglColor3dの上に追加してください。

それでは、曖昧さをなくすために、これらすべてをひとつのコードファイルにコンパイルしてみましょう。

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


w,h= 500,500
def square():
    glBegin(GL_QUADS)
    glVertex2f(100, 100)
    glVertex2f(200, 100)
    glVertex2f(200, 200)
    glVertex2f(100, 200)
    glEnd()


def iterate():
    glViewport(0, 0, 500, 500)
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    glOrtho(0.0, 500, 0.0, 500, 0.0, 1.0)
    glMatrixMode (GL_MODELVIEW)
    glLoadIdentity()


def showScreen():
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
    glLoadIdentity()
    iterate()
    glColor3f(1.0, 0.0, 3.0)
    square()
    glutSwapBuffers()


glutInit()
glutInitDisplayMode(GLUT_RGBA)
glutInitWindowSize(500, 500)
glutInitWindowPosition(0, 0)
wind = glutCreateWindow("OpenGL Coding Practice")
glutDisplayFunc(showScreen)
glutIdleFunc(showScreen)
glutMainLoop()


これを実行すると、ピンク色の四角いボックスが入ったウィンドウが表示されるはずです。

出力してください。

結論

このチュートリアルでは、OpenGLについて、ダウンロードとインストールの方法、そして短いサンプルプログラムでの使用方法を学びました。

この例題では、OpenGL を使って基本的な図形を作る練習もしました。

これは、このライブラリを使って何かを描く必要があるときに必ず行う必要がある、いくつかの複雑な関数呼び出しに対する洞察を与えてくれました。

結論として、OpenGLは非常に資源が豊富で、深く潜れば潜るほど複雑になっていきます。

タイトルとURLをコピーしました