初心者が3Dゲームを作るスレ

■ このスレッドは過去ログ倉庫に格納されています
1Dr.D
垢版 |
2006/05/21(日) 00:24:28ID:HuR5iTxT
こんにちは。
ゲームプログラミングはそこそこできるけど、

3Dプログラミングはからっきしです。
サーフェイス?「サーフィン…とは別物だよな、きっと」
行列?「並ぶのは嫌いさ」
Xファイル?「そう言えば最終シーズン見てないなぁ」

そんなレベルの俺ですが、コツコツ作ります。

ではスタート!
2006/06/02(金) 17:31:40ID:8zqtlqB+
ベーマガが見下される時代か
2006/06/02(金) 18:35:07ID:jLfGiY5U
ベーマガのクオリティは知りませんが、
>>35のを作れたらけっこうがんばってる人かと。

>>1の戦闘力を知るためにも、ぜひうpしてほしい。
62名前は開発中のものです。
垢版 |
2006/06/02(金) 19:02:40ID:cRnXOq57
> ・テトリスもどき
>・ぷよぷよもどき

元々、ぷよぷよはテトリスもどき
63Dr.D
垢版 |
2006/06/02(金) 20:12:17ID:xfQtE3DH
何かすごい言われようデスなぁ・・^^;

確かにしばらく顔出してなかったのは申し訳ないです。
でも3Dは勉強中でまだアップできる状況じゃないので勘弁してください
m(_ _)m

ちょっとタスクシステム試してみたいので
ぷよぷよあたりをCで書き直してみます。
(これは数年前の作でVBで作った)

できたらうpするので2〜3日待ってて下さい。
2006/06/03(土) 10:14:34ID:OLEzofVp
いたのねw
ドラクエかwizの方を見たいかな
がんばってくださいなっと
2006/06/04(日) 08:14:55ID:K88stUcM
アマに3Dゲームは無理でしょ
2006/06/04(日) 13:00:55ID:ivXCrRTA
尼さんとか海女さんを馬鹿にするな!!
2006/06/04(日) 14:40:20ID:Uo/9S6B6
アマにも技術力に大きな差があり、3Dと言っても内容は千差万別。
それを一括りに無理というのは、浅慮も甚だしい。
2006/06/04(日) 19:28:08ID:fE9CF5tm
数学の知識が必要になるのが敷居が高い
2006/06/04(日) 20:56:28ID:1hgB0kAW
プログラマーがいないと話にならないよな
立体キャラクターはつくれるけど
3Dプログラムを覚えようとは思わない
一人で全部抱えるなんて嫌だ
2006/06/05(月) 02:56:26ID:K9LVVRK+
物理シミュレーションとかがややこしい
2006/06/05(月) 08:25:43ID:bd4t2Qiy
市販されているゲームの多数がシミュレーションどころか、
モデリングソフト側で定義済みのモーションデータを再生しているだけだが、
どんなゲームを作るつもりなんだ?
2006/06/05(月) 17:17:20ID:QQSGW7sM
数学なんて高校レベルの知識があれば、
それを派生させてくだけだから問題ないだろ。
2006/06/05(月) 19:35:26ID:wEs4Px8x
高校レベルの知識が無い人はどうしますか
2006/06/05(月) 19:40:32ID:wd6SqzUl
ネットの数学サイトで勉強する
……事実そうしようとしてる俺ガイル
2006/06/05(月) 19:55:13ID:9Sw0shvx
高校数学の教科書を丸暗記しているとか、常に100点マンテンとかでなくても、
高校時代の記憶を辿りながら、復習するレベルでいいんじゃないか?

ただ3D関係のデバッグは、
デバッガの示す値から問題点を洗い出さなければならない。
ここでツマヅキやすいんじゃないかな。。。
2006/06/05(月) 23:38:59ID:K9LVVRK+
60フレームで物体の動きを1フレームごとに決めなくちゃいけない
重力や慣性や摩擦や衝突や、計算しなくちゃいけないことが山積み
高校生レベルじゃなくて大学生レベルになってくるんじゃないの

ゲーム開発のための物理シミュレーション入門 って本を読んでたら
眠くなってきた
2006/06/05(月) 23:51:56ID:nAclzYyj
そんなにリアルを求めるゲーム作ってるのか?

>76
>重力や慣性や摩擦や衝突や、計算しなくちゃいけないことが山積み
>高校生レベルじゃなくて大学生レベルになってくるんじゃないの
それ、全部 高校ですよ。
2006/06/06(火) 00:43:44ID:EMhDLPLo
大多数のゲームがまともな速度で動くように
それらしく見えるようにして余計な計算を省いて作っているのに、
なんでこう馬鹿みたいな勘違いをする奴がいるんだろう?

以前にもマリオのジャンプが物理計算に基づいていると勘違いしているアホがいたが。
2006/06/06(火) 02:38:03ID:aN+E61UC
マリオのジャンプはたぶん足し算引き算しかしてないだろね
2006/06/06(火) 02:54:14ID:zmgldz1C
>>78
行列とか微分とか外積とか内積とか
もうお前らそれどこの異世界言語?って感じですが

2DならXYの足し算引き算だけで済むのに
2006/06/06(火) 08:26:33ID:+h8Thuph
>>80
2Dでもシューティングとかだとバッチリ数学使います。
平面回転の行列(or複素数)は絶対として、弾幕の軌道計算で関数を微分したりも。
あと三角関数/逆三角関数とか。
2006/06/06(火) 08:27:17ID:+h8Thuph
平面回転じゃなくて、平面上の点の回転てことで。
2006/06/06(火) 15:17:10ID:zmgldz1C
つまり真面目に誰か小学校算数レベルの俺を助けれと言う話だ(゚∀゚)
2006/06/06(火) 17:44:50ID:mQBwlpUi
マリオのジャンプは放物線でしょ、数学テクニックが使われているはずだ
2006/06/06(火) 17:50:32ID:mQBwlpUi
学校の数学の授業なんてまともに聞いてる人いるのかな
全部聞き流してた、眠たかった
2006/06/06(火) 17:52:07ID:+h8Thuph
>>83
高校時代とか「こんなもん勉強して将来何の役に(ry」とか思ってたのが
大人になってえらいことになってしまった、と。
家庭教師でも付けて勉強したら?

>>84
物理でしょ。まあどっちでもあんまり変わらんけど。
高校物理を勉強して、各種運動で加速度がどうかかるかってのは知っておいた方が良さそうだ。
2006/06/06(火) 18:02:54ID:OhxF5lMs
いや、正直その辺はわざわざ数学/物理勉強し直さなくても調べれば分かると思うんだが。
2006/06/06(火) 19:52:53ID:cAD3jwmb
いまさら居るかどうか分からんが、
Visual Studio Expressでコンパイル通るようにしたLunaのプロジェクト
ttp://aaabbbccc.s6.x-beat.com/upload/src/up8405.zip
2006/06/06(火) 20:13:46ID:6q3EifzD
>>1をスルーしつつ、
良スレになりつつある件について

ところで3Dってどのあたりでつまづく?
@ウィンドーが出せない。
A描画関係の初期化ができない。
Bポリゴンが表示できない。
Cポリゴンが思った方向に動かない。
D移動のための物理計算が上手くできない。
EAIが位置関係を正しく認識しない。
F思うようなMAPを用意できない。
G思うようなポリゴンモデルを用意できない。
Hひと通り動くのだが、ゲームとしてツマラナイ。
I3Dなんて楽勝だが根気が続かないwww
2006/06/06(火) 21:00:16ID:mQBwlpUi
サンプルソースから拡張していくのが普通だろうけど、いいサンプルが
ないってのを痛感する。DirectXのサンプルはシューティングゲーム
ばっかりでそれ以外がまったくない!
2006/06/06(火) 22:39:34ID:XRPDffmD
3Dなんて楽勝だが思うようなポリゴンモデルを用意できないのでツマラナイ
2006/06/06(火) 23:32:58ID:aOaklher
酔って仕事がススマナイ
2006/06/07(水) 00:59:48ID:ZPIY0i+o
テクスチャの楽な貼り方を知らない(´・ω・`)
2006/06/07(水) 03:29:38ID:W1VWj1ZD
マップあたりでつまづく。
キャラとの衝突判定ってどうやんの・・・・
2006/06/07(水) 03:50:26ID:C8ahj/9E
腰あたりから下に向かってレイ飛ばして
衝突Y座標に足の裏が来るようにすればええ。
2006/06/07(水) 19:52:03ID:HiMFR2tt
知識的な面で克服できそうなハードルもあるけど、
表示データそのものについてはPGの守備範囲外だし、
絵師に頼むわけにもいかないしちょっとシンドイね。
ゲームとしてベストなポリゴン数&テクスチャー解像度で、
モーション付きのデータを用意してくれる神って、
どこかにいるのかしらんw
2006/06/07(水) 21:47:20ID:/nqquaI3
>>96
お前こそが新世界の神になれ
98名前は開発中のものです。
垢版 |
2006/06/07(水) 21:54:51ID:HiMFR2tt
おk、↓で神になってくる!
ttp://pc8.2ch.net/test/read.cgi/gamedev/1109842876/674
2006/06/07(水) 23:57:21ID:toO/M0VK
マップのスケールをどう決めていいか分からん。orz
2006/06/08(木) 01:00:59ID:Cbm4h7oY
俺はメートル単位。
2006/06/08(木) 01:59:43ID:qRd8qDSy
俺はフェムトオーダー
2006/06/08(木) 20:18:09ID:GeYl7U0M
>>96
あなたはその神を探す気はないのかな?
やっぱり全部一人で抱えると悲惨だよね
2006/06/10(土) 03:01:56ID:EfLVJV/3
僕が神になる
2006/06/10(土) 09:06:40ID:ApNczupE
新世界の神きたー
2006/06/10(土) 10:55:09ID:3aLURK5+
僕は珍世界の神になる
2006/06/12(月) 02:44:54ID:DXNmvHtZ
僕が紙になる
2006/06/17(土) 11:13:32ID:D6Hsu945
逆三角関数をおしえてください
108名前は開発中のものです。
垢版 |
2006/06/18(日) 07:26:17ID:MoG2FV9R
正直このレベルの数学,物理が難しいとか話にならないから.
死ねばいいのに.
2006/06/18(日) 11:12:03ID:CoC/lB0L
J3Dなんて楽勝だがコリジョン(当たり判定)をどの手法でやれば資源を軽く出来るか分らないwww
2006/06/18(日) 11:53:06ID:CoC/lB0L
>>107 逆三角関数とは、三角関数の逆数のことです。
例えば、sinθ=aとしたとき、この式をθについて表すと次のようになります。
θ=sin-1a  または  θ=arcsin(a)
このような値を満足するθは無限に存在するため、通常は、次の範囲にあるものを代表的なもの(主値といいます)として考えます。
-π/2 ≦ sin-1a ≦ π/2、0 ≦ cos-1a ≦ π、-π/2 ≦ tan-1a ≦ π/2
メソッドなら
double asin(double x) Arcsin(x)、double acos(double x) Arccos(x)、double atan(double x) Arctan(x)
double atan2(double y, double x) Arctan(y/x) 〃
三角関数の計算//pi / 180.0; /* 度 → ラジアン */ 180.0 / pi;/* ラジアン → 度 */
x = sin(deg_r)、y = cos(deg_r)、z = tan(deg_r)
printf("30度の正弦は %f\n", x)、printf("30度の余弦は %f\n", y)、printf("30度の正接は %f\n", z);
逆三角関数の計算
ax = asin(x) * 180.0 / pi;
ay = acos(y) * 180.0 / pi;
az = atan(z) * 180.0 / pi;
printf("正弦が %f になる角度は %f 度\n", x, ax);
printf("余弦が %f になる角度は %f 度\n", y, ay);
printf("正接が %f になる角度は %f 度\n", z, az);
aw = atan2(1.0, -1.0) * 180.0 / pi;
printf("x成分が−1,y成分が1になる角度は %f 度\n", aw);
(出力)
30度の正弦は 0.500000
30度の余弦は 0.866025
30度の正接は 0.577350
正弦が 0.500000 になる角度は 30.000000 度
余弦が 0.866025 になる角度は 30.000000 度
正接が 0.577350 になる角度は 30.000000 度
x成分が−1,y成分が1になる角度は 135.000000 度
2006/06/18(日) 12:03:54ID:CoC/lB0L
「、」のところは改行してください詰め込みましたので
逆三角関数は一例としては角度比較を行うときに使います。

ホーミング性能が良い弾をあえて追尾角度変更の角度制限をして
微妙に当たりにくい弾を作ったり敵を自機を追尾する者と考えたときも使えます

主に
aw = atan2(1.0, -1.0) * 180.0 / pi;
を使うと良いでしょう
但し、角度比較は単なる内積で事足りるときもあるので気をつけてください
2006/06/18(日) 12:21:25ID:CoC/lB0L
>>110の追加
deg_r= 30.0 * 180.0 / pi
つまり
deg_r= 角度 * 180.0 / pi
2006/06/18(日) 12:24:44ID:CoC/lB0L
>>112の修正
deg_r= 30.0 * pi /180.0
つまり
deg_r= 角度 * pi /180.0
2006/06/18(日) 13:11:54ID:etwfQmPT
>107
逆三角関数。
三角関数にアークってつけろ、あとは、自分で調べろ。
2006/06/18(日) 16:17:48ID:IJ855Dct
何この呪文の羅列
三角関数とかマジわかんね
2006/06/18(日) 17:50:06ID:s3OhOc7c
>>115
sin(30)=1/2,cos(30)=(√3)/2は理解できるか?

2006/06/18(日) 17:58:06ID:AkpP3D5v
分かんないんじゃないくて、分かる気が無いんだと思うよ
2006/06/18(日) 18:02:01ID:etwfQmPT
>116
まだ、学校で習ってないと思うから 言っても無駄。しかもルートも知らないと思うよ。

今、学ぶのは大変だと思うから、
実際使えればいいって感じで使い方だけ覚えるのが良し。
2006/06/19(月) 00:51:24ID:PjkME4IK
>実際使えればいいって感じで使い方だけ覚えるのが良し。
・・・そんなの無理だろ・・
英語で言えばアルファベットの読み方知らないのと同じだ
使えさえ出来ないと思う。
sin,cosってそういうもんだろ・・
引数、戻り値の意味を知らずしてプログラムはできない
概念とかじゃなく物理的に
2006/06/19(月) 13:07:36ID:iIHzGLbp
>>116
わからん

>>118
小学校から引きこもってるから習ってはいないな

と言う訳で勉強してくるよ
俺頭いいからすぐ覚えてくるお!!!!11
2006/06/19(月) 16:17:20ID:QZrDv6Ca
それはたのもしい
2006/06/19(月) 17:26:26ID:iIHzGLbp
…あれだな、煽られないと逆に寂しいな
でも嘘は書いてないからキリキリ勉強せんとな
さすがに一次方程式で止まってるからキッツイわ
2006/06/19(月) 18:03:23ID:xNo+CLqv
>>122
分かんないところココに乗せてミソ
大抵のことはココの連中でも教えてくれるはず
少なくとも俺はそうだ

プログラマーで大事なのは恥を忍んで分んないところを聞くことだ
「自分で考えろ」って言う奴は大抵自身も知らなかったり、
ちゃんと要点をまとめて覚えてない売る覚え連中だから

教えてくれなくなるのは会社勤めて3年経ったりするベテランになったりと
年取ってくる時期だから
早めに若いときは恥かいたほうが良い
2006/06/19(月) 19:02:47ID:cL1qXh9W
>>114
まんまじゃねーか
調べろ調べろってうぜぇ
調べてわからないから聞いてんだよ
2006/06/19(月) 19:28:57ID:sI3rGPy3
>>124
君が逆三角関数を知らないために苦しんでいるというのならその事情を話しなさい
当面必要無いようなら無理に知る必要もない

「ぱそこん教えてください」みたいな抽象的な疑問には応えようもない
2006/06/19(月) 20:04:13ID:tEHvDuch
「DirectX逆引き大全500の極意」って本を買って、
一週間くらい前からDirect3D勉強し始めてるんですけど、

当たり判定のところでつまづきました・・・
////////////////////////////////////////////
与えられた3点をもとに、三角形の2辺を導く

この2辺の外積を計算すれば、平面の法線ベクトルが得られる

法線ベクトルの成分は平面方程式の各係数に対応しているので
平面方程式ax+by+cz+d=0のa,b,cが得られる
///////////////////////////////////////////

理解がおいつかないorz

外積や内積は確かに高校のときに習ったような気がするんですが、
ちゃんと聞いとけばよかった・・・
Direct3Dというよりも3Dのしくみがわかってない・・・みなさん勉強してますねorz

2006/06/20(火) 00:26:29ID:sFktv1uZ
三角形と線分の交点?
2006/06/20(火) 00:27:34ID:Csx6/cfg
3D初心者は一番簡単な「球」で当たり判定してればいいよ。
それで適当なシューティングでも作ってればいいさ。

最初は小難しいことやらないで、自分に分かる範囲から
少しずつ勉強していかないと、すぐに挫折するぞ。
2006/06/20(火) 00:31:01ID:RRjthpri
球wwww
2006/06/20(火) 00:37:58ID:9rwJB1S8
当たり判定の取り方、2Dは矩形、3Dは球が基本だとよく聞くね
2006/06/20(火) 01:02:02ID:3eo7HEKQ
>3D初心者は一番簡単な「球」で当たり判定してればいいよ。
>それで適当なシューティングでも作ってればいいさ。
知ったかぶりも大概にシル

キャラなら球かも知れんが
ステージの壁とか球でやる必要ないだろ・・
むしろFPS食って遅くなる
しかも球は三次方程式なんだよ
一次方程式で苦戦している子に無理させるな

結局、レイを使う方法(面と垂線の交点)も学ばんといけません

それにな、まずは点でキャラ作って当たり判定だろ・・それができて
アニメーションさせたりする頃に「キャラの肩が壁に食い込む・・」で球なんだよ
順番にした方が良い、でないとデバックできないプログラマーになるよ
2006/06/20(火) 01:35:02ID:3eo7HEKQ
面(三角形のポリゴン)とキャラクターの位置を表す点から
その点は面の垂線(法線ベクトル)かどうか判断させる

答えが真なら今度はどれぐらい離れているか

その値は面が張られている重心からの法線ベクトルの値を
正の方向とみなして正か負か見る

それらが分れば当たっているか?
当たっていないか?
突き抜けているか?分る
2006/06/20(火) 01:47:02ID:WcdFUVKV
>>131
なんか勘違いしてない?
球って楕円じゃなくて、距離だけで判定する真ん丸の球。
それに面との当たり判定を、球でやれと言ってるわけじゃないよ。

3Dを勉強始めて一週間、3Dの仕組みも分かんないのに
当たり判定なんかで躓いてるなら、もっと基本的なことから
やってった方がいいんじゃないのか? って言いたいだけ。
2006/06/20(火) 02:06:55ID:sFktv1uZ
自分の場合はこんな感じ。

@線分のパラメータtを決定(三角形の式と線分の式からtを決定する式を求めておく)
Atの範囲をチェック
Btから交点を求める
C交点から三角形のパラメータu,vを求める
Du,vの範囲チェック

あくまで線分(or半直線)と三角形との判定だけど。
2006/06/20(火) 02:11:11ID:3eo7HEKQ
>球って楕円じゃなくて、距離だけで判定する真ん丸の球。
そんじゃそれの式書いてミソ
結局XYZで三次方程式になるよ
一次方程式うんぬんなのにその式を導けるだろうか
・・・・
もしかしてCASE文やif文で処理させようと考えてる・・まさかね・・
2006/06/20(火) 03:27:24ID:sFktv1uZ
>>132
興味深い判定方法ですが、
御披露ついでに凹状の角での判定方法をご教授ください。
下図ABDでの判定は問題なさそうですが、

A ┃B
─┗━
C │D

Cからの垂線はいずれの面にも乗らないように思えます。

>>135
こんな感じにすれば、三次方程式にならないと思います。

// x0,y0,z0 : 点0の座標
// x1,y1,z1 : 点1の座標
// size_2 : サイズの二乗
dx = x1-x0;
dy = y1-y0;
dz = z1-z0;
if(dx*dx + dy*dy + dz*dz <= size_2)
{
// 当たり
}
else
{
// はずれ
}
2006/06/20(火) 06:41:55ID:mSOw/G6z
>>135
球はどうみても多変数二次方程式。

3Dで簡単に判定できるものの順に
Sphere>AABB>OBB>N-DOP>ConvexHull
そもそもAABBと面の衝突判定なんかめんどくさいんだよ。
面が全部xyz軸に平行であるわけもないんだぞ(ついでに言えば2Dだってそうだが)
2006/06/20(火) 09:21:15ID:xCW0SmV8
if( (x^2 + y^2 + z^2) <= r^2 )
2006/06/20(火) 15:23:09ID:f59jmO5J
>ID:3eo7HEKQ
 
イ`_
2006/06/20(火) 16:32:05ID:t+g0M0dT
ID:3eo7HEKQは釣りだと思ったんだが・・・
2006/06/20(火) 19:21:44ID:x5ZOe6BS
>>140氏のIDに仮面ライダーがいるw

AABBってAxis-Aligned Bounding Boxes Treeですよね

A ┃B
─┗━
C │D

って厚さが0の壁だとできませんね
まぁ厚さゼロの壁ってあえて作らなくても
よほど速度を必要としない限り壁を2重にすれば良いことですが

A ‖B
=#=
C ‖D

2006/06/20(火) 19:25:50ID:x5ZOe6BS
すいません
>>141は私です。
2006/06/20(火) 19:42:30ID:x5ZOe6BS
>面が全部xyz軸に平行であるわけもないんだぞ(ついでに言えば2Dだってそうだが)
xが正か負か
yが正か負か
zが正か負か
の組み合わせで法線ベクトルの内容から
8パターンメソッド作れば曲面だろうとできますね
@x>0、y>0、z>0
Ax<0、y>0、z>0
Bx>0、y<0、z>0
Cx<0、y<0、z>0
Dx>0、y>0、z<0
Ex<0、y>0、z<0
Fx>0、y<0、z<0
Gx<0、y<0、z<0
ちなみにxyz三成分のどれかが0ベクトルの場合は
8パターンのどれかが併用できます。
三成分とも0ならって・・・壁じゃないですし



2006/06/20(火) 20:23:15ID:x5ZOe6BS
重力がかかってる場合は

xが正か負か
zが正か負か
と天上か床(坂)か
の組み合わせで法線ベクトルから
4パターン+天上、床で作れば曲面でもできることになります
@x>0、z>0
Ax<0、z<0
Bx>0、z<0
Cx<0、z>0

ちなみにxz三成分のどれかが0ベクトルの場合は併用
坂になる場合はy成分分移動して上げてやれば良いですし

2006/06/20(火) 20:30:06ID:7foOlmqj
3eo7HEKQ=x5ZOe6BSなん?
146名前は開発中のものです。
垢版 |
2006/06/20(火) 21:52:27ID:q3QYoQKK
>>126
struct VECTOR
{
float x;
float y;
float z;
};
void VectorAdd( VECTOR *vec, const VECTOR *vec1, const VECTOR *vec2);//ベクトル和
void VectorSub( VECTOR *vec, const VECTOR *vec1, const VECTOR *vec2);//ベクトル差
void CrossVector( VECTOR *vec, const VECTOR *vec1, const VECTOR *vec2);//外積
float DotVector( const VECTOR *a, const VECTOR *b);//aとbの内積を返す
147名前は開発中のものです。
垢版 |
2006/06/20(火) 21:54:00ID:q3QYoQKK
>>146
int CheckTriangleCross( VECTOR begin, VECTOR end, VECTOR* pos, VECTOR *v)
{
// 平面の方程式より n(法線ベクトル)、d を求める
VECTOR n, p1, p2;
VectorSub( &p1, &v[1], &v[0]);
VectorSub( &p2, &v[2], &v[0]);
CrossVector( &n, &p1, &p2);

float d = -1 * (n.x * v[0].x + n.y * v[0].y + n.z * v[0].z);

// 直線の方程式より a、p を求める
// p = a*t + b
VECTOR a;
VectorSub( &a, &end, &begin);

// tを求めることで、交点を求める
float top = -(begin.x*n.x + begin.y*n.y + begin.z*n.z + d);
float bottom = DotVector( &n, &a);

// 平行判定
if ( bottom == 0.0f) return false;

// tは直線のパラメータ
float t = top / bottom;
148名前は開発中のものです。
垢版 |
2006/06/20(火) 21:54:59ID:q3QYoQKK
>>147
// 面と線の交点を求める
VectorMultiply( &a, &a, t);
VectorAdd( pos, &a, &begin);

// 0 = < t = < 1 以外の場合、交差していないので抜ける
if ( t < 0.0f || t > 1.0f) return false;

// 三角形内外判定
for ( int i = 0; i < 3; i++)
{
// 外積を利用して内外判定
VECTOR pn, p1, p2;
VectorSub( &p1, &v[((i+1)==3) ? 0: i+1], &v[i]);
VectorSub( &p2, pos, &v[i]);
CrossVector( &pn, &p1, &p2);

// 法線の方向判定用
pn.x = pn.x * n.x;
pn.y = pn.y * n.y;
pn.z = pn.z * n.z;

// すべての場合の法線が同一方向ならば、p は三角ポリゴン内に存在する
if ( (pn.x < -0.001) || (pn.y < -0.001) || (pn.z < -0.001)) return false;
}

// ここまで来たら交点有り
return TRUE;
}
2006/06/20(火) 22:14:30ID:t+g0M0dT
>>148

// 法線の方向判定用
pn.x = pn.x * n.x;
pn.y = pn.y * n.y;
pn.z = pn.z * n.z;

// すべての場合の法線が同一方向ならば、p は三角ポリゴン内に存在する
if ( (pn.x < -0.001) || (pn.y < -0.001) || (pn.z < -0.001)) return false;

上の部分って↓みたいにならん?
if ( DotVector( &pn, &n ) < 0.0f ) return false;
150名前は開発中のものです。
垢版 |
2006/06/20(火) 22:49:13ID:q3QYoQKK
>>149

それでも大丈夫だと思います。
2006/06/20(火) 23:12:15ID:RRjthpri
>150
見てもらいたいからってそんなにあげんでいいよ。
ここ過疎だし固定客しか見てない。
2006/06/21(水) 00:08:56ID:tL5CMgOs
検索した方が早い
2006/06/21(水) 00:31:19ID:nchM9XqJ
ここは、なかなかセクシーなスレですねっ!!!
上段はさておき自分の場合、

Sを始点、Eを終点、tをパラメータとする線分の式
P = S(1-t)+Et…@
P0,P1,P2を頂点、u,vをパラメータとする三角形の式
P = P0u+P1v+P2(1-u-v)…A
交点は@とAのPが一致する座標となるから
S(1-t)+Et = P0u+P1v+P2(1-u-v)…B

ここでパラメータt,u,vのうち、
線分の式により交点の座標が定まるよう、まずはtを求める。

BのS,E,P0,P1,P2はそれぞれx,y,zの次元を持つから、
Sx(1-t)+Ext = P0xu+P1xv+P2x(1-u-v)
Sy(1-t)+Eyt = P0yu+P1yv+P2y(1-u-v)
Sz(1-t)+Ezt = P0zu+P1zv+P2z(1-u-v)
この連立方程式からtをを定める式を導き出してる。

計算コストで言うと、明示的な掛算の回数が少なくなるけど。
ポリゴンの範囲チェックでパラメータを求める分、
割り算の回数が多い。。。まぁ、よく判らないんで放置w
2006/06/21(水) 00:36:30ID:2oEFK81Z
>3eo7HEKQ=x5ZOe6BSなん?
一応、違うと言っときます。
2006/06/21(水) 00:37:59ID:8NdrsnlZ
なんでトリ付けてるの?
どっか活動中?
2006/06/21(水) 01:01:19ID:nchM9XqJ
> 一応、違うと言っときます。
それは残念。
ID:3eo7HEKQ氏の処理はどの程度うまく動くか判断できなかったのですが、
ID:3eo7HEKQ氏=ID:x5ZOe6BS氏ならうまく動く事確実なので、
そこらへんの細かいお話を伺えると思ったのですが。。。。
157126
垢版 |
2006/06/21(水) 09:40:41ID:XQIjdcmw
>>146さん
直線のパラメータtなどはちょっと勉強不足で、理解できなかったので、

線分と平面の当たり判定は、
/////////////////////////////////
線分 : P1(x1,y1,z1)、P2(x2,y2,z2)
平面 : 平面上の点P0(x0, y0, z0)
平面の法線ベクトル : N=(nx, ny, nz)

線分の端点P1(or P2)が平面の表にある場合は、
P0からP1(or P2)へ向かうベクトルと法線ベクトルとのなす角度が常に鋭角になるので

「((P1-P0)・N) * ((P2-P0)・N) <= 0ならば線分は平面と衝突を起こしている」
/////////////////////////////////
という方法を使わせてもらいました。
(あるサイトで紹介されていた方法なのですが、自分でも理解できたのでこれを使わせてもらいました。)

たくさん書いてもらってすみませんでしたorz
2006/06/21(水) 19:15:47ID:DHibxNni
ふむふむ。、>>146じゃないが、
>>157の方法だと確かに平面と線分なら問題はなさそうだ。。
ただ平面というのは無限に広がる面なので、
自分の場合はちょっと使いどころが無いのが残念w
2006/06/29(木) 01:33:15ID:+myyGLQc
保守
160名前は開発中のものです。
垢版 |
2006/06/30(金) 09:42:14ID:JQhm0Yve
>>43

現在win APIの勉強中・・・(・∀・)人(・∀・)ナカーマ!!

いたら教えて。
なんていう本、またはソースで勉強してるの?

ちなみに漏れは、windowsゲームプログラミング(本)。

亀レススマソ。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況