改め Objective Technician

はぐれ技術者のやりたい放題

アンチ・OpenGL

2007-11-13 21:25:17 | プログラミング
OpenGLが分かりにくい理由。
原因はOpenGLのAPI自身にある。

そもそもオブジェクト指向の概念は現実世界をモデリングしたようなものだから、逆に計算機で現実世界を描画してCGを作ろうとする場合にはオブジェクト指向でコーディングしようとするのがすごく自然な考えのはず。

それなのに、OpenGLはオブジェクト指向はおろか構造化プログラムにも従っていない。というかOpenGLが相当昔に作られたためAPIの文法自体が古く、きれいにモジュールごとに分割されていない。まるでハードウェアをポート入出力で直接制御するような低レベル(ハードに近いという意味)なAPIに思える。1回の命令で行われるべき設定が複数回の命令に分かれていたり、かと思ったら別々の命令に分けるべきモノが1回の命令で行えたり。

OpenGLはいわゆるステートマシンになってて、ステータスを変えて処理する、という具合にプログラムを作る。例えば、物体を移動する命令はどれに対して移動するのかの指定がなくて、動かす量だけを指定する。実際に何が動くのかはそのときのステータスによって変わる。つまりオブジェクト自身が表に現れてこない。これが特に許せない。直感的に、物体を動かすときは何に対して動かすのかを同時に指定するのが普通。OpenGL自身にはこの機能がない。

だいたい、プログラミングに限らず、自分が「こんなのあったらいいなぁ」とか「こんなこと実現できないかなぁ」と思ったものは大抵、先人たちが昔にすでに考えてるもので、すでに実現されてたり研究が進んでたりする。時代の流れからして、多少の速度を犠牲にしてもOpenGLを簡単にオブジェクト指向で書けるようなクラスライブラリがあったらいいなぁと思ってたときに見つけたのがJava3Dで、これはもうオブジェクト指向の本領発揮と言わんばかりにCGがすごく作りやすい。これは内部的にOpenGLとかDirectXとかのAPIを呼び出してる。

でも、やっぱりバイトでJava使っちゃダメって言われた。
C++で使えるOpenGLを拡張したグラフィックスのオブジェクト指向ライブラリは今のところ使えるものがない。なければ作ればいいが、そんな時間と気力はない。

OpenGLで直接CG作るのなんてすごく非効率。