mieki256's diary



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。
> 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してインストールした。
  • 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
ただ、今回は上記ファイルをHDDの中から発掘してインストールしたけれど、このバージョンのセットアップファイルは、今では入手できない気がする…。一応、置いとくか…。本来は最新版をインストールすれば済むはずだけど…。

_pyopengl_310_win32_py27_setup.zip

PyOpenGLだけなら問題無し。 :

PyOpenGL のバージョンが上がったことで teapot 関係の機能が削除されたのではと疑ったりもしたけれど、pygame と組み合わせず、PyOpenGL だけを使った場合は teapot もフツーに描画できた。以下は動作したスクリプト。

_teapot_draw.py

ということで、Pygame と PyOpenGL を組み合わせて、かつ、今現在のバージョンで動かした時だけ teapotの描画が何故かできないという…。

でもまあ、teapot描画を何かしら実用的なアレコレで使うかと言えば、そういうわけでもないし…。大体は、サンプルスクリプトの一例として使う場合がほとんどだから…。

そもそも、Pygame と PyOpenGL を組み合わせて使う場面自体がほとんど無いのではないかという気もするし…。こういう状態でも、実害は皆無かもしれず。

以上です。

過去ログ表示

Prev - 2021/09 - Next
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project