chaos with coffee

A blog loved chaos.

slowFastRendering

oFのサンプル勉強 2つ目

slowFastRendering
座標が変化する大量のパーティクルのレンダリングを行う。
また複数レンダリング手法での速度を比較をしている。

遅め : OpenGLのglVertex2f
→頂点ひとつ一つを描画
高速 : 頂点配列
→配列に頂点を設定し一括で描画
非常に高速 : VBO (頂点バッファオブジェクト)
→あらかじめ頂点データをOpenGL側に作成しておき、グラフィクスカード側で演算を行う手法

□やってること
・座標移動パラメーターの「speeds」を変化させ、パーティクルの座標「points」に加算し動きを表現している。

 y座標の移動
 speeds[i].y += 0.04; // some grav

 減速
 speeds[i] *= 0.98;
 →x、y両方に?


□学んだこと
・points.size()でパーティクルの数(配列の要素数)を取得できる。
・ofVec2fクラスの変数同士だとx、yを意識することなく+-できる。

・if(points[i].x > ofGetWidth()) points[i].x = 1;
 画面領域を超えた時の設定。
 移動パラメーターはspeeds変数で更新しているため、pointsをリセットできる。


□疑問点
vector <ofVec2f> speeds;
の変数宣言の仕方が見慣れない


□課題
・ofVec2fクラスの関数の内部処理
 mouseVec.length()
 mouseVec.normalize();

 ノーマライズについて
 http://of.studio23c.com/index.php/archives/256

・頂点配列、VBOに関し理解を深める

pointPickerExample

初めの数回はoFのサンプルを読み解くことを課題にしたいと思います。

第一回はpointPickerExample

□やってる事
・ply形式のポリゴンデータを読み、ofMeshクラスのメソッドで頂点と頂点間を線で結び表示。
・ofEasyCamクラスを使っているので、cam.begin()とcam.end()の中で書かれた対象をカメラ視点で見れる。マウスのドラックで視点変更もできる。
・ポリゴンデータの頂点座標とマウス座標の距離をひとつずつみていき、一番距離が近い頂点座標を顕示。

□課題
・ofMesh、ofEasyCamのコアロジックの確認
・worldToScreenでやろうとしていること

ofVec3f cur = cam.worldToScreen(mesh.getVertex(i));

(「世界座標系からスクリーン座標系へ変換」という記述が他のブログにあったので、それをヒントに自分の言葉で)

しかし30行ほどで書けば、これらの機能を実現できるoFのポテンシャルはスゴい。。