2021/09/30(木) [n年前の日記]
#1 [python] Pygame + PyOpenGL で teapot が描画できない
Python + 2Dゲーム制作ライブラリ Pygame の復習を兼ねて、昔書いたスクリプトを動かして確認していたのだけど。Pyagme + 3D描画ライブラリ PyOpenGL を使ったスクリプト上で teapot の描画ができない ―― glutWireTeapot() や glutSolidTeapot() がエラーを出すことに気づいた。
環境は、Windows10 x64 21H1 + Python 3.9.5 x64 + pygame 2.0.1 + PyOpenGL 3.1.5 + PyOpenGL-accelerate 3.1.5。
動かなかったスクリプトは以下。
_01_teapot_on_pygame.py
以下のようなエラーメッセージが出る。
ちなみに、昔のバージョン、Python 2.7.18 x86 + pygame 2.0.1 + PyOpenGL 3.1.0 + PyOpenGL-accelerate 3.1.0 なら、ちゃんと動く。ウインドウ内に teapot が表示される。
解決方法は今のところ不明。
環境は、Windows10 x64 21H1 + Python 3.9.5 x64 + pygame 2.0.1 + PyOpenGL 3.1.5 + PyOpenGL-accelerate 3.1.5。
> python -VV Python 3.9.5 (tags/v3.9.5:0a7dcbd, May 3 2021, 17:27:52) [MSC v.1928 64 bit (AMD64)] > pip list | grep -e pygame -e PyOpenGL pygame 2.0.1 PyOpenGL 3.1.5 PyOpenGL-accelerate 3.1.5
動かなかったスクリプトは以下。
_01_teapot_on_pygame.py
以下のようなエラーメッセージが出る。
> python 01_teapot_on_pygame.py pygame 2.0.1 (SDL 2.0.14, Python 3.9.5) Hello from the pygame community. https://www.pygame.org/contribute.html Traceback (most recent call last): File "D:\home\prg\python\_test_sample\pygame_opengl\01_teapot_on_pygame.py", line 102, in <module> glutWireTeapot(1.0) # wireframe OSError: exception: access violation reading 0x0000000000000034
ちなみに、昔のバージョン、Python 2.7.18 x86 + pygame 2.0.1 + PyOpenGL 3.1.0 + PyOpenGL-accelerate 3.1.0 なら、ちゃんと動く。ウインドウ内に teapot が表示される。
> python -V Python 2.7.18 > pip list | grep -e pygame -e PyOpenGL pygame 2.0.1 PyOpenGL 3.1.0 PyOpenGL-accelerate 3.1.0
解決方法は今のところ不明。
◎ PyOpenGLのインストールについて。 :
Windows上で PyOpenGL を使おうとして、pip でネット経由のインストールを ―― pip install PyOpenGL でインストールしたら、GLUT関連が動かなくてハマった。別途 glut*.dll 等が必要になると思うのだけど、どの版を入手して、どこに置けばいいのやら。
以下のサイトから非公式版の .whl を入手してインストールすれば、すんなり動いてくれる。
_Python Extension Packages for Windows - Christoph Gohlke
今回、Python 3.9.5 x64上で使いたかったので、以下をDLしてインストールした。
ちなみに、Python 3.9.xインストールフォルダ\Lib\site-packages\OpenGL\DLLS\ 以下に、freeglut64.vc15.dll、gle64.vc15.dll、glut64.vc15.dll が入っている模様。
Python 2.7.18 上では、以下を実行してインストールした。
_pyopengl_310_win32_py27_setup.zip
以下のサイトから非公式版の .whl を入手してインストールすれば、すんなり動いてくれる。
_Python Extension Packages for Windows - Christoph Gohlke
今回、Python 3.9.5 x64上で使いたかったので、以下をDLしてインストールした。
- PyOpenGL-3.1.5-cp39-cp39-win_amd64.whl
- PyOpenGL_accelerate-3.1.5-cp39-cp39-win_amd64.whl
pip install PyOpenGL-3.1.5-cp39-cp39-win_amd64.whl pip install PyOpenGL_accelerate-3.1.5-cp39-cp39-win_amd64.whl
ちなみに、Python 3.9.xインストールフォルダ\Lib\site-packages\OpenGL\DLLS\ 以下に、freeglut64.vc15.dll、gle64.vc15.dll、glut64.vc15.dll が入っている模様。
Python 2.7.18 上では、以下を実行してインストールした。
- PyOpenGL-3.1.0.win32-py2.7.exe
- PyOpenGL-accelerate-3.1.0.win32-py2.7.exe
_pyopengl_310_win32_py27_setup.zip
◎ PyOpenGLだけなら問題無し。 :
PyOpenGL のバージョンが上がったことで teapot 関係の機能が削除されたのではと疑ったりもしたけれど、pygame と組み合わせず、PyOpenGL だけを使った場合は teapot もフツーに描画できた。以下は動作したスクリプト。
_teapot_draw.py
ということで、Pygame と PyOpenGL を組み合わせて、かつ、今現在のバージョンで動かした時だけ teapotの描画が何故かできないという…。
でもまあ、teapot描画を何かしら実用的なアレコレで使うかと言えば、そういうわけでもないし…。大体は、サンプルスクリプトの一例として使う場合がほとんどだから…。
そもそも、Pygame と PyOpenGL を組み合わせて使う場面自体がほとんど無いのではないかという気もするし…。こういう状態でも、実害は皆無かもしれず。
_teapot_draw.py
ということで、Pygame と PyOpenGL を組み合わせて、かつ、今現在のバージョンで動かした時だけ teapotの描画が何故かできないという…。
でもまあ、teapot描画を何かしら実用的なアレコレで使うかと言えば、そういうわけでもないし…。大体は、サンプルスクリプトの一例として使う場合がほとんどだから…。
そもそも、Pygame と PyOpenGL を組み合わせて使う場面自体がほとんど無いのではないかという気もするし…。こういう状態でも、実害は皆無かもしれず。
[ ツッコむ ]
#2 [anime] 「オッドタクシー」最終回を視聴
BSテレ東で放送されてたアニメ。最終回を視聴。
最初のうちは「何だろう、このアニメ」と、ジャンルも掴めないまま眺めてたけど、最後まで見たら、めちゃくちゃ面白かった…。設定からして、アニメ、もしくは漫画でしか実現できない作品かもしれないなと。実写でこの見た目は無理だろう…。一見するとほんわか動物アニメのように思ってしまうだろうけど、内容というか構成が…。いやはや、素晴らしい。
それにしても、説明が難しい作品だなと。どこを説明してもネタバレになってしまいそう。とにかく最後まで見てほしい、見れば面白さが分かる、としか言えない…。
そういえば、テレ東系のアニメにしては珍しく、BSテレ東で全国放送されたアニメなのだな…。テレ東のアニメって、滅多にBSでは放送しない印象があったけれど、さすがにこの作品は、CM映像だのPV映像だのをいくら見せても、誰からも注目されないと判断したのかなと…。本編を見なきゃ何が面白いのか全然分からないアニメだもんな…。
あまりに面白かったので、ネット配信されてるオーディオドラマとやらも全部聞いてしまった。ボールペンってそういうことか…。なるほどなあ…。となると、ますます本編のラストが…。これまでの展開を考えると、まあ、そうなるよなあ…。
最初のうちは「何だろう、このアニメ」と、ジャンルも掴めないまま眺めてたけど、最後まで見たら、めちゃくちゃ面白かった…。設定からして、アニメ、もしくは漫画でしか実現できない作品かもしれないなと。実写でこの見た目は無理だろう…。一見するとほんわか動物アニメのように思ってしまうだろうけど、内容というか構成が…。いやはや、素晴らしい。
それにしても、説明が難しい作品だなと。どこを説明してもネタバレになってしまいそう。とにかく最後まで見てほしい、見れば面白さが分かる、としか言えない…。
そういえば、テレ東系のアニメにしては珍しく、BSテレ東で全国放送されたアニメなのだな…。テレ東のアニメって、滅多にBSでは放送しない印象があったけれど、さすがにこの作品は、CM映像だのPV映像だのをいくら見せても、誰からも注目されないと判断したのかなと…。本編を見なきゃ何が面白いのか全然分からないアニメだもんな…。
あまりに面白かったので、ネット配信されてるオーディオドラマとやらも全部聞いてしまった。ボールペンってそういうことか…。なるほどなあ…。となると、ますます本編のラストが…。これまでの展開を考えると、まあ、そうなるよなあ…。
[ ツッコむ ]
以上、1 日分です。