PillowをインストールしてPyOpenGL-Demoのコードを手直し実行
前回のつづき。
Pillowインストール
(game) $ pip install pillow Collecting pillow Downloading Pillow-4.2.1-cp36-cp36m-manylinux1_i686.whl (5.5MB) 100% |████████████████████████████████| 5.5MB 60kB/s Collecting olefile (from pillow) Using cached olefile-0.44.zip Installing collected packages: olefile, pillow Running setup.py install for olefile ... done Successfully installed olefile-0.44 pillow-4.2.1
開発環境
- Linux Mint 17.3 MATE 32bit
- pyenv 1.0.10
前回まで
今回は前回PILがなくてエラーになったものを試す。
lesson6.py
バグ1
#from Image import * from PIL import Image
前回のバグ。
Pillow(Python Imaging Library)のインストールと簡単なサンプルコード | mwSoft
バグ2
$ python lesson6.py Hit ESC key to quit. Traceback (most recent call last): File "lesson6.py", line 231, in <module> main() File "lesson6.py", line 224, in main InitGL(640, 480) File "lesson6.py", line 90, in InitGL LoadTextures() File "lesson6.py", line 71, in LoadTextures ix = image.size[0] AttributeError: '_io.TextIOWrapper' object has no attribute 'size'
# image = open("NeHe.bmp") image = open("NeHe.bmp")
バグ3
$ python lesson6.py Hit ESC key to quit. Traceback (most recent call last): File "lesson6.py", line 232, in <module> main() File "lesson6.py", line 225, in main InitGL(640, 480) File "lesson6.py", line 91, in InitGL LoadTextures() File "lesson6.py", line 74, in LoadTextures image = image.tostring("raw", "RGBX", 0, -1) File "/.../game/lib/python3.6/site-packages/PIL/Image.py", line 712, in tostring raise NotImplementedError("tostring() has been removed. " NotImplementedError: tostring() has been removed. Please call tobytes() instead.
- http://pillow.readthedocs.io/en/3.1.x/reference/Image.html#PIL.Image.Image.tostring
- Image Module — Pillow (PIL Fork) 4.2.1 documentation
# image = image.tostring("raw", "RGBX", 0, -1) # NotImplementedError: tostring() has been removed. Please call tobytes() instead. image = image.tobytes("raw", "RGBX", 0, -1)
from PIL import Image ... # image = image.tostring("raw", "RGBX", 0, -1) image = image.tobytes("raw", "RGBX", 0, -1)
$ python lesson6.py Hit ESC key to quit.
立方体の各面にbmp画像をテクスチャとして貼り付けてあるようだ。
lesson6-.py
lesson6.pyと同じような修正をするも、さらに以下エラーに見舞われた。
バグ1
インデントは元コードにあわせてハードタブにする。
$ python lesson6-multi.py File "lesson6-multi.py", line 71 ix = image.size[0] ^ TabError: inconsistent use of tabs and spaces in indentation
バグ2
exsampleにあった画像ファイルをもってくる。
$ python lesson6-multi.py Hit ESC key to quit. Checking for extension support Using OpenGL v1.3 built-in multi-texture support Traceback (most recent call last): File "lesson6-multi.py", line 271, in <module> main() File "lesson6-multi.py", line 263, in main InitGL(640, 480) File "lesson6-multi.py", line 119, in InitGL LoadTexture('Wall.bmp') File "lesson6-multi.py", line 69, in LoadTexture image = Image.open(name) File "/media/mint/85f78c06-a96e-4020-ac36-9419b7e456db/mint/root/tools/pyenv/3.6.1/venv/game/lib/python3.6/site-packages/PIL/Image.py", line 2477, in open fp = builtins.open(filename, "rb") FileNotFoundError: [Errno 2] No such file or directory: 'Wall.bmp'
バグ3
Traceback (most recent call last): File "_ctypes/callbacks.c", line 234, in 'calling callback function' File "lesson6-multi.py", line 175, in DrawGLScene glMultiTexCoord2f(GL_TEXTURE0_ARB, 0.0, 0.0); glMultiTexCoord2f(GL_TEXTURE1_ARB, 0.0, 0.0); glVertex3f(-1.0, -1.0, 1.0) # Bottom Left Of The Texture and Quad NameError: name 'GL_TEXTURE0_ARB' is not defined
コードをみるとAPIのサポートチェックしているらしい箇所があった。グラフィックカードが対応していないとかそういうことか?諦めるしか無さそう。
lesson16.py
ここまでで行ったPIL関係の修正をすると動かせた。
$ python lesson16.py Hit ESC key to quit.
lesson19.py
- PIL関係の修正
- 除算結果のint化
before
prts[i].R=colors[i*(12/1000)][0] prts[i].G=colors[i*(12/1000)][1] prts[i].B=colors[i*(12/1000)][2]
after
prts[i].R=colors[i*int(12/1000)][0] prts[i].G=colors[i*int(12/1000)][1] prts[i].B=colors[i*int(12/1000)][2]
myfire.jpg
という画像ファイルは存在しなかった。
https://github.com/lhl/vrdev/tree/master/002-pyopengl/PyOpenGL-Demo-3.0.1b1/PyOpenGL-Demo/NeHe
ググったらgithubにあったのでダウンロードした。色々雑なDemo。
$ python lesson19.py Hit ESC key to quit. other commands: WASD (direction) ZX (zoom)
実行時エラー。
Traceback (most recent call last): File "_ctypes/callbacks.c", line 234, in 'calling callback function' File "lesson19.py", line 196, in keyPressed key = string.upper(key) NameError: name 'string' is not defined
# key = string.upper(key)
key = key.upper()
エラーは出なくなったが、キーを押下しても何も反応しない……。
lesson23.py
- PIL関係の修正
$ python lesson23.py Hit ESC key to quit.
立方体が動き、画像を屈折させている?
lesson26.py
インデントがハードタブになっている。Demoソースコードの中にはインデントがタブのものとスペースのものが混在している。最悪。
lesson41.py
lesson45.py
所感
まだ途中だったが、PCがフリーズして全コードが吹っ飛んだので終了……。