どうも。絶賛座礁中のSAIです。
プログラムをちょこちょこ書き始めていますが、このやり方がスマートなのか疑問に思いながらやっております。
今回は前回の続きと補足です。
前回、肝心のぶった切る線分が図形とどう接触しているかについては全く触れていませんでしたね。
プログラムを書いていたらそこにぶつかったので結構悩みました。
分割された図形は、いくつかの線分から構成されています。
だからある線分を含む三角形とぶった切り線分との交差判定のデータを、
同じ線分を含む三角形との交差判定に生かせれば軽量化になるかなと思いましたが、複雑すぎてやめました。
総当たりすりゃあいいじゃまいか!
ここで前回a5uaさんにいただいたコメントから導き出した交点の式を使います。
辺上に交点があるならば、その座標はx,yともに辺の両端の間の値になっているはずです。
・・・交点が頂点と重なったらどうしよう・・・。
では前回の続きです。
実際に描画する座標(x,y,z)はどう決まるのか?という問題です。
画像のどの部分を描画するかは、最初のu,vで決まりますが、今まではこれを必死に求めていました。
今度は画面上に描画する座標です。
これまた難しそうです。ガラスが割れるというからには、当然破片は回転しないといけません。
しかも破片の重心を中心に回転しないと不自然です。
重心を一つの「物」として扱うことにします。この「物」が座標、回転角、落下速度などの情報を持ちます。
すると描画の際には「物」の持つ情報から三角形なら3つの頂点座標を計算しなければなりません。
とりあえず思いついたのは、「物」に各頂点への距離と角度の情報を持たせることです。
極座標を使えば簡単かな? と思ったのですが、もっといいやり方はないでしょうか。
次に多角形です。
五角形を例にしますと、五角形は3つの三角形でできてるので、「物」に5つの頂点の距離と角度を持たせれば計算できそうですね。
思ったより簡単かもしれない。
ガラスを割るエフェクト3
Re: ガラスを割るエフェクト3
石は質量と高い硬度を持つので投げてはいけません。当たると痛いです。
ダメ、ゼッタイ。
でも軽くて軟らかい石なら投げてもいいかもしれません。
粘土とか?
モウナンテカエセバイイノ?
ダメ、ゼッタイ。
でも軽くて軟らかい石なら投げてもいいかもしれません。
粘土とか?
モウナンテカエセバイイノ?
RE: ガラスを割るエフェクト3
久しぶりに日記を拝見したと思ったら、何やら大変そうな問題に当たっているようですね。
自分も気になるので、自分なりに考えをまとめてみました。
いま、三角形ABCの重心をGとしたとき、重心の座標とその速度と、3つのベクトルGA, GB, GCで三角形を表現しましょう(文字の上に矢印は書けないので、ベクトルを太字で書くことにします)。
ただし、ここではベクトルのx,y成分ではなくその向きと大きさに注目して、 ( x, y ) ではなく ( θ, r ) と表しましょう(極座標でのベクトルというわけですかね)。
GA = ( θA, rA )
GB = ( θB, rB )
GC = ( θC, rC ) となります。
Gの座標をベクトルでもってOGとすれば、各頂点の座標を、OG+GA, OG+GB, OG+GC と表せます。
そして、三角形を回転させたければ、θA, θB, θC に同じ値を加減算してやればいいですね。
三角形の移動は、重心のもつ速度によって重心が変化するだけでいいと思います。
重心の速度ベクトルをOGvとすると、フレームごとにOGにOGvを加算(合成)することになるでしょう。
かくして、1つの三角形を重心の位置ベクトルOG, 重心の速度、重心から頂点へのベクトルGA, GB, GCという5つの要素で表すことができます。
SAIさんの言いたいことはこんな感じでしょうか(わけわかんない説明だったらごめんなさい)。
回転は、フレームごとに0.5度回転、などといった処理になるでしょうか。
リアルな回転をしたいなら力のモーメントについて考える必要がありますね・・・・物理エンジン持ってこーい!
自分も気になるので、自分なりに考えをまとめてみました。
いま、三角形ABCの重心をGとしたとき、重心の座標とその速度と、3つのベクトルGA, GB, GCで三角形を表現しましょう(文字の上に矢印は書けないので、ベクトルを太字で書くことにします)。
ただし、ここではベクトルのx,y成分ではなくその向きと大きさに注目して、 ( x, y ) ではなく ( θ, r ) と表しましょう(極座標でのベクトルというわけですかね)。
GA = ( θA, rA )
GB = ( θB, rB )
GC = ( θC, rC ) となります。
Gの座標をベクトルでもってOGとすれば、各頂点の座標を、OG+GA, OG+GB, OG+GC と表せます。
そして、三角形を回転させたければ、θA, θB, θC に同じ値を加減算してやればいいですね。
三角形の移動は、重心のもつ速度によって重心が変化するだけでいいと思います。
重心の速度ベクトルをOGvとすると、フレームごとにOGにOGvを加算(合成)することになるでしょう。
かくして、1つの三角形を重心の位置ベクトルOG, 重心の速度、重心から頂点へのベクトルGA, GB, GCという5つの要素で表すことができます。
SAIさんの言いたいことはこんな感じでしょうか(わけわかんない説明だったらごめんなさい)。
回転は、フレームごとに0.5度回転、などといった処理になるでしょうか。
リアルな回転をしたいなら力のモーメントについて考える必要がありますね・・・・物理エンジン持ってこーい!
Re: ガラスを割るエフェクト3
図も使ったわかりやすい説明ありがとうございます!
そうです!イメージしてたのはまさしくそれです!
・・・なるほど、説明というのはこういうもののことを言うんですね。
今からこの部分を作ってきます!
回転の方は、サイズに応じて速さを変えればいいと思います。
ってGRAMさんがだいぶ前に言ってた気がします。
確かに大きい物ほど回転って遅いですからね。
あくまでゲーム上の演出なので、かっこよければOKです!
そうです!イメージしてたのはまさしくそれです!
・・・なるほど、説明というのはこういうもののことを言うんですね。
今からこの部分を作ってきます!
回転の方は、サイズに応じて速さを変えればいいと思います。
ってGRAMさんがだいぶ前に言ってた気がします。
確かに大きい物ほど回転って遅いですからね。
あくまでゲーム上の演出なので、かっこよければOKです!