|
|
3D少女の作り方 |
| BLOG 記事検索 |
|
2009年07月09日
2009年07月08日
ドラゴンを撃ち落としたい
パーティクルについて、あたり判定が機能すればばっちりなんだが
壁あたり判定 nx,ny,nz(壁法線ベクトル)
e3=6000.0
if 壁あたった{
E3DSetParticleVel0 ti, nx*e3, ny*e3, nz*e3, nx*e3, ny*e3, nz*e3
E3DSetParticlePos ti,ax,ay,az
E3DSetParticleEmitNum ti, 5
}
バイオ5でガトリングを撃ちまくり、弾がオブジェクトに当たったとき
派手に法線の方向に火花が散っていたので
それを再現してみました。
パーティクルよりSIGデータでしたほうがよかったのですが、多く表示すると重くなりそうだったので、パーティクルに
これでドラゴンのブレストも表現できるかも。
いや、ドラゴンが出てくるのはおかしいかorz
ビルボードで弾痕、丸影を表示させたいなあ。法線関係で無理か。
壁あたり判定 nx,ny,nz(壁法線ベクトル)
e3=6000.0
if 壁あたった{
E3DSetParticleVel0 ti, nx*e3, ny*e3, nz*e3, nx*e3, ny*e3, nz*e3
E3DSetParticlePos ti,ax,ay,az
E3DSetParticleEmitNum ti, 5
}
バイオ5でガトリングを撃ちまくり、弾がオブジェクトに当たったとき
派手に法線の方向に火花が散っていたので
それを再現してみました。
パーティクルよりSIGデータでしたほうがよかったのですが、多く表示すると重くなりそうだったので、パーティクルに
これでドラゴンのブレストも表現できるかも。
いや、ドラゴンが出てくるのはおかしいかorz
ビルボードで弾痕、丸影を表示させたいなあ。法線関係で無理か。
壁にうまらない
;通常のあたり判定、超高速で壁を突き抜けるのを防ぐ
e3dgetpos zs,zs_x2,zs_y2,zs_z2
E3DChkConfGroundPart2 zs_x,zs_y,zs_z,zs_x2,zs_y2,zs_z2,stazi,3, 0 , 1 , -10000 , result1 , ax,ay,az , nx,ny,nz
if result1=1{
e3dsetpos zs,ax,ay,az
}
e3dgetpos zs,zs_x3,zs_y3,zs_z3
;離す距離
hna=20.0
;法線ベクトル初期化
nnx=0.0
nnz=0.0
;正確な判定
repeat 30
E3DChkInView scid1, zs
E3DGetBBox zs,-1,0,minx,maxx,miny,maxy,minz,maxz
E3DChkConfGroundPart2 maxx,0,maxz,maxx,0,minz,stazi,3, 0 , 1 , -10000 , result1 , ax1,ay1,az1 , nx,ny,nz
E3DChkConfGroundPart2 minx,0,maxz,maxx,0,maxz,stazi,3, 0 , 1 , -10000 , result2 , ax2,ay2,az2 , nx2,ny2,nz2
E3DChkConfGroundPart2 minx,0,minz,minx,0,maxz,stazi,3, 0 , 1 , -10000 , result3 , ax3,ay3,az3 , nx3,ny3,nz3
E3DChkConfGroundPart2 maxx,0,minz,minx,0,minz,stazi,3, 0 , 1 , -10000 , result4 , ax4,ay4,az4 , nx4,ny4,nz4
;抜け出す
if result1=0 & result2=0 & result3=0 & result4=0 : break
if result1=1 : nnx+=nx : nnz+=nz
if result2=1 : nnx+=nx2 : nnz+=nz2
if result3=1 : nnx+=nx3 : nnz+=nz3
if result4=1 : nnx+=nx4 : nnz+=nz4
if result1=1 | result2=1 | result3=1 | result4=1 : e3dsetpos zs , zs_x3+(nnx*hna) , zs_y3 , zs_z3+(nnz*hna)
loop
リピート回数、離す距離は、モデルの移動速度に合わせて変えてください
壁の接触判定の贅沢な方法というとこでしょうか。
通常はモデルの中心点であたり判定しているのですが
バウンダリーボックスであたり判定させています
あたり判定されなくなるまでrepeatで繰り返すだけなんですけどねorz
一発で壁から離す距離を求めようとしたのですが、計算方法がわからないのでこの方法におちつきました。
これで車、バスなどの長方形なモデルでもあたり判定がうまくいきます、一押しの方法です・・もっといい方法があるかもしれませんけど。
e3dgetpos zs,zs_x2,zs_y2,zs_z2
E3DChkConfGroundPart2 zs_x,zs_y,zs_z,zs_x2,zs_y2,zs_z2,stazi,3, 0 , 1 , -10000 , result1 , ax,ay,az , nx,ny,nz
if result1=1{
e3dsetpos zs,ax,ay,az
}
e3dgetpos zs,zs_x3,zs_y3,zs_z3
;離す距離
hna=20.0
;法線ベクトル初期化
nnx=0.0
nnz=0.0
;正確な判定
repeat 30
E3DChkInView scid1, zs
E3DGetBBox zs,-1,0,minx,maxx,miny,maxy,minz,maxz
E3DChkConfGroundPart2 maxx,0,maxz,maxx,0,minz,stazi,3, 0 , 1 , -10000 , result1 , ax1,ay1,az1 , nx,ny,nz
E3DChkConfGroundPart2 minx,0,maxz,maxx,0,maxz,stazi,3, 0 , 1 , -10000 , result2 , ax2,ay2,az2 , nx2,ny2,nz2
E3DChkConfGroundPart2 minx,0,minz,minx,0,maxz,stazi,3, 0 , 1 , -10000 , result3 , ax3,ay3,az3 , nx3,ny3,nz3
E3DChkConfGroundPart2 maxx,0,minz,minx,0,minz,stazi,3, 0 , 1 , -10000 , result4 , ax4,ay4,az4 , nx4,ny4,nz4
;抜け出す
if result1=0 & result2=0 & result3=0 & result4=0 : break
if result1=1 : nnx+=nx : nnz+=nz
if result2=1 : nnx+=nx2 : nnz+=nz2
if result3=1 : nnx+=nx3 : nnz+=nz3
if result4=1 : nnx+=nx4 : nnz+=nz4
if result1=1 | result2=1 | result3=1 | result4=1 : e3dsetpos zs , zs_x3+(nnx*hna) , zs_y3 , zs_z3+(nnz*hna)
loop
リピート回数、離す距離は、モデルの移動速度に合わせて変えてください
壁の接触判定の贅沢な方法というとこでしょうか。
通常はモデルの中心点であたり判定しているのですが
バウンダリーボックスであたり判定させています
あたり判定されなくなるまでrepeatで繰り返すだけなんですけどねorz
一発で壁から離す距離を求めようとしたのですが、計算方法がわからないのでこの方法におちつきました。
これで車、バスなどの長方形なモデルでもあたり判定がうまくいきます、一押しの方法です・・もっといい方法があるかもしれませんけど。
2009年07月06日
2009年07月04日
2009年07月02日
メタセコプラグイン
t2kのサイトですが閉鎖されてますね、便利なプラグインがたくさん
ありましたorz
warabiで検索されてこられるかたも多いのですが、warabiの配布サイトも閉鎖されてますorz
http://www.siobi.info/program/mq-pluginlink.htm
ありましたorz
warabiで検索されてこられるかたも多いのですが、warabiの配布サイトも閉鎖されてますorz
http://www.siobi.info/program/mq-pluginlink.htm
2009年07月01日
2009年06月30日
2009年06月28日

