最近になってまた少し寒くなってきましたが、、「もっと熱くなれよっっ!」と思うこの頃。
前からOpenGLの勉強を少しずつ積み重ねていたので、今までDirectX一辺
倒で制作していましたが今回少しだけOpenGLのプログラムを組んでみることに
しました。とりあえず頂点バッファの実装まで出来て、思うことがあったので、
そのことについてのメモを残しておきます。
インディーズデベロッパの方の多くがDirectXでの開発なのではないかなと推測して
いるのですが、それの大きな原因となっているのがOpenGLはDirectXと
比べてより低レベル実装なAPIであるということなんだと思っています。具体的には
D3DXのようなヘルパー関数が標準で実装されていなかったり、デフォルトの
描画処理周りがスタック構造になっている、等など。
ヘルパー関数についてはDirectXで自作実装していれば容易にそこから持って
これそうですが、DirectXが左手座標系なのに対してOpenGLは右手座標系
ですから、そのあたりでやっぱり少し面食らう訳なのです。
「OpenGLでも作ってみたいけど、色々と面倒そうだし資料少ないし実際
DirectXと変らないでしょ?」という感じでそのままDirectXの制作に戻る
のも頷けます。自分もそうでした笑。
ただ色々とOpenGLを調べてみると、低レベルAPIであるおかげでDirectXでは
触ることすら許されない部分が自分でカスタマイズできるという利点もある訳です。
例えばOpenGLだと頂点バッファをそれぞれ座標用バッファ、法線バッファ、UV
バッファのように分離してそれぞれを指定して描画ができます。
ここから何ができるのかというと、以前制作したボクセルは必ず頂点位置が一定
間隔でスナップするので、頂点座標のバッファはリサイクルできるわけなのです!
DirectXだとリサイクルしようにもUV等の他の共有できない情報が邪魔してしまう
のですが、OpenGLだとそれが可能になります。これは嬉しい。
他にもトライアングルストリップの他にクアッドストリップ(トライアングルストリップ
の4角ポリゴン版)等があったりと、DirectXでこれあったらいいなと思っていた機能が
ちらほらある感じで、3DソフトでOpenGLを使っているものが多いのが何故なのか
妙に頷けるような気がしました。どうでしょう、OpenGL触りたくなったでしょう?笑
追加:
よくよく考えて後から調べてみると、DirectXでもSetStreamSource()の
ストリーム番号を指定することで複数バッファで描画できるということを知りました。
あらら、自分の無知を晒してしまいました。。まだまだDirectXでも新しい発見が
ありそうですね、頑張ろう!
たけなか 2011.03.18-02:22 Edit
まぁ、達者なプログラマの方は
「時代はCUDAでGPU直叩きだよねぇ~」
なんて云いそうですが;
そんなハイレベルな話は自分にはまだまだ先ですね。