2015年2月18日水曜日

uniform block のサンプル

OpenGL Super Bible 6th Edition にはサンプルプログラムがいっぱいついているけど、それでも解説されていることに対応するサンプルがけっこうないことに気づいてきた。なのでいくつか自分で作ってみている。
https://github.com/orchely/cg_lesson/tree/master/opengl

uniform block もそうしたサンプルがないもののひとつ。

There is a complete example of the alignments of various types in the original ARB_uniform_buffer_object extension specification.
とあるだけでサンプルプログラムはついていない。一応そのドキュメントのサンプルを動かしてみることはできたけど、OpenGL 2.x 時代のサンプルでいろいろ今と違うし、uniform block の使い方も少し違うので今風に書き直してみた。
https://github.com/orchely/cg_lesson/blob/master/opengl/11_uniform_block_std_layout/uniform_block_std_layout.cpp?ts=4

まだ OpenGL 自体がよくわかっていないので試行錯誤したけど、なんとかそれっぽく動いた。もとのサンプルでは

        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        gluPerspective(60.0, wf/hf, 0.1, 100.0);
となっていたところを
 projection_matrix = glm::perspective(60.0f, 4.0f / 3.0f, 0.1f, 100.0f);
ではなく
 projection_matrix = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.0f);
にしないといい感じにならなかったのかはよくわかっていない。

ちなみに行列計算には Super Bible 付属のライブラリではなく、この本を卒業したあとも使い続けられそうな GLM を使いました。

0 件のコメント:

コメントを投稿