忍者ブログ
  • 2024.04
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 2024.06
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

【2024/05/03 08:01 】 |
fdFigure3D
3D図形を扱うクラス。

どの図形でもできるだけ内部表現を同じにしてみたくて、
マトリクスで表すようにしてみた。


◎概要◎
どの図形も、基本形を決めておく。
 例えば球なら、原点中心、半径1の球。
 例えば円柱なら、原点中心、半径1、高さが2でZ方向に立っている円柱。(Z=1が天板、Z=-1が底面)
で、形を変えるときは、マトリクスを拡大縮小する。
 球なら、スケール値がそのまま半径になる。xyzで別々のスケールを掛ければ楕円球になる。
 円柱なら、xyが底面の形を変え、zスケールが高さを変えることになる。
多くの図形はこれで事足りる。
移動や回転ももちろんマトリクスで普段通りやれば済む。


◎実装◎
これで実装すると、かなり楽ちんだった。

基本クラスは、マトリクスと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
【2011/06/28 02:07 】 | 自作エンジン | 有り難いご意見(0) | トラックバック()
<<「東洋脳×西洋脳」 | ホーム | クラス型の基本型へのキャスト>>
有り難いご意見
貴重なご意見の投稿














虎カムバック
トラックバックURL

<<前ページ | ホーム | 次ページ>>