タグ

ブックマーク / marupeke296.com (6)

  • その8 4分木空間分割を最適化する!

    ホーム<ゲームつくろー!<衝突判定編 2D衝突編 その8 4分木空間分割を最適化する!(理屈編) ゲーム空間に置いたオブジェクトを総当りで衝突判定する事ははっきりと非効率だと言えます。ちょっと計算してみましょう。60FPSのゲームの1フリップ約16.6ミリ秒の内衝突判定に10%の時間余裕(1.66ミリ秒)を与えられたとします。もし1000回の衝突判定に1ミリ秒かかるなら(1000回/msec)、判定回数は1660回以下に抑えないと間に合いません。総当りだとこれは58オブジェクトくらいで限界です。判定時間が200回/msecならオブジェクトはたった18個で限界。これはどう考えても節約が無いとゲームになりません。 オブジェクトの全ての位置が決まった時、自分とぶつかる可能性があるのは自分の周りのオブジェクトだけです。遠い所にある物は判定する必要すらありません。そこで「空間をある程度制限してその中

    mae0510
    mae0510 2011/03/27
     4分木 衝突判定
  • 基礎の基礎編その2 小技集めておきました

    ホーム<ゲームつくろー!<衝突判定編<小技集めておきました 基礎の基礎編 その2 小技集めておきました ここでは、ベクトル演算を中心とした小技を集めてみることにしました。この章は何かあるたびに更新していく予定です。 ・ 3Dで平行なベクトルの外積は? ・ ある点から平面までの距離 ・ 2Dでのある点から直線までの距離 ・ 斜面に立つには? ・ ポリゴン上に点が含まれるかを判定 ・ 内分点 ・ 2直線間の最短距離 ○ 3Dで平行なベクトルの外積は? ↑トップ 2Dの外積は数値ですが、3Dでは法線ベクトルになります。2つのベクトルが並行ではない場合、法線は一意に決まりますが、平衡だったらどうなるのか?簡単ですから確認しておきましょう。 3Dで平行なベクトルは、互いに定数倍になっているので、 v1 = (x,y,z) v2 = (c*x, c*y, c*z) となります。この外積を計算すると、

  • その13 OBBとOBBの衝突

    ホーム<ゲームつくろー!<衝突判定編< OBBとOBBの衝突 3D衝突編 その13 OBBとOBBの衝突 衝突の丸の1つ「OBBとOBB」の衝突です。大きさの違うお互いに3次元的に回転した直方体が衝突しているかどうかを調べるというのはやはり簡単ではありませんが、これができると多種多様な方面で役に立ちます。OBB同士の衝突として主流なのは「分離軸判定」と呼ばれる方法でして、ここでもそれについて見ていきます。ちょっと深呼吸してご覧下さい(^-^; ① 「分離軸」判定とは? OBBの衝突には「分離軸」という物が登場します。これがいったい何なのか?まずは下の図をご覧下さい。 上のOBBは明らかに衝突していません。この時、両方のOBBを分ける直線が「絶対に」存在します。この直線は、ちょっと小難しい言葉で言うと分離超平面(Separating hyperplane)と呼ばれています。直線なのに平面と

  • その11 AABBと点の最短距離

    ホーム<ゲームつくろー!<衝突判定編< AABBと点の最短距離 3D衝突編 その11 AABBと点の最短距離 AABB(軸並行境界ボックス:Axis-Aligned Bounding Box)と点の最短距離を求めてみます。これは、後々のもう少し複雑な衝突に対する布石となります。 ① AABB 軸並行境界ボックスとは、ワールド空間のXYZ軸に対して各辺が平行な直方体の境界図形を言います。例えば町並みの建物などはこれで表すと便利かもしれませんし、真上から見る3DのSTGに登場する自機や敵機をこの境界ボックスで管理しても良いでしょう。何だかんだで案外使い道のある境界図形です。AABBの各辺は軸に並行なので、座標を読むのがとても簡単です。 ② まずは線分で考えて見ましょう AABBと点の最短距離を考えるための布石とするため、まずは「線分と点の最短距離」を考えて見ます。 線分をAB、空間内の点をPと

  • 基礎の基礎編その1 内積と外積の使い方

    ホーム<ゲームつくろー!<衝突判定編<内積と外積の使い方 基礎の基礎編 その1 内積と外積の使い方 この章では3Dゲームの特に衝突判定に無くてはならない「内積・外積」というベクトルの基的な演算についてお話します。内積は高校で、外積はたぶん大学で習います。そのきちんとした意味を理解するのは大切ですが、ゲームで使う上では性質を体得する方が近道かと思います。そのためにはイメージが大切です。 この章ではゲームで使用するベクトルの内積や外積をイメージと一緒に見ていこうと思います。 ① 方向と大きさを表せる「ベクトル」 この記事をご覧になっている方の多くはきっと高校生以上だと思います(そうでない方は賞賛に値します!立派なプログラマーになれますよ(^-^))。高校の頃には必ず「ベクトル(vector)」を習います。ベクトルは「方向と大きさを表す方法」です。下の図をご覧下さい: 見た目平面ですが、ゲーム

    mae0510
    mae0510 2010/03/31
  • その6 HLSLの根っこ:最初の最初からやってみる

    ホーム < ゲームつくろー! < プログラマブルシェーダ編 < HLSLの根っこ:最初の最初からやってみる その6 HLSLの根っこ:最初の最初からやってみる HLSL(High-Level Shader Language:上位レベルシェーダ言語)は頂点シェーダ及びピクセルシェーダを記述できる言語です。前章までのアセンブリによるプログラムは仕組みとしては単純なのですが、やはりアルゴリズムの構築がパズルのようで、可読性の点からも厳しいものがあります。一方でHLSLはC言語風の表記方法で、はるかに読みやすいシェーダプログラムを書くことができます。これはちょうどアセンブラとC言語の関係と同じです。そう考えると世の中がHLSLに移行するのは目に見えています。 HLSLについて書かれたは沢山あります。ただ、私がアホなだけかもしれませんが、なぜだかを見てもすっと理解できないんですよ(^-^;。それ

  • 1