本文へスキップ

タグ

CG - Computer Graphics

23件の記事(2ページ目)

Python3で始めるOpenGL4

PythonでモダンなOpenGLが使える。この感動を伝えるために筆を取りました。この連載ではPythonによってVAOなど、OpenGLのモダンな機能の説明をコードを交えてできるだけわかりやすく説明していきます。今回は第1回ということで、その紹介や環境構築をメインにし、最後にプログラムを書いて自分のパソコンが対応しているOpenGLのバージョンを表示します。ちなみにGLUTではなく、コンテキストなど設定できるGLFWを使用します。

FBX SDK準備編 – ファイルからデータを取得しよう

今回からFBX SDKを使ってfbxファイルからデータを取得していきます。 fbxファイルはAutodesk社が管理するもっとも有名な3Dファイル形式の1つです。 取得するデータとしては頂点インデックス、頂点座標、法線、テクスチャ座標(uv)、ボーンインデックス、ボーンウェイトなどを取得していきます。

頂点配列とVBO

OpenGL、GLSLではGPUにデータを送る効率を上げるためにVBOという仕組みが用意されています。今まではglBegin()、glVertex3f()関数などでGLSL側にデータを送ってきました。前にも言いましたがglBegin()などはすでに廃止や廃止予定となっています。これらの関数で描画すると非常に遅いです。頂点のみをattribute変数としてGLSLに送りますが、法線や色、uvなどの情報も頂点と同様の方法で送ることができます。今回の内容まででかなり効率的なプログラムを作れるようになったと思います。ちなみにvao(Vertex Array Object)という言葉があって非常に紛らわしいのですが、これはvboの仲間や別機能ではなく、vboをカプセル化するためのものです。

glmを使った投影法と視点変換

OpenGLを用いてレンダリングを行う際、レンダリングされる物体やカメラを移動させるときは行列計算を用います。行列計算は自分でC++で書くこともできますが、すでに行列計算を補助してくれるGLM(OpenGL Mathematics)があるのでそちらを使いましょう。

GLSLシェーダーを触ってみよう

OpenGL2.1とGLSLを使用してレンダリングを行う方法を解説します。GLSLサンプルコードを用いてポリゴンを描画します。OpenGLが世界を描画するにあたって、描画までの一通りの流れをパイプラインといいます。バーテックスシェーダは頂点ごとに実行されます。フラグメントシェーダはピクセルごとに実行されます。

GLFWでウィンドウを表示する

OpenGLで描画を行うにあたり、GLUT(またはFreeGLUT)でも別にいいのですが、GLUTは若干直感的でないですし、コンテキスト関連の理解がしにくいですし、メンテナンスされていないのはそれなりの理由があるということでGLFWを使っていきます。GLFWのほうがメンテナンスもされていて高機能です。

OpenGLを使うとき知っておくと便利な基礎知識

あまり長々と歴史とか仕組みの説明をしていたら眠くなってしまいますから、やりたくないのですが、この辺は僕が独学で進めていくうちに非常に躓いたところなので説明しなければならないと思います。 それでもできるだけ簡潔な説明をするように努力します。 すべてを理解する必要はありませんが、全体像は知っておいたほうがいいと思うので第1回にまとめておきます。 1回目は流し読みくらいでもいいです。 これから先のページに進むにつれて、OpenGLの理解が深まってくると思うので、その時にまた読み直してください。