ニートが頑張るブログ

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

ハッタリテクスチャー

今日はテクスチャについて本気出して考えてみました.

例えばこういう画像をフラッシュ上で
↓こんな風に変形させるのはニートにも出来ます.

これはアフィン変換ってやつで,
平行線は平行であることを維持して変形する奴のことです.

でもこれがパースをかけた↓このような変形になった途端に
自分には手がおえなくなります.平行線が平行ではなくなってますね.
というかこの変換ParaFlaで出来るのか?


そこで四角形を二つの三角形に分けで変形させることにしました.
マウスで数字をドラッグすると画像をフニフニできます.

これでアフィン変換しか出来ないニートにもしょぼ目ながら3DCGに
テクスチャが貼れるようになったわけです.(全部三角ポリゴンにすれば)

というかメタセコイアの表示方法を「ソフトウェア」にしたら
テクスチャ表示がまんまこうなってました.メタセコイアお前もか!

このやり方は結構メジャーなのだろうか.
でもノウハウは調べても全然見つからなかったので (三角形 アフィン変換 テクスチャ)
結局フラッシュでの実現方法を自分で考えてみました.

今MCの中に←こんな感じのMCがあります.名前はsankaku
画像の中心点は90度の頂点です.
one,two,threeってのが↑のフラッシュでドラッグできる点です.
_x = _root.one._x;
_y = _root.one._y;

中心点を1の点に移動.
xx = _root.two._x - _x;
yy = _root.two._y - _y;
d1 = Math.sqrt(xx*xx+yy*yy);
rot1 = (180/Math.PI) * Math.atan2(yy,xx);
xx = _root.three._x - _x;
yy = _root.three._y - _y;
d2 = Math.sqrt(xx*xx+yy*yy);
rot2 = (180/Math.PI) * Math.atan2(yy,xx);

2の点と3の点への角度と距離を計算.
sa = rot2 - rot1;
if(sa <-180){sa += 360;}
if(sa > 180){sa -= 360;}

角度差を丸める.アホい.
_rotation = rot1 + sa/2;
これで底辺が 2の点と3の点の中間を向きます.
_yscale = Math.tan( ( sa /360 )* Math.PI)*100;
これで角度はOK.
180じゃなくて360なのは半角のラジアンを出すため.
あとは内部ののスケールをいじると頂点を通ってくれます.
aho = Math.sqrt(100*100+_yscale*_yscale);
sankaku._xscale = d1*700/aho;
sankaku._yscale = d2*700/aho;

なぜここでマジックナンバーが出てくる!
いい加減にしろよ糞ニート!


我ながら無茶苦茶ムダが多いと思います.
もっとエレガントにスマートに出来ないんでしょうかねコレ.誰か教えて.
変形しちゃってから視点が固定のゲームならともかく,(バイオ?)
リアルタイムで視点が動く3Dのゲームとか作ったらどうなってしまうのか?

 

しっかし調べてみると昔のゲームは結構これやってるみたいですね.


これはグーグル先生で拾った天誅弐の画像だけど分かりやすい例ですね
今思うと,天誅とかのテクスチャがぐにゃ~ってなってたのは
こういう事だったんですねー.

これも凄い分かりやすい例.↓こうやって補助線を引いてみると
天誅がどんな風にテクスチャを貼っていたのかよく分かります.


あとFlashの3Dライブラリの「Papervision3D
もこのやりかたなんじゃないの!?
apervision3D Panorama
この歪み方...間違いない!
てかこれパノラマ画像だからカメラが移動しない限り
前後を考えず同じ画像の変形だけで良いのか.
んで部屋の構造を無視した直方体の中に貼り付けてるだけで
それらしく見えるのね.
頑張ればニートでも作れるかもね.無理無理.

関連記事
[ 2008/12/08 20:20 ] ニートメソッド | TB(0) | CM(0)
コメントの投稿












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

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