ニートが頑張るブログ

ニートが現実逃避するために創作活動など色々とカオスに頑張ってみる
ニートが頑張るブログ TOP  >  ニートメソッド >  ルールXYZ

ルールXYZ

今月のカレンダー人生オワタ ...のようなもの
 ┏(^o^ )┛三
   ┏┗  三


Flashで3D表現をしてみようと思います.ParaFlaで.それも0から.
というかニート製の3Dライブラリ的なモノを作ろう.
なんでかというと便利なライブラリを使う脳がないから.

今まで作ってきた物(アクションゲームとかラミフラ)には,
軸回転のような概念がなく,パースもなかったのです.だから疑似3D
なんでかというと本気で3Dについて考えたことがなかったから.
んで,自分なりに勉強してみました.

とりあえず_rootでXYZ軸の回転を管理.
X軸
Xsin=Math.sin((Xrot/ 180)* Math.PI);
Xcos=Math.cos((Xrot/ 180)* Math.PI);
Y軸
Ysin=Math.sin((Yrot/ 180)* Math.PI);
Ycos=Math.cos((Yrot/ 180)* Math.PI);
Z軸
Zsin=Math.sin((Zrot/ 180)* Math.PI);
Zcos=Math.cos((Zrot/ 180)* Math.PI);

これに応じて各座標を変換マトリックスにかけます.
マトリックス?なにそれ映画?
というわけで足し算とかけ算レベルで座標変換してみます.
座標入力例
rx =100;
ry =100;
rz =100;
X軸回転
xx = rx;
xy = ry*_root.Xcos + rz*_root.Xsin;
xz = -ry*_root.Xsin + rz*_root.Xcos;
Y軸回転
yx = xx*_root.Ycos - xz*_root.Ysin;
yy = xy;
yz = xx*_root.Ysin + xz*_root.Ycos;
Z軸回転
zx = yx*_root.Zcos + yy*_root.Zsin;
zy = -yx*_root.Zsin + yy*_root.Zcos;
実際に移動
_x = zx;
_y = -zy;


自分の変数名の付け方ってこんな感じです.
こんだけのテキトーさでなんか出来ました.
方向キーでグリグリします.



なんか最初にかけてるX軸回転以外は
軸にそって回転してないですね.
当たり前といえば当たり前ですがイメージ狂います.
あとパースがかかってないのでなんか3Dって感じが出ないですね.

というわけで遠近感についても考えてみます.
物は目から二倍遠ざかれば半分の大きさになる気がする.
え,じゃあ割ればいいの?
目からの距離に応じて拡大縮小
zz = 200/(300+yz);
_xscale =_yscale = 100*zz;
実際に移動
_x = zx*zz;
_y = -zy*zz;


超単純.遠近感ってこういうことだったのかよ!
最後の2行をこうしただけでパースのようなものがかけられました.
300ってのが視点から原点までの距離です.
200はテキトーに決めた数字.こんなんでいいのだろうか.
マウスでもグリグリします.



今回はこんな感じです.
ここまで出来れば応用でなんぞ作れそうな予感がします.

追記
ややこしいのでZ軸回転を固定しました.
Z軸の回転なら,_rootの_rotationを弄れば良いだけだし.
メタセコのインターフェースまんまですね.
swapDepths( 300-yz );
これでZ方向の前後関係もバッチリです.

関連記事
[ 2008/11/30 13:31 ] ニートメソッド | TB(0) | CM(0)
コメントの投稿












管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL

月別カレンダー
07 ≪│2017/08│≫ 09
- - 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 - -