見出し画像

PythonにOpenGLをインストールする

この記事と同様の内容はネット検索をすれば、沢山でてきますが、
それでもテストプログラムを動作させるのに
2時間近く格闘してしまったので、メモとして残して残しておきます。

●動作環境
Windows 10 (64bit)
Python 3.7.7 (Anaconda)

●インストール手順
AnacondaのCMD.exeからコマンドプロンプトを開き、
>pip install PyOpenGL PyOpenGL_accelerate
でPyOpenGLをインストール。

続いて、freeglutをインストール。
https://www.transmissionzero.co.uk/software/freeglut-devel/
からビルド済みのzipファイルを入手

画像1

ダウンロードした、freeglut-MSVC-3.0.0-2.mp.zipファイルを解凍し、
freeglut\bin\x64\freeglut.dllをC:\Windows\System32フォルダにコピーする。
(他のファイルは使用しません)

●テストコードの実行

ウィンドウにティーポットを表示する(下記コード参照)
テストコードを実行してみると…

画像2

エラーになってしまいました。😥
これを解決するのに時間が掛かりました。
ネットを彷徨い、解決方法の記事をみつけました。

C:\Users\xxx\Anaconda3\envs\openCV\Lib\site-packages\OpenGL\platform\win32.py

を開き、

画像4

上記キーワードを追加して、実行しなおすと…

画像4

無事動作するようになりました!🎊
以上です!

●ティーポット表示サンプルコード

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()
   

いいなと思ったら応援しよう!