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>" の定数が定義されています。詳しくはモジ
ュールのソースファイルをご覧ください。
