やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

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
    • Python 3.6.1
      • PyOpenGL (3.1.0)
      • PyOpenGL-accelerate (3.1.0)
      • PyOpenGL-Demo (3.0.0)
      • numpy (1.13.1)
      • Pillow (4.2.1)
      • pygame (1.9.3)
      • pgu (0.18)

前回まで

今回は前回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.
#    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.

f:id:ytyaru:20170716152222p:plain

立方体の各面に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.

f:id:ytyaru:20170716155336p:plain

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

エラーは出なくなったが、キーを押下しても何も反応しない……。

f:id:ytyaru:20170716161013p:plain

lesson23.py

  • PIL関係の修正
$ python lesson23.py 
Hit ESC key to quit.

立方体が動き、画像を屈折させている?

f:id:ytyaru:20170716161712p:plain

lesson26.py

インデントがハードタブになっている。Demoソースコードの中にはインデントがタブのものとスペースのものが混在している。最悪。

lesson41.py

lesson45.py

所感

まだ途中だったが、PCがフリーズして全コードが吹っ飛んだので終了……。