Python で OpenGL を使ってみたい
こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。
この記事の目次
背景・目的
かなり前の記事になりますが、 Python から OpenCV を使って画像認識の記事を結構たくさん書きました。
C# からは OpenGL を使っていたのですが、 Python では使ってませんでした。
【参考にしたサイト】
WindowsのPythonでOpenGLを使う - TadaoYamaokaの日記
とりあえず参考にしたサイトのソースコードを動かしてひとまず描画をやってみます。
動作環境
・Windows 10
・winpython 64bit 3.4.4
プログラム
PyOpenGL をインストールします。
画像の通りに pip でインストール出来ます。
あとは、参考にしたサイトによると GLUT なるものが必要みたいです。
.zip なのでさっさとダウンロードして解凍しましょう。
参考にしたサイトにもリンクがありますが、下記の通りです。
【 GLUT ダウンロードサイト】
https://www.transmissionzero.co.uk/software/freeglut-devel/
ダウンロードするのは画像の赤四角で囲われているリンクのファイルです。
.zip ファイルを解凍して中の freeglut\bin\x64\ にある freeglut.dll を C:\Windows\System32 にコピーする。
ソースコード
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
import sys
def main():
glutInit(sys.argv)
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE | GLUT_DEPTH)
glutInitWindowSize(300, 300) # window size
glutInitWindowPosition(100, 100) # window position
glutCreateWindow(b"teapot") # show window
glutDisplayFunc(display) # draw callback function
glutReshapeFunc(reshape) # resize callback function
init(300, 300)
glutMainLoop()
def init(width, height):
""" initialize """
glClearColor(0.0, 0.0, 0.0, 1.0)
glEnable(GL_DEPTH_TEST) # enable shading
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
##set perspective
gluPerspective(45.0, float(width)/float(height), 0.1, 100.0)
def display():
""" display """
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
##set camera
gluLookAt(0.0, 1.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0)
##draw a teapot
glColor3f(1.0, 0.0, 0.0)
glutWireTeapot(1.0) # wireframe
# glutSolidTeapot(1.0) # solid
glFlush() # enforce OpenGL command
def reshape(width, height):
"""callback function resize window"""
glViewport(0, 0, width, height)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(45.0, float(width)/float(height), 0.1, 100.0)
if __name__ == "__main__":
main()
コメント
CAD やアニメーションアプリなんかを作りたいです。
全然関係ないですが、 winpython の情報ってすくないですよね。
以上