============ Vertex Array ============ ここまではglVertexで三角形を描画してきたが、ここで配列からデータ投入して連続した三角形を描画する方法を導入する。 頂点データを格納した配列を頂点配列(VertexArray)と呼ぶ。 VertexArrayクラス ================= :download:`vertexarray` .. literalinclude:: vertexarray.py 頂点配列の保持と描画はこれだけで、むしろ glBegin()~glVertex()~glEnd() の呼び出しよりシンプルなくらいになる。 問題は、如何にこの配列にデータを満たすのかということになる。 Vertex(頂点) ============ OpenGLの頂点について軽く説明。 OpenGLの頂点は、三次元空間上の座標をもった点で座標以外にも複数の属性を持つことができる。以下、各属性について 位置属性 -------- 必須の属性で(x, y, z, w)。三次元の同次座標表現(アフィン変換用)となっている。 モデルビュー座標を操作している間は、基本的にw=1なのでw値を意識する必要は無い。 透視投影で遠近感の処理をするときに、wが1以外になる。視点から遠い点ほどwが大きくなるように仕込んでから、wが1になるように(x, y, z, w)をわる(同時座標の正規化)ことで遠近感を表現することができる。 色属性 ------ 頂点カラー。隣の点と色が違う場合にグラデーションを作れる。 UV属性 ------ UV座標。テクスチャを貼るときに使う。 頂点配列で立方体を作る ====================== サンプルとして頂点配列で立方体を描画する。 立方体は、各面に2つずつ三角形が含まれるので12の三角形を含む。 glVertexだと36回呼び出しが必要となる(GL_TRIANGLESを使う場合)ところを、 頂点配列を使ってサクッと描画する。 面倒なところが、描画時から初期化時に移ることになる。 :download:`Cube.py ` .. literalinclude:: Cube.py