タグ付けされた質問 「physics」

空間と時間を介したオブジェクトの動きに関連します。加速(推力と重力)、質量、衝突応答、摩擦などの概念を含みます。

3
AからBにジャンプできますか?
横スクロール用の基本的なAIを作成しています。ジャンプを実行するだけで、AIユニットがポイントAからポイントBに到達できるかどうかを知る必要があります。 私の文字の飛行軌道はとても古典とは異なり、彼らは(例えばジャズJackrabbitの2のように)空中に力を加えることができるように、ビットunusalで発射の弾道についてです... 投射または発射された発射体が推進力なしに進む経路(...) ...私の問題は、推進力を備えた発射体(ロケットなど)に関するものだと思います。 これを説明するために、ジャンプして「左ボタン」を押し続けると、これは私のキャラクターの飛行曲線のようになります(左端では異なります。空中でマニューバを作成していた場所です)。 飛行中に加えられる力は常にX軸に平行であるため、「左」を押し続けるとF =(-f、0)、「右」を押し続けるとF =(f、0)になります。 彼はスキージャンパーのように非常に動くことができます: したがって、それは単に放物線である古典的な軌道とは大きく異なります(出典:ウィキペディア)。 さらに難しくするために、単純な空気抵抗をシミュレートしているので、キャラクターはある最大速度値までしか加速できません。 これは、反対の移動方向に小さな力を加えることによって行われます。 b2Vec2 vel = body->GetLinearVelocity(); float speed = vel.Normalize(); //normalizes vector and returns length body->ApplyForce( AIR_RESISTANCE_MULT * speed * speed * -vel, body->GetWorldCenter() ); AIR_RESISTANCE_MULTは定数で、私の場合は0.1です。 私の性格は無限に小さいと仮定しましょう。 そして、私は障害物を考慮に入れていないので、私の質問は次のようになります... 初期速度V、ジャンプ時にキャラクターに適用する衝撃J =(0、-j)、重力G =(0、g)、力F =(+ -f)を指定して(少なくとも確実に推測する)を決定する方法、0)飛行中に継続的に適用され、空気抵抗を考慮することにした場合はAIR_RESISTANCE_MULT (これはオプションです) 、ポイントが、キャラクターがたどるパスによって描かれた曲線の下にあるかどうか 文字通り、どこから計算を始めればよいのかまったくわかりません。実際、必ずしも正確な答えに興味があるわけではありません。AIが完全に動作する必要はないので、うまく機能するハック/近似は素晴らしいでしょう。 編集: Jasonが示唆するように、シミュレーションを使用してこれを解決することにしましたが、そのような場合の対処方法は? CからDへのセグメントを描画し、目的のポイントがこのセグメントの下にあるかどうかを確認する必要がありますか? または、CとDの間のタイムステップをバイナリ検索して、目的のポイントに対して水平距離が十分に近いポイントを探し、その後、垂直方向の差を確認する必要がありますか?(私には少しやり過ぎに思えます)

1
マルチプレイヤープラットフォーマー-サーバー上の単一のクライアントでサーバーの修正が通常必要ですか?
私は現在、かなりシンプルなマルチプレイヤープラットフォーマーに取り組んでいます。私は待ち時間を隠すために使用される手法に関する記事をかなり読みましたが、それでも特定の概念を理解することができません。私はこのトピックが非常に興味深く、自分でアイデアを試したいと思っていますが、私の質問にはgamedev stackexchangeに尋ねる方が効率的だと思います。私の現在の状況と、その過程でどんな質問が生じたかを説明するために最善を尽くします。 現時点では、サーバーと同期するプレーヤーを1つだけにしたいと思っています。理論的には、クライアント側の予測を使用するプレイヤーは、自分の動きに影響を与える外部要因がないため、サーバーの修正は不要であると想定しました。したがって、私のプロトタイプでは現在、サーバー修正を送信せずにサーバーと同期しているプレーヤーは1つだけです。 ゲームネットワーキングに精通している場合は、コンテキストセクションをスキップすることもできますが、途中で問題が発生した可能性もあります。 クライアントループ(フレームごとに1回、〜16.67msごとに1回) 単純化されたクライアントループは次のようになります。 ローカル入力(WASD)を確認し、アクション(例:)としてパッケージ化しますType=MoveLeft, Time=132.0902, ID=15。後で送信するために、パッケージ化されたアクションを保持します。また、目的のアクションをゲームのローカルの物理シミュレーションに直接適用します。たとえば、MoveLeftアクションがある場合、プレーヤーの速度を左に向けて力を加えます。 チェックしてアクションを送信します。クライアントの帯域幅を乱用しないようにするには、パッケージ化されたアクションを特定の間隔(30msなど)でのみ送信します。 サーバーの変更を適用します。ある時点で、これはサーバーが受け取ったデルタと修正を処理し、それらをゲームのローカルシミュレーションに適用します。この特定の質問では、これは使用されません。 ローカル物理学を更新します。メインプレーヤーで物理ループを実行します。基本的に、これはプレイヤーの動きのクライアント側の予測を行います。これにより、プレーヤーの速度に重力が追加され、プレーヤーの速度が位置に適用され、途中で衝突が修正されます。物理シミュレーションは常に固定デルタ秒で実行されることを指定する必要があります(実際のデルタ秒に応じて複数回呼び出されます)。 。 物理学およびその他のセクションについては、質問には必要ないと感じたため、いくつかの具体的な詳細はスキップしますが、質問に関連するかどうかは、遠慮なくお知らせください。 サーバーループ(15msごと) 単純化されたサーバーループは次のようになります。 アクションを処理します。クライアントから受け取ったアクションパッケージを確認し、サーバーの物理シミュレーションに適用します。たとえば、5つのMoveLeftアクションを受け取ることができ、力を速度に5回適用します。アクションパッケージ全体が1つの「フレーム」で実行されることに注意してください。これは、アクションが発生するとすぐに適用されるクライアントではなく、 ゲームのロジックを更新します。ゲームの物理演算、プレーヤーの移動、衝突の修正などを更新します。また、後でプレーヤーに送信された重要なイベント(プレーヤーのヘルスの低下、プレーヤーの死亡など)もパッケージ化します。 修正を送信します。私たちは定期的に(たとえば、35ミリ秒ごとに)デルタを他のプレーヤー(たとえば、プレーヤーの位置、ヘルスなど)に最近変更した場合に送信します。この部分は現在実装されていません。クライアント側の予測が適切に機能することを確認するために、単一のプレーヤーのシミュレーションで修正なしでクライアントとサーバーで同じ結果が得られるようにしたいのです。 問題 現在のシステムは単純な状況では問題なく機能し、単純な水平移動でも非常によく似た結果が得られたことを嬉しく思います(この不正確さは浮動小数点の精度エラーが原因であると思います)。 プロトタイプのグラフィックは無視してください。白い長方形=プレーヤー、赤い長方形=障害物、青い=背景 しかし、ジャンプしたり、孤立した障害物に近づいたりするなど、時間に敏感な動きをした後、同期エラーが発生します。 理論的には、クライアントの立場に影響を与える外部要因がないため、どちらも常に同じ結果になると予想します。しかし実際には、問題は理解できたと思います。 そのような障害物の周りをジャンプすることは、プレーヤーのタイミングに大きく依存するため、速度がその位置に適用されたときの小さな変動は、結果に繰り返し実行されます(たとえば、クライアントは、サーバーは後でアクションパッケージ全体を受け取り、障害物にしばらく留まり、最終結果を変更するため、サーバーはそれを行います)。クライアントとサーバーがそれを処理する方法の違いは、サーバーがそれらを受信するときに、サーバーがそれらをすべて一括して実行するのに対し、クライアントはそれらが発生するとすべてのアクションを実行することです。 質問 この長いコンテキストは最終的に私の質問につながります(ここまで読んでいただきありがとうございます):サーバーと同期しているプレーヤーが1人だけの場合でもサーバーの修正が必要ですか、それとも特定の手法を使用して時間に敏感な状況での非同期を回避する必要がありますか? 私はいくつかの可能な解決策を考えましたが、そのいくつかは私にはあまり満足できません: サーバー修正を実装します。これが正常な動作であると単純に想定し、発生したエラーを修正してください。とにかくそれを実装したかったのですが、これまでに行ったことを受け入れられるようにしたかっただけです。 提供されたクライアント時間を使用して、目的のアクションを適用します。これはラグ補償と似ていると思います。「時間をさかのぼって」動きをチェックする必要があります。サーバーの修正を適用するようなもので、時間を遡り、その後の次のアクションを再適用します。本当に嫌いです。それは複雑でリソースが高価に見え、クライアントの指定された時間を信頼する必要があります(ただし、時間がかなり合法に見えることを実際に確認する予定ですが)。 GameDevelopment StackExchangeに、私のすべての問題を解決する優れた新しいアイデアを求めてください。 私はゲームネットワーキングの世界を始めたばかりなので、上記のコンセプトを修正、批判、侮辱したり、ワンダフルワールドオブネットワーキングの旅に役立つアイデアやリソースを提供したりしてください。他の場所で自分の答えを見つけることができたとしたら、失礼します。 貴重なお時間をありがとうございました。

1
2D「ピクセル」クラウドを取得してマウスを追跡する
私は、数百の小さな立方体またはディスクの「クラウド」を取得して、互いに重なることなくマウスカーソルを追跡する2Dゲームに取り組んでいます。 ただし、物理エンジンを使用すると、ディスクの数が増え、衝突検出が一般的に不安定になるため、パフォーマンスが低下します。 この種のもののためにエンジンを最適化する簡単な方法はありますか?そうでない場合は、エンジンをオフにして自分で何かを書いたほうがよいでしょうか。(ここでストローを握りますが:)これを行う方法に関する優れたリソースまたは例はありますか?
10 2d  physics  unity 

1
前輪の向きと速度から自転車の向きを計算する
ステアリングを追加しようとしているシンプルなトップダウンバイクゲームがあります。前輪のヘディングを使用して、バイクのヘディングと速度を決定する方法を教えてください。 void Update () { //Get input from user Vertical: 0 to 1, Horizontal -1 to 1 float forwardInput = Input.GetAxis("Vertical"); float sidewaysInput = Input.GetAxis("Horizontal") * m_steeringAmount; // Turn front wheel m_frontWheelTransform.localEulerAngles = new Vector3(0, sidewaysInput, 90); // get speed and drag float speed = m_velocity.magnitude; Vector3 forwardDrag = -m_forwardDragConstant …
10 physics  car 

1
デプスマップから「磁気デフォーマ」を作成するには、どのようなフィルタが適していますか?
私のプロジェクトでは、非常に詳細なメッシュ(衣類)を変形して凸​​型メッシュに「フィット」させるシステムを作成しています。これを行うには、アイテムと「船体」の深度マップを使用して、偏差が発生するワールド空間のポイントと範囲を決定します。 隠されたすべての頂点を「ハル」で定義された深度に単純に変換することはかなり効果的であり、パフォーマンスは良好ですが、メッシュの機能を維持しないという問題があり、誤検出を避けるために広範囲のカリングが必要です。 代わりに、デプスデビエーションマップから、変形したメッシュのすべての頂点を外側に(ワールドスペースで)「プッシュ」*する一連の単純な「デフォーマ」を生成したいと思います。この方法では、メッシュのすべての機能が保持され、不適切な頂点をカリングするために複雑なヒューリスティックを使用する必要はありません。 ただし、このデフォーマセットを生成する方法がわかりません。特定の範囲内の連続した偏差の各パッチに球面を一致させようとするアルゴリズムのようなものを想像していますが、これをどこから始めればよいかわかりません。 誰かがデフォーマを生成するための適切なフィルタまたはアルゴリズムを提案できますか?それとも、深度マップを「圧縮」する別の言い方をすると? (*押し込みは、凸型の「ふさふさした」ヒューマノイドにフィットするため、変換はサーフェスのPOVから「球状」になる可能性があります。) 編集:これは、私が達成しようとしていることを示す、正しく提案された画像/図です。 また、この質問が投稿されて以来、私はこの問題に多くのことを取り組み、デフォーマを取得する方法を解決したことはありませんが、結局、このデプスマップは次のように不適切であると判断しました。 変形したメッシュが完全でない場合、凸状メッシュの反対側にあることを意図したマップ内のテクセルを取得することができます(正しい側のカメラに近いものによって隠されていないため)。 変形ごとに6つのマップが必要なため、効率は期待していたほど高くはありませんでした。 これらは解決できないというわけではありませんが、GPUで実行されているカーネルでの衝突テストを含む他のソリューションは、それほど高速ではないかもしれませんが、より高い品質の結果をもたらし、はるかに単純でした。 私はまだこの質問の問題は興味深いと思いますが、それが好まれる状況があると確信しているので、どんな答えにも興味があります。

2
連続物理エンジンの衝突検出技術
私は純粋に連続的な物理エンジンに取り組んでおり、幅広い位相衝突検出のためのアルゴリズムを選択する必要があります。「完全な連続」とは、交差テストを決して行わず、代わりにすべての衝突が発生する前にそれをキャッチし、TOIによって順序付けられた「計画された衝突」スタックに入れる方法を見つけたいという意味です。 ブロードフェーズ 私が考えることができる唯一の連続的なブロードフェーズの方法は、各ボディを円に入れ、各円が別の円と重なるかどうかをテストすることです。ただし、これは恐ろしく非効率的で、カリングが欠如しています。 四分木など、今日の離散衝突カリング手法にどのような連続アナログが存在するのかもわかりません。ディスクリートエンジンなどの不適切で無意味な広範なテストを防ぐにはどうすればよいですか?また、1フレーム以上先の衝突を確認できるようにしたいと考えています。 ナローフェーズ 私はナローSATを離散ではなく継続的なチェックに適応させることができましたが、皆さんが出くわした可能性のある論文やサイトには、他にも優れたアルゴリズムがあるはずです。 どのようなさまざまな高速または正確なアルゴリズムを使用することをお勧めしますか、それぞれの長所/短所は何ですか? 最後の注記:凹面、凸面、円形、または穴があってもよいさまざまなポリゴンをどのように保存するかまだ決まっていないため、アルゴリズムではなくテクニック を言います。アルゴリズムに必要なものに基づいてこれを決定する予定です(たとえば、ポリゴンを三角形または凸型の形状に分解するアルゴリズムを選択した場合、このフォームにポリゴンデータを格納するだけです)。

1
変形面
私はレベルサーフェスの変形する物理的な動作を達成しようとしていますが、これまでの実装から始める方法がわかりません。 表面の形状(平面、立方体、球…)に関係なく、ゲームエンティティ(プレーヤー、敵、オブジェクト…)の位置に小さなインデントを設定したいと思います。 説明するのはちょっと複雑なので、私が話していることを説明しました。球の例を次に示します。 したがって、表面は少し変形する必要があります(本当に柔らかいベッドやソファーのように見えるようにするため)。私のサーフェスでは、スムーズな変形を実現するためにおそらく高い頂点数が必要ですが、私の大きな問題は、この変形を計算するための数学です。 私はOpenGLを使用してC / C ++でプログラミングしていますが、正しい方向のアドバイスは問題ありません。


5
ガラスの破砕をどのようにシミュレートできますか?
ガラス窓から石を投げてシミュレーションする必要があります。どうすればそれを達成できますか? つまり、3D Studio Max 2012で石とガラスの3Dモデルを作成し、ガラスを粉砕して、両方を.xモデルとしてXNA 4.0にエクスポートすることを考えていました。次に、XNAでアニメーションを作成します。自分の物理エンジンを作成します。その方法は可能ですか?衝撃後にXNAでガラスを破壊することは可能ですか、それとも3DS Maxでそれを行うべきですか?「ガラスを破壊する」とは、石の開始速度と重量、およびガラス(すべてのユーザー定義)の抵抗(硬度?)によってビットが切断されるため、以前に粉砕されたガラスのビットを互いに切断することを意味します異なる方法でお互いに。
10 xna  physics  xna-4.0  3dsmax 


3
ランダムマップの生成-ランダムノードの分散/クラスタリングの戦略
私は、単純な4Xストラテジーゲームを空間で実行しています。各ノードは、目的点(惑星、小惑星など)です。 マップをランダムに生成するには、以下の手順に従います マップが持つ各ノードのタイプの数を決定します(たとえば、5つの地球のような惑星、10の不毛の惑星など)。 各タイプのノードをマップに配置します。 ステップ2では、各ノードタイプを均等に分散させたいと思います。したがって、たとえば、私はすべての地球のような惑星を配置することから始めます。単純にrand(map.width、map.height)を実行して位置を決定すると、すべての地球に似た惑星が一緒にクラスター化し、その領域から開始するプレーヤーにメリットをもたらす可能性があります。 さまざまなグラフ関数やノイズ関数を使用するなど、相互に広がる一連の(x、y)座標を生成できる方法はありますか?同様に、互いに近い座標を生成する方法はありますか?

1
ポリゴンを任意の形状に合わせるためのよく知られたアルゴリズムはありますか?
Chipmunk物理エンジンを使用して、2D Cゲームのレベルを作成しています。ポリゴンを任意の形状にフィットさせて、衝突マスクとして機能させたいです。次のような任意のレベルのオブジェクトの白黒の衝突マスクがあるとします。 これを取得するためのよく知られたアルゴリズムはありますか? 次に、赤いポリゴンを使用して、画像に合わせて物理オブジェクトを作成します。

1
ゴルフボールの軌道方程式に空気抵抗を追加する
VB.NET 2005で2Dゴルフゲームを開発していますが、ボールに影響を与えるはずの空気または風の抗力を実装する方法に行き詰まっています。 すでに私は発射物のためのこれらの方程式を持っています: v0v0v_0は、ヒットまたは発射されたときのゴルフボールの初速度 垂直成分と水平成分、ゴルフボールの速度: vバツvy= v0c o s (θ )= v0s i n (θ )− gt ∗vx=v0cos(θ)vy=v0sin(θ)−gt∗ \begin{align} v_x &= v_0 cos(\theta) \\ v_y &= v_0 sin(\theta) - gt* \end{align} ゴルフボールの垂直および水平距離: バツy= v0c o s (θ )t= v0s i n (θ )t − (0.5 )gt2x=v0cos(θ)ty=v0sin(θ)t−(0.5)gt2 \begin{align} x &= v_0cos(\theta)t …


2
Bulletを学ぶために、Box2Dの代わりにBulletを2D物理学に使用する価値はありますか?
質問にはこれ以上ありません。どちらも私の目的には問題ないので、オーバーヘッドについては気にしていません。基本的に、Farseer Physics EngineのおかげでBox2Dの概念に精通していますが、3DにジャンプするときにBulletを使用したいと思います。おそらく、Bulletは2Dの領域でも私にいくつかの教育的価値を持っていますか? 質問の一般化されたバージョンは次のとおりです。将来3D物理エンジンを利用する予定がある場合、2Dゲームに3D物理エンジンを使用する必要がありますか?または、これは教育的価値を提供しない時間の無駄ですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.