メモ: openFrameworksで2点を指定してofCylinderPrimitiveを描画する方法
忘れそうだったのでメモ。
端点を2点指定してその間にシリンダーを描画するサンプル。
ofCylinderPrimitiveは、デフォルトで(0,1,0)の方向に長軸が表示されるので、そのベクトルを2点を結ぶベクトルに沿うように回転させるだけ。
原理は簡単。忘れそうなのは、ofVec3fで外積を求める方法。
z.cross(v)だと、外積を返した上にzも同じ値になってしまう。外積を返すだけなら、z.getCrossed(v)。
間に余計な処理を書いたせいで、無駄に時間を食ってしまった。
void ofApp::drawCylinder2Pt(ofVec3f p, ofVec3f q, float r) { ofCylinderPrimitive cylinder; ofVec3f v = q - p; cylinder.setHeight(v.length()); ofVec3f z(0.f, 1.f, 0.f); // default cylinder direction ofQuaternion quat; quat.makeRotate(z, v); //float l = v.length(); //l = (l == 0.f) ? FLT_EPSILON : l; //ofVec3f t = z.getCrossed(v); //float angle = 180.f / PI * acos(v.dot(z) / l); //quat.makeRotate(angle, t); cylinder.setRadius(r); cylinder.resetTransform(); cylinder.rotate(quat); cylinder.setPosition((p + q)*0.5f); cylinder.draw(); }
今日の本文
明治時代に実在したイザベラバードという英国人女性が日本を旅行した旅行記をもとにした漫画。とても面白い。
原作の方も、バードおばさんが遠慮なく口が悪くて気分屋なのが面白い。
- 作者: 佐々大河
- 出版社/メーカー: KADOKAWA/エンターブレイン
- 発売日: 2015/05/15
- メディア: コミック
- この商品を含むブログ (20件) を見る
- 作者: イザベラ・バード
- 出版社/メーカー: 講談社
- 発売日: 2014/09/26
- メディア: Kindle版
- この商品を含むブログを見る