[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 06/10 07:31 / Filesize : 92 KB / Number-of Response : 423
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

3Dアルゴリズム全般



1 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 13:51:26 ]
ネットなんかやってないで数学勉強してこいよ

266 名前:デフォルトの名無しさん mailto:sage [2011/08/22(月) 19:19:13.28 ]
>>263
3.10 と 3.13 は間違ってるみたいよ
ttp://www.kohgakusha.co.jp/support/3dgmath/index.html

267 名前:263 [2011/08/22(月) 20:15:23.82 ]
>>265の解答が
{ cos(b)cos(c), cos(b)sin(c), -sin(b) }
{ sin(a)sin(b)cos(c), -cos(a)sin(c), sin(a)sin(b) }
{ cos(a)sin(b)cos(c)+sin(a)sin(c), cos(a)sin(b)sin(c)-sin(a)cos(c), cos(a)cos(b) }
なんだけど2行目ってコレであってる?

268 名前:デフォルトの名無しさん mailto:sage [2011/08/22(月) 20:35:05.04 ]
>>265
> { sin(a)sin(b), cos(a), sin(a)cos(b) }{ -sin(b), cos(c), 0 }

これ { -sin(c), cos(c), 0 } じゃねーの?

どっちにしろ>>267は変だけど

269 名前:デフォルトの名無しさん mailto:sage [2011/08/22(月) 20:56:23.75 ]
>>268
のとおりだと思う
cos(b)cos(c), cos(b)sin(c), -sin(b)
sin(a)sin(b)cos(c)-cos(a)sin(c), sin(a)sin(b)sin(c)-cos(a)cos(c), sin(a)cos(b)
cos(a)sin(b)cos(c)+sin(a)sin(c), cos(a)sin(b)sin(c)-sin(a)cos(c), cos(a)cos(b)

270 名前:263 mailto:sage [2011/08/22(月) 21:14:46.55 ]
>>268
> { sin(a)sin(b), cos(a), sin(a)cos(b) }{ -sin(b), cos(c), 0 }
すいません-sin(b)は自分のタイプミスでした・・・
{ sin(a)sin(b), cos(a), sin(a)cos(b) }{ -sin(c), cos(c), 0 }
正しくはこうです
>>269
計算ありがとうございます
自分もそのような解答になりました。
とりあえず本の解答は誤字っぽいのでスルーして進めようと思います。

271 名前:デフォルトの名無しさん mailto:sage [2011/08/22(月) 21:23:29.33 ]
これ見ただけでどんな変換しようとしてるのかわかる人

272 名前:デフォルトの名無しさん mailto:sage [2011/08/22(月) 21:43:10.48 ]
Z軸回転じゃん。

273 名前:デフォルトの名無しさん mailto:sage [2011/08/22(月) 21:52:51.79 ]
aとbは

274 名前:デフォルトの名無しさん [2011/08/22(月) 22:09:42.72 ]
レベル低すぎ
出直して来い



275 名前:デフォルトの名無しさん mailto:sage [2011/08/22(月) 22:28:30.21 ]
>>273
極座標だろ

276 名前:デフォルトの名無しさん mailto:sage [2011/08/22(月) 23:00:10.39 ]
ただの行列計算に親切に回答してあげる人もいる

277 名前:デフォルトの名無しさん mailto:sage [2011/08/23(火) 10:31:37.01 ]
Maxima使っとけ

278 名前:デフォルトの名無しさん mailto:sage [2011/09/12(月) 20:40:00.05 ]
回転を表したクオータニオンから逆に各軸X・Y・Zを基点にした3方向の角度はどうやったら計算出来ますか?

279 名前:278 mailto:sage [2011/09/12(月) 21:02:48.35 ]
ただし、クオータニオンの軸は0,0,0を通るはず

280 名前:278 mailto:sage [2011/09/12(月) 21:13:12.97 ]
適当な数字を回転させてみればいいのか

281 名前:デフォルトの名無しさん mailto:sage [2011/09/12(月) 21:21:15.48 ]
クオータニオンで行列を回転させる式、で、
1 0 0
0 1 0
0 0 1 を回転されたもの、が求めてるものかな?

それともオイラー角を求めたい?

282 名前:278 mailto:sage [2011/09/12(月) 21:51:12.42 ]
オイラー角とか言われてもよくわからないんだけどっていうレベルなんですが
飛行機を飛ばすゲームみたいなユーザー操作でぐるんぐるん回すやつだと
クオータニオンの方が管理しやすいらしくてクオータニオンでやってるけど
簡易マップみたいなのに今どこにいてどの方角を向いてるのかを表示したくて
そうするとY軸まわりの回転角度が欲しいんですよね

283 名前:デフォルトの名無しさん mailto:sage [2011/09/12(月) 22:26:28.61 ]
281じゃないが、
その飛行機がZ軸向いてるなら、クオータニオンの行列で(0,0,1)を変換すれば向いている方向は出るし
ロールが欲しければ(1,0,0)を変換すればいい


284 名前:デフォルトの名無しさん mailto:sage [2011/09/13(火) 06:39:42.08 ]
>>278
右手系か左手系か、
オイラーで回す軸の順番とかでいろいろ変わる。

左手系 x-y-z でよければ
en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles
参照



285 名前:デフォルトの名無しさん mailto:sage [2011/09/13(火) 13:10:35.48 ]
アルゴリズムにもよるけど、
右に100度向いているクォータニオンをオイラー角に直したら、
左80度向いて180度宙返りあーんどバレルロールとか
アクロバチックなオイラー角になる可能性もあるので注意。

方位計が目的ならこれは問題あり。

286 名前:デフォルトの名無しさん mailto:sage [2011/10/13(木) 01:39:46.75 ]
こんにちは。
メッシュの覆う直方体を求めたいのですが、
その体積を一番小さい直方体を求める手法というのは
あるのでしょうか?

287 名前:デフォルトの名無しさん mailto:sage [2011/10/13(木) 05:25:07.68 ]
各軸の最小値と最大値を求めるだけだろ

288 名前:デフォルトの名無しさん mailto:sage [2011/10/13(木) 08:47:00.81 ]
>>286
常に最適なものが見つかるアルゴリズムはない。
ゲームプログラミングのための3Dグラフィックス数学
4939007375
に、頂点の分布から主要な軸を推定する方法が載ってたような。

289 名前:デフォルトの名無しさん mailto:sage [2011/10/13(木) 08:48:55.42 ]
>>287
説明が足りませんでした。
各軸ですと例えば乾電池が斜め向いていると、囲む直方体が大きくなってしまいます。
乾電池は円柱ですからほぼ同じ大きさになるような直方体の求め方があるのかなと思い
質問させていただきました。

290 名前:デフォルトの名無しさん mailto:sage [2011/10/13(木) 10:31:38.38 ]
>>289
その件が>>288が紹介した本に書いてある
「主成分分析 3Dグラフィックス数学」でググるといくつか見つかるかも

291 名前:デフォルトの名無しさん mailto:sage [2011/10/13(木) 19:10:15.15 ]
>>289
その辺の話は、AABB OBBでググるがよろし。
剛体なら先に求めておくといい。

292 名前:デフォルトの名無しさん mailto:sage [2011/10/16(日) 18:42:31.48 ]
スケーリングや回転を適用したままエクスポートされた3Dモデルがあるんですが、
ゲームで使う前に頂点データにそのモデルの変換行列を適用して単位行列にしたたほうがいいですか?

293 名前:デフォルトの名無しさん mailto:sage [2011/10/16(日) 18:48:31.61 ]
>>292
どちらでもいい

ロードしてゲームで処理するシステムを作る側の人間が
使いやすいと思う方でやるべき

294 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 01:06:09.54 ]
>>293
ありがとうございます^^



295 名前:デフォルトの名無しさん [2011/10/25(火) 20:10:38.24 ]
誰か教えてください。
アルゴリズム入門の授業なんですが
・性の小数部分を求めるサブルーチンDECのフローチャートを書け
・サブルーチンDECとサブルーチンINTを使って入力した正の実数の小数点以下を切り上げた
 整数を表示するフローチャートを書け
お願いします

296 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 09:57:00.13 ]
金払って入門してるんだから、わからないことは教師に聞くべき

297 名前:デフォルトの名無しさん mailto:sage [2011/11/09(水) 13:42:15.52 ]
>>296
その教師だったりして

298 名前:デフォルトの名無しさん mailto:sage [2011/11/09(水) 14:47:16.85 ]
「性の小数部分」が気になる件。
それで3Dなんだろ?なんか燃える

299 名前:デフォルトの名無しさん mailto:sage [2011/11/09(水) 14:52:33.54 ]
マジな話、>295の条件だけでフローチャートなんて書けないよね。
小数部分を求めるのに使えるサブルーチンが提示されていないんだから。
例えば整数化のサブルーチンを使えるかどうかさえ分からない。
それにしても、なんでDECなんだろう……

300 名前:デフォルトの名無しさん mailto:sage [2011/11/09(水) 19:14:28.55 ]
decimal representationからかねえ>DEC
これチャートつーか、分岐ある?


301 名前:デフォルトの名無しさん mailto:sage [2011/11/09(水) 19:15:18.58 ]
ビット演算すればいいのでは?
まあCPU指定しないと、いけないけど

302 名前:デフォルトの名無しさん mailto:sage [2011/11/09(水) 20:20:49.49 ]
1未満になるまで1を引きまくればいい

303 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 09:36:14.65 ]
オブジェクトの向いてる方向をベクトルで表現したい場合って
オブジェクトの前方向と右方向の2つのベクトルで十分だよね?3つめの上方向のベクトルまで必要なときってある?

304 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 12:40:33.22 ]
>>303
「向き」は球面座標系で表現できるから、情報量としては2次元で十分

向いてる方向と直行する面上に回転させた「姿勢」も表現したいのなら、
3次元分の情報が必要



305 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 17:21:17.75 ]
>>303
表現するだけなら2つで十分。
外積一発で出るんだし、ついでに出しとけって感じなんだろう。

そのオブジェクトの向いている方向に座標系変換するなら、連立方程式にするのが簡便なので、その成分として3つ目のベクトルも使う。

前と右よりは、前と上のことが多いと思う。

306 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 19:22:55.28 ]
>>303
冗長な表現を用いる場合は、誤差が蓄積して破綻しないように正規化が必要になる。
ベクトル2本や3本だと、それらが直行するように常に保たないといけない。

まぁ、そんなこと気にするのは固定少数使ってた時代の話かもしれんがw
floatなら正規化なしで1日くらい回し続けても、目に見える破綻が起きたことはないな。

307 名前:デフォルトの名無しさん [2012/01/08(日) 22:37:33.92 ]
自分で計算して作った3Dポリゴンを3Dファイルにして他のソフトに渡したいんですが、
何かいいライブラリか参考サイトありませんか?
なるべく多くのソフトで使われていて簡単に扱えるフォーマットがありがたいです。
環境はDirectX9とC++です。

308 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 01:31:44.50 ]
>>307
X
OBJ
COLLADA

この辺りじゃないか

309 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 02:37:03.18 ]
紅だー!!!!!

310 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 13:56:04.39 ]
>>308
ありがとうございます。
COLLADA DOMとかいうのがあるみたいなので、それを調べてみます。

311 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 15:50:33.46 ]
【速報】2ch全鯖死亡 (※嫌儲以外) ★2
awabi.2ch.net/test/read.cgi/poverty/1327139457/


【速報】韓国からの攻撃だったことが判明!!!!!
awabi.2ch.net/test/read.cgi/poverty/1327146261/

★414 名前:ポンギツ★[sage] 投稿日:2012/01/21(土) 20:01:08 ID:????
韓国から過剰のアクセスがあるみたいです。
今。対応中です。

312 名前:デフォルトの名無しさん [2012/01/27(金) 16:22:41.24 ]
3Dの2つのベクトルから回転角度と回転方向を得るにはどうすれば良いですか?

313 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 17:09:42.00 ]
>>312
回転軸は外積で、2つのベクトルがなす角は内積で得られるよ。

314 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 18:28:00.43 ]
>>313
a.x=0.0f;
a.y=1.0f;
a.z=0.0f;

b.x=1.0f;
b.y=0.0f;
b.z=0.0f;

これの外積は全て0.0fになってしまってうまく行きません。



315 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 18:48:10.48 ]
>>314
その場合外積は0にならんでしょ。

316 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 18:57:02.75 ]
>>315

具体的な計算手順を教えてくれませんか?
どうやっても0になる

317 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 20:15:19.55 ]
二次元ベクトルの外積をそのみまま拡張して使ってる?
三次元ベクトルの外積はxyzwの結果になるやつだよ
式はググれ


318 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 20:24:51.20 ]
>>314
c.x = a.y * b.z - a.z * b.y = 1 * 0 - 0 * 0 = 0
c.y = a.z * b.x - a.x * b.z = 0 * 1 - 0 * 0 = 0
c.z = a.x * b.y - a.y * b.x = 0 * 0 - 1 * 1 = -1

319 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 21:33:47.48 ]
ありがとうございます。

320 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 17:06:56.09 ]
AABBで各頂点を比較するやり方だと互いに突き抜けている箱の
当り判定を正確に行えませんよね?

321 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 17:51:54.99 ]
>>320
ちゃんと、
AABBとAABB
AABBとOBB
AABBと凸面体一般
AABBとポリゴン
AABBとその他
のどの交差検出の話なのか明確にしてから質問しないと誰も答えてくれないよ。
Separating axis theoremとかGJKでググっておけばいいと思うけど。

322 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 18:56:23.61 ]
AABBのやりかた間違ってるだけじゃね
何にたいしてどんな比較やってるか書いて

323 名前:320 mailto:sage [2012/02/04(土) 20:22:22.54 ]
AABBとAABBです。
なんて言えばいいんですかね。
十字架のようにクロスしていて片方はちょっと大きいです。
そうすると頂点は一切接触していないので当たっていると判定されないのです。

324 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 22:41:14.69 ]
AABBだよね?
a.min.x<b.max.x かつb.min.x<a.max.x
yとzも含め全ての軸で同様の状態なら重なってる
違ったら重なってない
終わり




325 名前:320 mailto:sage [2012/02/05(日) 00:59:01.79 ]
www.dotup.org/uploda/www.dotup.org2597301.png.html

だから、その方法だとこういうのは当たってると判定されないよねって聞いてんの

326 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 01:05:14.82 ]
判定されるだろ

327 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 01:09:19.63 ]
>>320
判定されないという計算を晒してみた方が早いと思う

328 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 11:37:32.85 ]
2次元に落としてロジックを試してみろ

329 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 11:14:22.13 ]
これくらいも自分で解決出来ないのなら正直3Dとか向いてないからさっさと手を洗った方がいいぞ
人間には適性てのがあって努力してもできない事があることを理解したほうがいい



330 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 20:54:10.73 ]
>>329
性格の腐った奴だな
お前は今まで多くの人間が携わって蓄積されてきた様々な3D技術を一人で開発出来たのか?
出来たという自信が無いなら3Dなんてやめろ

331 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 01:49:52.51 ]
AABBの衝突判定は蓄積とか3D技術とか言うレベルじゃないと思うが…
自分の頭で衝突してる・してないが判断できるんだからそれを式で表現するだけじゃん。
いやもちろん、自分の頭で判断できるけど式ではどうしようかっていうのが
世の中にはたくさんあるけど、これはね。というわけで327が近道かと。

332 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 12:25:08.54 ]
>>330
劣等感の強い奴は常に誰かを批判や恫喝していないと、
アイデンティティを保てなくて死んでしまうらしいよ。

子供の頃のイジメ役の子供も、劣等感の裏返しからイジメている奴は、
3, 40の大人になった時に鬱になって、自殺することが多いらしい。

こいつもきっと劣等感の裏返しだから、その内、この世から居なくなるよ。
自分で勝手に。

だから、無視無視。

333 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 13:20:20.77 ]
これだけの話で「性格の腐った奴」とか「劣等感の強い奴」とか言っちゃう人達って……
つーか、>330=>332?

334 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 14:05:06.54 ]
>>330
優しくしてほしかったら2chになんてくるなよ。



335 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 16:15:54.46 ]
>329 == >333 == >334 は、Trueだよな!

336 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 16:26:36.67 ]
よく手を洗え

337 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 19:01:09.78 ]
3Dに向き不向きとか言ってるアホがいる事に戦慄を覚えた

338 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 20:18:28.29 ]
ぶっちゃけ根気良くやってりゃ誰でも出来るよな

339 名前:デフォルトの名無しさん [2012/02/08(水) 06:01:46.31 ]
根気よくやってもできない奴には不向き

340 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 07:17:12.59 ]
普通、大人になってからは、できないものを根気よく続けられない

従って、根気よくやれているのなら、できていない事はあり得ない
他人よりも進むスピードが遅いだけ、前へは進んでいるから安心して良い

それでも、もう少しスピードを上げたいのなら、急がば回れだ
基礎中の基礎から勉強し直してみて、
ひとつひとつ、どこまで理解できてどこから分からないか、
全方位、理解の最前線を確認して明確にすべし
そこを明確にすれば、次に何をどう勉強すれば前進できるか分かるから、
計画も立てられてスピードアップすること間違いない

341 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 12:41:17.03 ]
確かに、ベクトルを理解するのに、中学の幾何を復習するのは実のあることだ!

342 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 12:18:55.51 ]
空間内で、多角形と直方体の交差判定をしたいです。
直方体の方は各辺が軸に平行として構いません。
今のところ多角形を三角形分割して三角形と直方体の交差判定をする
しかないかと思っていますが、三角形と直方体の交差判定も、
いまいちな方法しか思いつきません(三角形を「ペイント」する方法)。
定番の方法などあれば教えてほしいです。

343 名前:デフォルトの名無しさん [2012/02/11(土) 16:09:21.00 ]
前にこういうの参考にいろいろやったりして、リアルタイムにハードもソフトも進化してく時期だったから楽しかったんだけど
最近はなんか新しいのが無いなって
www.t-pot.com/program/history.html

今は何が熱いんだ?

>>342
GJKとか三角形vs三角形でやる方法とか

gjk
angra.blog31.fc2.com/blog-entry-115.html

俺のソースコード晒そうか?AABBツリーでしかも交差した線をなぞってわっかを取得できるやつ
Delphiだけど

問題点は浮動小数点だから、整合性が保たれないことがあるんだよな。わっかがわっかにならないことがある
これに対処するアルゴリズムはいまだ思いつかない

344 名前:デフォルトの名無しさん [2012/02/11(土) 16:14:14.19 ]
つまり浮動小数点の比較回数を理論上の最小にすれば解決するんだよな

こっちの線 vs 三角形とこっちの線 vs 三角形が浮動小数点の誤差で別の方向に転がると破綻する



345 名前:デフォルトの名無しさん [2012/02/11(土) 17:55:44.48 ]
eri-45.3>or>45.35=uiui

346 名前:デフォルトの名無しさん [2012/02/11(土) 18:02:14.26 ]
>>345
いやさ。三角形と直線と判定するときに
ある三角形と直線が交差したとする(でも線上でぎりぎり)

隣の三角形と直線を判定するときに、一辺に関してはもうどっち側か判定してあるわけじゃん
この例だと向こう側。だからその二度目の比較を回避しないといけないなって

ちょっと考えてたらアルゴリズム思いついた。久しぶりに書こうかな

347 名前:デフォルトの名無しさん [2012/02/11(土) 18:16:15.72 ]
いや・・・ DirextX (左手系)だろうが、OpenGL(右手系)だろうが
なかなか超えられない壁がある。

クオータニオンのi,j,kはどの座標系の基底ベクトルに対応してるのか、
とか基底変換行列、回転変換行列、座標変換行列の関係とか。
の違い

348 名前:デフォルトの名無しさん [2012/02/11(土) 18:17:33.45 ]
>>347

ごめん.最後の行はゴミ


349 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 18:19:50.01 ]
誤爆じゃないのかよwww何に対してのレスだ?

350 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 18:35:21.12 ]
>>343
> 最近はなんか新しいのが無いなって

新しいというのが何を指しているのか分からないが、
たとえば下記のブログの「Programming」カテゴリーで紹介されてのは、
その時々での結構新しい技術だと思う
masafumi.cocolog-nifty.com/masafumis_diary/

ただ、そこのは紹介だけだから、実際のコード例なんかは
紹介してる技術のキーワードを元に海外のサイトを探した方が早いと思う

あとは、SIGGRAPH なんかを追ってもいいと思う

351 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 19:20:29.39 ]
西川善司、手術成功しちゃったのか。

352 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 21:22:54.16 ]
>>351
ゼンジーのひと手術したのか。
シェーダー本買ったけど、初心者にわかりやすくてよかったんで、もっと書いて欲しい。。

353 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 00:52:41.92 ]
>>344 ありがとうございます。gjkのサイトわかりやすい。知らなかっ
たので勉強になります。考えているのは多面体同士でなくて片方多
角形なんですが、多分gjk使えますね。 直方体にgjkは大掛かりな気
もしますが、ミンコフスキー差を使うのは簡明なので、これで考え
てみます。

Delphiでわっかの取得というのも魅力的ですが、Delphiはわっから
ないので今回はお気持ちだけ受け取りました。

354 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 04:20:57.52 ]
Geometric Tools for Computer Graphics
っていう本に書いてあったseparating axis theoremの方がGJKよりシンプルな気がする。
片方の図形がAABBなら計算を簡単にできそうだし。

このサイトにあるライブラリには
よく使う図形の交差検出や距離を計算する機能がまとまっているので
使えるかも。
www.geometrictools.com/

GJKもseparating axis theoremも凸面体の交差判定に使うアルゴリズムだと思うけど
どう使いわけたらいいんでしょうか?



355 名前:デフォルトの名無しさん [2012/02/12(日) 04:32:13.88 ]
separating axis theoremってOBB同士でやったことがある。GJKは理解不能
そりゃあ原理を理解することはできるけど、それを速くコーディングするのはちょっとアクロバティックじゃないか?

三角形vs線分でやるのが無難。凹凸考えなくていいし

356 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 04:34:07.89 ]
OBBは直方体だからseparatingなんちゃらで射影する計算が少し減るんだよな

357 名前:342=353 mailto:sage [2012/02/12(日) 12:26:06.04 ]
>>354 www.geometrictools.com/ すごいですね。サンプルコー
ドに数学の説明もあればもっと嬉しいですが。現状では、AABBと多
角形の交差判定の、次の方針を考えています。間違えてなければい
いんですが。

(1) 多角形がz軸に平行ではないときのみ考える。そうでなければ軸の役割を交換。
(2) 多角形の載る平面Pの方程式にAABBの8頂点を代入し、
符号を比較することでAABBと平面Pの交差判定をする。
(3) 交差していれば、平面PとAABBの12辺との交点をあれば求め、それらを
xy平面に正射影し、その凸包Xを求める (XはAABBの平面Pによる切断面の正射影)。
(4) 多角形のxy平面への正射影Qと、凸包Xの交差判定をする。

凸包の求め方と(4)の判定をまだ考えていませんが、2次元に落ちて
いますし勉強してみます。

358 名前:デフォルトの名無しさん [2012/02/12(日) 12:52:49.65 ]
>>357
ここに説明全部あるぞ
www.geometrictools.com/Documentation/Documentation.html

なんでAABBと判定するんだ?AABBの利点って回転ごとに計算しないといけない代わりに
AABB同士だと爆速ってことにあるんだけど、AABB vs 三角形だとそこまで速くはならない
6回の比較で済むんだよ。18命令くらいで終わる、しかも分岐無し

汎用的な、三角形vs線分の関数をまず作って組み合わせたほうが楽だし、この場合オーバーヘッドもそんなに無い

359 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 12:54:16.13 ]
dependency chainも無しな。cpuによるけど、20クロックじゃないかなって予想

360 名前:357 mailto:sage [2012/02/12(日) 21:38:27.55 ]
>>358
bounding boxを考えたわけではないので、AABBという語は誤解させ
てしまいました。辺が軸と平行な直方体と読みかえて下さい。それ
しか考えていません。

> 汎用的な、三角形vs線分の関数をまず作って組み合わせたほうが楽だし、

について、直方体として、頂点が (a,b,c) (a,b,cは0または1) とい
う1辺が1の立方体を考えたとき、
三角形 (1/3, 1/3, 1/2), (2/3, 1/3, 1/2), (1/3, 2/3, 1/2) とか、
三角形 (-1/3, 1/3, 1/2), (4/3, 1/3, 1/2), (1/2, 4/3, 1/2) とかも、
立方体と交差していると判定するわけですが、これらも含む一般の
場合に、三角形とどの線分との交点を調べるのか理解できていませ
ん。あまり考えていませんが自分で考えろってことですね。

361 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 22:10:56.56 ]
それが分からないで3Dやるのはきついぞ。高校1でも分かる

362 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 22:14:25.25 ]
そういうことか

直方体を三角形の集合としてみるじゃん
つまり一般に三角形の多面体同士の交差判定するのよ

ふたつの多面体をAとBとしたときに

Aの三角形全て vs Bの線分全て
Aの線分全て vs Bの三角形全て

を調べればいい。交点もついでに全部計算できる

363 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 23:31:30.61 ]
直方体(AABB)の内部に三角形がすっぽり入っていて
三角形とAABBの面の重なりが無い場合は?

364 名前:357 mailto:sage [2012/02/12(日) 23:49:11.16 ]
>>362
理解できました。ありがとうございます。しかし、>>360 の1つ目の
例、つまり、直方体の内部に完全に三角形が含まれる場合は交差と
判定されません。

しかし、実際に交差するものの、三角形が直方体の内部、外部にま
たがらなくて交差と判定されないのは、こういった完全に含まれる
場合だけですから、それを別にチェックしておけばいいだけですね。
がんばってやってみます。



365 名前:357 mailto:sage [2012/02/12(日) 23:54:51.62 ]
あう、リロードしてなかった。眠い

366 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 00:43:40.41 ]
一般に、点が多面体内にあるかどうかを判定する関数を作る
実装は、その点から任意の直線を引いて交差するか調べる。面の向きが分かってるから内外が分かる

そして多面体A上のどこかの点を選んでBの中にあるかどうか判定する






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<92KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef