# 39.8. `gl` --- Graphics Library インターフェース

バージョン 2.6 で非推奨: `gl` モジュールは Python 3 で削除されました。

このモジュールは Silicon Graphics の Graphics Library へのアクセスを提供します。 Silicon Graphics マシン上だけで利用可能です。

警告

GL ライブラリの不適切な呼び出しによっては、Python インタープリタがコアダンプすることがあります。特に、GL のほとんどの関数では最初のウィンドウを開く前に呼び出すのは安全ではありません。

このモジュールはとても大きいので、ここに全てを記述することはできませんが、以下の説明で出発点としては十分でしょう。 C の関数のパラメータは、以下のような決まりに従って Python に翻訳されます:

- 全ての (short、long、unsigned) int は Python の整数に相当します。

- 全ての浮動小数点数と倍精度浮動小数点数は Python の浮動小数点数に相当します。たいていの場合、Python の整数も使えます。

- 全ての配列は Python の一次元のリストに相当します。たいていの場合、タプルも使えます。

- 全ての文字列と文字の引数は、Python の文字列に相当します。例えば、 `winopen('Hi There!')` と `rotate(900, 'z')` 。

- 配列である引数の長さを特定するためだけに使われる全ての (short、long、unsigned) 整数値の引数あるいは返り値は省略されます。例えば、C の呼び出しで、

      lmdef(deftype, index, np, props)

  これは Python では、こうなります。

      lmdef(deftype, index, props)

- 出力のための引数は、引数のリストから省略されています；代わりにこれらは関数の返り値として渡されます。もし 1 つ以上の値が返されるのなら、返り値はタプルです。もし C の関数が通常の返り値 (先のルールによって省略されません) と、出力のための引数の両方を取るなら、返り値はタプルの最初に来ます。例：C の呼び出しで、

      getmcolor(i, &red, &green, &blue)

  これは Python では、こうなります。

      red, green, blue = getmcolor(i)

以下の関数は一般的でないか、引数に特別な決まりを持っています:

`gl.``varray`(argument)

  `v3d()` の呼び出しに相当しますが、それよりも速いです。 argument は座標のリスト (あるいはタプル) です。各座標は `(x, y, z)` あるいは `(x, y)` の座標のタプルでなければなりません。座標は 2 次元あるいは 3 次元が可能ですが、全て同次元でなければなりません。ですが、浮動小数点数と整数を混合して使えます。座標は (マニュアルページにあるように) 必要であれば `z = 0.0` と仮定して、常に 3 次元の精密な座標に変換され、各座標について `v3d()` が呼び出されます。

`gl.``nvarray`()

  `n3f` と `v3f` の呼び出しに相当しますが、それらよりも速いです。引数は法線と座標とのペアからなるシーケンス (リストあるいはタプル) です。各ペアは座標と、その座標からの法線とのタプルです。各座標と各法線は `(x, y, z)` からなるタプルでなければなりません。3 つの座標が渡されなければなりません。浮動小数点数と整数を混合して使えます。各ペアについて、法線に対して `n3f()` が呼び出され、座標に対して `v3f()` が呼び出されます。

`gl.``vnarray`()

  `nvarray()` と似ていますが、各ペアは始めに座標を、 2 番目に法線を持っています。

`gl.``nurbssurface`(s_k, t_k, ctl, s_ord, t_ord, type)

  nurbs (非均一有理 B スプライン) 曲面を定義します。 `ctl[][]` の次元は以下のように計算されます： `[len(s_k) - s_ord]` 、 `[len(t_k) - t_ord]` 。

`gl.``nurbscurve`(knots, ctlpoints, order, type)

  nurbs (非均一有理 B スプライン) 曲線を定義します。 ctlpoints の長さは、 `len(knots) - order` です。

`gl.``pwlcurve`(points, type)

  区分線形曲線 (piecewise-linear curve) を定義します。 points は座標のリストです。 type は `N_ST` でなければなりません。

`gl.``pick`(n)
`gl.``select`(n)

  これらの関数はただ一つの引数を取り、pick/select に使うバッファのサイズを設定します。

`gl.``endpick`()
`gl.``endselect`()

  これらの関数は引数を取りません。 pick/select に使われているバッファの大きさを示す整数のリストを返します。バッファがあふれているのを検出するメソッドはありません。

小さいですが完全な Python の GL プログラムの例をここに挙げます：

    import gl, GL, time

    def main():
        gl.foreground()
        gl.prefposition(500, 900, 500, 900)
        w = gl.winopen('CrissCross')
        gl.ortho2(0.0, 400.0, 0.0, 400.0)
        gl.color(GL.WHITE)
        gl.clear()
        gl.color(GL.RED)
        gl.bgnline()
        gl.v2f(0.0, 0.0)
        gl.v2f(400.0, 400.0)
        gl.endline()
        gl.bgnline()
        gl.v2f(400.0, 0.0)
        gl.v2f(0.0, 400.0)
        gl.endline()
        time.sleep(5)

    main()

参考

PyOpenGL: The Python OpenGL Binding

  OpenGL へのインタフェースが利用できます； 詳しくは PyOpenGL プロジェクト http://pyopengl.sourceforge.net/ から情報を入手できます。これは、SGI のハードウェアが1996 年頃より前である必要がないので、 OpenGL の方が良い選択かもしれません。

# 39.9. `DEVICE` --- `gl` モジュールで使われる定数

バージョン 2.6 で非推奨: `DEVICE` モジュールは Python 3 で削除されました。

このモジュールには、Silicon Graphics の Graphics Library で使われる定数が定義されています。これらは C のプログラマーがヘッダーファイル `<gl/device.h>` の中から使っているものです。詳しくはモジュールのソースファイルをご覧ください。

# 39.10. `GL` --- `gl` モジュールで使われる定数

バージョン 2.6 で非推奨: `GL` モジュールは Python 3 で削除されました。

このモジュールには Silicon Graphics の Graphics Library で使われる C のヘッダーファイル `<gl/gl.h>` の定数が定義されています。詳しくはモジュールのソースファイルをご覧ください。