タイトルの通り、3Dで弾の尾を引くようなエフェクトを作りたいのですが、作り方が分からず困っています。
とりあえず毎回弾の座標を保存し、カプセルを描写して線っぽくしようとしたのですが、重くなったため断念、
カプセルの代わりにビルボードで白丸を描写してみたのですが、間が空きすぎて線に見えず断念しました。
どなたかアドバイスをいただけるとありがたいです。
3Dで弾の尾を引くようなエフェクト
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 3Dで弾の尾を引くようなエフェクト
座標を何フレームか置きに覚えて、その間を加算半透明の十字(四角系が垂直に交わったもの)で結んでやれば光の線に見えるのでは?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 3Dで弾の尾を引くようなエフェクト
十字で結ぶとはどのようにしたらよいでしょうか?
DrawModiBillboard3Dを使えば二点間を結ぶように画像が変形できるかなと思ったのですが、どうやらこれではだめだったようで・・・
申し訳ありませんが、二点間を結ぶ画像(またはモデル)の表示方法を教えていただけるとありがたいです。
DrawModiBillboard3Dを使えば二点間を結ぶように画像が変形できるかなと思ったのですが、どうやらこれではだめだったようで・・・
申し訳ありませんが、二点間を結ぶ画像(またはモデル)の表示方法を教えていただけるとありがたいです。
Re: 3Dで弾の尾を引くようなエフェクト
前座標 x',y',z'
現座標 x,y,z
たとえばこの二つの座標をDrawLine3Dで結び、座標が更新される度に結んでいけば軌跡が線で描けますよね?
線では味気ないでしょうからポリゴンにすればいいです
ソフト屋さんのいう十字とはポリゴンを作ってクロスさせろって話でしょう。
DXライブラリならDrawPolygon3Dで可能だと思います。
現座標 x,y,z
たとえばこの二つの座標をDrawLine3Dで結び、座標が更新される度に結んでいけば軌跡が線で描けますよね?
線では味気ないでしょうからポリゴンにすればいいです
ソフト屋さんのいう十字とはポリゴンを作ってクロスさせろって話でしょう。
DXライブラリならDrawPolygon3Dで可能だと思います。
✜ で C ご ✜
: す + 注 :
¦ か + 文 ¦
: ? Is the は :
✜ order C++? ✜
: す + 注 :
¦ か + 文 ¦
: ? Is the は :
✜ order C++? ✜
糸冬
――――――――
制作・著作 NHK
――――――――
制作・著作 NHK
Re: 3Dで弾の尾を引くようなエフェクト
まだ改良中ですが、このようにしてみました。
efe_kisekiは弾の軌道の座標を保存しています。point_vは弾そのものの座標です。
いまのところ毎フレームごとに座標保存しているので尾が短く、全然尾を引くような形になっていないのですが、
たとえば10フレームごとに座標を保存する場合、座標保存変数aと実際に線を引く座標の変数bの二種類用意して、
10fの間にbをa[n]からa[n-1]へ移動させる、といった形で大丈夫なのでしょうか。
ご指摘の程よろしくお願いいたします。
efe_kisekiは弾の軌道の座標を保存しています。point_vは弾そのものの座標です。
//軌跡をたどるエフェクト
for(j=1;j<100;j++) efe_kiseki[i][j] = efe_kiseki[i][j-1];
efe_kiseki[i][0] = point_v[i];
//軌跡エフェクト
for(j=0;j<100-1;j++){
ver[0].pos = VAdd(efe_kiseki[i][j], VGet( 0.0f, 20.0f, 0.0f ));
ver[1].pos = VAdd(efe_kiseki[i][j], VGet( 0.0f, -20.0f, 0.0f ));
ver[2].pos = VAdd(efe_kiseki[i][j+1], VGet( 0.0f, 20.0f, 0.0f ));
ver[3].pos = VAdd(efe_kiseki[i][j], VGet( 0.0f, -20.0f, 0.0f ));
ver[4].pos = VAdd(efe_kiseki[i][j+1], VGet( 0.0f, 20.0f, 0.0f ));
ver[5].pos = VAdd(efe_kiseki[i][j+1], VGet( 0.0f, -20.0f, 0.0f ));
for(z=0;z<6;z++) ver[z].dif = GetColorU8( 255, 0,255,255 );
DrawPolygon3D( ver, 2, DX_NONE_GRAPH, FALSE );
}
たとえば10フレームごとに座標を保存する場合、座標保存変数aと実際に線を引く座標の変数bの二種類用意して、
10fの間にbをa[n]からa[n-1]へ移動させる、といった形で大丈夫なのでしょうか。
ご指摘の程よろしくお願いいたします。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 3Dで弾の尾を引くようなエフェクト
[0]には毎フレーム代入して、[1]~[99]のシフトを別変数でフレームカウントして10フレーム毎に行うだけで良いと思います。
そうすれば[1]~[99]には10フレーム毎の値が入ることになります。
※ 10フレームが良いかはトライして決めて下さい。
こんな感じです。 あと後ろに行くほど透明度等を変えたほうが良いでしょう。
そうすれば[1]~[99]には10フレーム毎の値が入ることになります。
※ 10フレームが良いかはトライして決めて下さい。
こんな感じです。 あと後ろに行くほど透明度等を変えたほうが良いでしょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。