◎実装◎
これで実装すると、かなり楽ちんだった。
基本クラスは、マトリクスとenumで図形タイプを持つだけ。
メンバ関数は、set/getPosition/Rotation/Scale()といった汎用操作を準備しておく。
中身はほとんどマトリクスクラスの同名関数を呼ぶだけ。
汎用操作といっても、子クラスのほとんどで活用されるから、無駄な関数はそんなにない。
子クラスは、基本クラスが持っている関数の変名をするくらい。
例えば円柱クラスなら、親クラスのsetScaleZ()をsetHeight()という名前で使えるようにする。
図形の体積を計算するのも簡単で、基本形の体積を定数で持っているだけで良く、
それにスケールXYZを掛ければ直ちに求められる。
各点の座標も、基本形の座標にマトリクスを掛ければいい。
例えば円柱の底面の座標なら、fdVector(0.f, 0.f, -1.f) にマトリクスを掛ければ出る
◎その他◎
一応、直方体を曲げて平行四辺形柱にしたいということもできる(マトリクスのyx,yy,yz成分だけ直に指定して、座標軸が直交していない形にすればいい)
カバーしきれないこともある。
例えば扇形の中心角を変えたいとか
三角柱の底面の三角形の形を自由に変えたいとか(二等辺三角形までなら可)
そういうのは別で汎用変数の領域を用意する必要がある。
三角柱も用意した。使うかどうか分からないけど。
普通は円錐や円柱を使うよね。
◎メモ◎
英名
角柱:prism
三角柱:triangular prism
四角柱:quadratic prism
円柱:cylinder / column
角錐:pyramid
三角錐:triangular pyramid
六角錐:six-sided pyramid
円錐:cone
多面体:polyhedron
四面体:tetrahedron
六面体:hexahedron
八面体:octahedron
十二面体:dodecahedron
二十面体:icosahedron
PR