PHP で 3D plot
GIF 画像合成では減色処理が必要になるので、減色アルゴリズムの検証として
色んな画像ファイルに対して、 R,G,B ヒストグラムを 3D にマッピングしてみようかと、
軽く 3D plot 処理を考えていたところ、以下の PHP ライブラリを紹介してもらいました。
早速実験。
$x_axis = $world->createObject('cube', array(128, 4, 4)); $x_axis->setColor(new Image_3D_Color(255, 100, 100)); $x_axis->transform($world->createMatrix('Move', array(64, 0, 0))); $y_axis = $world->createObject('cube', array(4, 128, 4)); $y_axis->setColor(new Image_3D_Color(100, 255, 100)); $y_axis->transform($world->createMatrix('Move', array(0, 64, 0))); $z_axis = $world->createObject('cube', array(4, 4, 128)); $z_axis->setColor(new Image_3D_Color(100, 100, 255)); $z_axis->transform($world->createMatrix('Move', array(0, 0, 64)));
うーん。とりあえず軸を書いてみたのですが、使うのめんどいし、
スケールが把握できないです。。(64 の値は探って見つけた値。。)
線(という考え自体ダメダメですが ^^;)をひくにも、ココからココって
指定できなくて、物体を置いた後に移動(必要なら回転も)しなきゃだし。
そもそもオーバースペックな感じがします…
自分で作っちゃえ
イメージ図。(図の d は微分ではなく、distance の頭文字です。ごめんなさい)
簡単なグラフを書くのが目的なので、
- ワイヤーフレームのみで Zバッファ無し
- 座標変換は世界座標へのオイラー角回転のみ
- カメラ位置決めうち = (0, 0, $distance_to_eye)
- その他、一般的な 3D API は殆ど(一切といっていいかも)無し
という究極の手抜きっぷりの簡易3Dライブラリを作ってみました。
仕様は↓こんな感じ。
- スケールは全て pixel 単位
- モニタ表面から自分の目までの物理距離は明示的に指定
- 画像の中央を (0, 0, 0) の原点として計算する
- x軸は右方向、y軸は上方向、z軸は手前方向。(右手座標系)
- 一応、原点を中心とした回転は出来る。(x軸, y軸, z軸 の順で適用)
- 任意の色で点を打てる。任意の色で線が引ける
自分の用途にはこれで十分。これ位なら 30分で作れますし。:-)