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

数学の問題は、ゲームの開発で使用される算術、幾何学、微積分、公式およびその他の計算を扱います。


2
(原点ではなく)3Dの任意の点を中心に回転するにはどうすればよいですか?
四元数を使用して通常の方法で回転させたいモデルがいくつかありますが、原点を中心とした回転の代わりに、わずかにオフセットする必要があります。3D空間では、点を中心に回転するとは言わないことを知っています。軸を中心に回転すると言います。そのため、尾がローカルの原点にないベクトルを中心に回転するように視覚化しています。 レンダリング/物理エンジンのすべてのアフィン変換は、SQT(スケール、クォータニオン、翻訳、ゲームエンジンアーキテクチャの本から借用したアイデア)を使用して保存されます。したがって、これらのコンポーネントからフレームごとにマトリックスを構築し、頂点シェーダーに渡します。このシステムでは、平行移動、次に拡大縮小、回転が適用されます。 特定のケースでは、ワールド空間でオブジェクトを変換し、スケーリングし、オブジェクトのローカル原点を中心にしない頂点を中心に回転する必要があります。 質問:上記の現在のシステムの制約を考えると、原点以外の点を中心としたローカル回転をどのように実現できますか?マトリックスのみを使用してこれを行う方法を説明できる人への自動アップ投票:)

3
2D空間ゲームでの等尺性グラフィックスの偽造
最初に、描画の問題が何であるかを正確に知っており、それを解決する方法についてさまざまなアイデアを持っています。等尺性の「錯視」が維持されるように、どのフレームを描画するかを調整する方法を見つけ出します。 私は宇宙で行われる2D鳥瞰図ゲームを書いています。Up is Northの世界でアイソメグラフィックを使用しようとしています。従来のアイソメゲームのようなゲーム世界の回転はありません(ゲームは空間で行われ、地形はありません)。ここでは例のスプライトは、私が使用しようとしていますされていますhttp://cell.stat-life.com/images/stories/AsteroidOutpost/Spaceship64.pngそれは別名(35度の視野角と自身の垂直軸を中心に回転だ64回、 iso)。画像が生成されたため、これを変更できます。 わかりやすくするために、北(上)が0度、東(右)が90度になるように指示しました。 私の問題は、使用する3Dプレーンの違いが原因で、スプライトが常に、ゲームが考えるところに直面しているように見えないことです。用語を正しく使用しているかどうかはわかりませんが、私の宇宙船は1つの平面上で回転しており、ビュー平面は物がそれ自身の平面上で回転することを期待しています。問題の描写は次のとおりです。 http://cell.stat-life.com/images/stories/AsteroidOutpost/ProjectionIssue.png 左側にはサイドビューがあり、右側にはトップダウンビューがあります。上部には、世界の宇宙船/スプライトシートビューがあります。一番下には、画面に描画されたときのスプライトの外観があります。 右上には、宇宙船がどのように回転したかを簡略化したバージョンがあります(各フレーム間が均等に分離されています)。右下には、特定の角度が画面に描かれたときにスプライトが向いているように見える角度です。問題は約45度で最も顕著です。これは、船が向いているはずの方向に向けられた「スクリーンプレーン」ラインでオーバーレイされた画像です。http : //cell.stat-life.com/images/stories/AsteroidOutpost/Spaceship64RedLine.png赤い線は常に船とまったく同じ方向に向ける必要がありますが、ご覧のとおり、投影の問題が問題を引き起こしています。この問題を十分に説明していることを願っています。 編集: 赤い線はスクリーン平面上で回転しますが、宇宙船は「船平面」上で回転します。したがって、船の角度と描かれたときのスクリーン角度の大きな違いがあります。 編集を終了 この船が一方向に外れたターゲットにレーザービームを発射しているとき、それがまっすぐ前方に発射されるべきであるとき、それはかなり奇妙に見えます。 だから...私が思いついた解決策は次のとおりです: 等角図を偽造するのをやめる、大きくなる、または家に帰る。すでに私の世界を回転させます。(PS:これで問題が解決しますよね?) スプライトシートを(なんとかして)変更して、モデルが表示される「スクリーンアングル」を表すフレームを作成します。したがって、45度の画像を要求すると、実際には画面上で45度の方向を向いているように見えます。 スプライトレンダリングシステムを変更して、スプライトシートとは異なるフレームを(なんとかして)取得します。「通常の」フレームを取得すると面白いように見えることを知っています。そのため、45度のフレームを取得する代わりに... 33度のフレーム(推測のみ)を取得して、ユーザーに正しく見えるようにします。 3Dを使用するだけです!とても簡単です 1つ:どのソリューションをお勧めしますか?私はそれが間違っていることを知っているにもかかわらず、2に傾いています。私はスプライト生成ツールに完全にアクセスできることを忘れないでください。方法3は2番目の選択肢です。どちらの方法でも、目的の結果を得るには、角度に数学を適用するだけです。ところで、私はそこに#4を冗談として追加しました。3Dに移行したくありません。 2つの場合:方法2または3を使用して、入力または出力角度を調整するにはどうすればよいですか?3Dプロジェクション、3Dマトリックス(2Dマトリックスは言うまでもありません)、および他の数学を使用して望みの結果を得るには、それほど得意ではありません。 ここで大声で考えてみましょう:船が見たい方向に向いている単位ベクトルを(スクリーンプレーンで)取得し、それを船のプレーンに投影し、その投影されたラインと飛行機の角度北は、表示したい船のグラフィックの角度が必要です。正しい?(#3の解決策?)男...私はそれを解決できません。 編集: 私は問題を静的な画像で視覚化するのが難しいことを知っているので、Sprite Library Visual Testerをコンパイルして問題を表示しました:http : //cell.stat-life.com/downloads/SpriteLibVisualTest.zip XNA 4.0が必要ですこのアプリケーションは単純にスプライトを回転させ、その中心点から船が向いているとゲームが考える角度で外側に線を引きます。 9月8日編集 「大声で考える」パラグラフの続き:プロジェクションを使用する代わりに(ハードに見えるため)北向きの単位ベクトル(0x、1y、0z)を取り、マトリックスを使用して角度に回転できると考えていますスプライトは実際に向いているので、X軸を中心に「ビューイングプレーン」から「スプライトプレーン」まで外側に回転させてから、...平らにしますか?XおよびYのみを使用して(Zを無視して)ベクトルを(本質的に投影して)表示面に戻します。次に、その新しい平坦化されたベクトルを使用して、その角度を決定し、それを使用して...何かをすることができました。後でもっと考えます。 9月8日編集(2) 私はいくつかの成功を収めて上から私のアイデアをフォローしようとしました!だから...赤い線を宇宙船からまっすぐに出ているように見せるために(テスト目的のみ)、私は次のことをしました: Vector3 vect = new Vector3(0, 1, 0); vect = Vector3.Transform(vect, Matrix.CreateRotationZ(rotation)); vect …

6
標準ビューボリュームの目的は何ですか?
私は現在OpenGLを学んでいますが、この質問に対する答えを見つけることができませんでした。 投影行列がビュースペースに適用された後、すべてのポイントが範囲[-1、1]内に収まるように、ビュースペースが「正規化」されます。これは一般に、「標準ビューボリューム」または「正規化デバイス座標」と呼ばれます。 私はこれがどのように起こるかを教えてくれる多くのリソースを見つけましたが、なぜ起こるのかについては何も見ていません。 このステップの目的は何ですか?

4
バウンス摩擦による回転を計算するにはどうすればよいですか?
前の質問から続きます。ボールがヒットしたサーフェスから非常にリアルに跳ね返っています。今、私はヒットの摩擦からそれを回転させたいです。 これを表示するのは十分簡単です:ティックごとに角速度でボールを回転させ、レンダリング時に同じ回転を適用します。 ボールが壁に当たったとき、回転速度が影響を受けることを知っています... 表面を打つときのボールの初期速度 ボールと表面の摩擦係数(物理定数) 入射角(ボールの入射速度ベクトルと表面の法線の間の角度)。 入射角は、ボールの衝撃速度と射出速度のベクトルのドット積で近似されます。(1は高スピン、-1はスピンなし、その他はすべてその間にあることを意味します) 上記のすべてを乗算し、それらが0〜1の範囲に変換され、最大回転速度が乗算されることを確認すると、ボールは予想どおり回転速度で応答するように見えました。1つを除いて、(正の値のため)常に時計回りに回転します。 これは良い方法ですか?もっと簡単な方法を考えられますか? この方法で問題がなければ、何が欠けていますか?ボールが反時計回りに回転するタイミングを知るにはどうすればよいですか?

1
敵が自分のプレーヤーを見ることができるかどうかを確認するにはどうすればよいですか?
プレイヤーと敵に位置があり、それぞれの方向ベクトルが与えられている場合、一方が他方を「見る」ことができるかどうかをどのように確認できますか? 言い換えると、方向を持つ1つの位置が方向を持つ別の位置の前または後ろにあるかどうかをテストするにはどうすればよいですか? 私の目的では、「前」とは、直接、または左右に90度のことを意味します。
15 mathematics  ai  vector 

3
ループなしで多くのサイコロを正確にシミュレートしますか?
ゲームがたくさんのサイコロを振った場合、ループ内で乱数ジェネレーターを呼び出すだけです。しかし、サイコロのセットが頻繁に転がされると、分布曲線/ヒストグラムが得られます。だから私の質問は、私が実行できる素敵な簡単な計算があり、その分布に合う数を与えるでしょうか? 例:2D6-スコア-確率% 2-2.77% 3-5.55% 4-8.33% 5-11.11% 6-13.88% 7-16.66% 8-13.88% 9-11.11% 10-8.33% 11-5.55% 12-2.77% したがって、上記を知っていれば、1つのd100をロールアウトして、正確な2D6値を算出できます。ただし、10D6、50D6、100D6、1000D6で開始すると、処理時間を大幅に節約できます。だから、これを高速に行うことができるチュートリアル/メソッド/アルゴリズムが必要ですか?株式市場、カジノ、戦略ゲーム、ドワーフ要塞などに便利でしょう。この関数といくつかの基本的な数学を数回呼び出すだけで何時間もかかる完全な戦略バトルの結果をシミュレートできたらどうでしょうか。

1
グリッド上の正投影単位の変換の不一致(たとえば、64ピクセルが正しく変換されない)
グリッド上での単位変換に関する小さな問題についての洞察を探しています。 更新および解決済み 私は自分の問題を解決しました。詳細は以下をご覧ください。投稿のこの部分のすべてが正しいことが判明しました。どちらかといえば、次の人のためのミニチュアチュートリアル/例/ヘルプとして機能することができます。 セットアップ FBO、VAO、VBO 512x448ウィンドウ 64x64グリッド gl_Position = projection * world * position; projection定義されるortho(-w/2.0f, w/2.0f, -h/2.0f, h/2.0f);この教科書正射影関数です。 world (0、0)の固定カメラ位置によって定義されます position スプライトの位置によって定義されます。 問題 以下のスクリーンショット(1:1スケーリング)では、グリッド間隔は64x64であり、ユニットを(64、64)で描画していますが、ユニットは約10pxを間違った位置に描画します。ピクセルサイズのゆがみを防ぐために均一なウィンドウディメンションを試しましたが、1対1ピクセルから世界単位への投影を行う際に、適切な方法で少し迷っています。とにかく、ここに問題を支援するためのいくつかの簡単な画像があります。 私は、エンジンが64xオフセットであると信じているスプライトの束をスーパーインポーズすることにしました。 これがふさわしくないように思えたとき、私はあちこちに行き、1ユニットのベースケースをしました。予想通りに並んでいたようです。黄色は、動きの1pxの違いを示しています。 私が欲しいもの 理想的には、64ユニットが任意の方向に移動すると、以下が出力されます(重ね合わせたユニット)。 頂点 頂点シェーダーに入る頂点が正しいように見えます。たとえば、最初の画像を参照すると、データはVBOで次のようになります。 x y x y ---------------------------- tl | 0.0 24.0 64.0 24.0 bl | 0.0 0.0 -> 64.0 0.0 tr | …

3
円上の点を指定してラジアン単位の角度を取得します
私は円の周りを回転するダイヤルに取り組んでいます。 このダイヤルを使用すると、円の任意の場所にマウスを移動して、ダイヤルの位置をクリックと同じ角度の円上の点に調整できます。たとえば、上のダイヤルから、下にピンクで表示されているスポットをクリックした場合、そのポイントの上で円上にダイヤルを移動します。 半径と角度(ラジアン単位)を指定して、円上の点の位置を取得する方法を知っています。それがこの式です: x = Cos(angle) * radius + CenterX; y = Sin(angle) * radius + CenterY; しかし、私は反対のことをやろうとしています。クリックポイントがあり、それを円上のポイント(コントロールノブが行く場所)に変えたいと思っています。このポイント(および指定された半径)を使用して、角度をラジアン単位で計算して、同じ角度でコントロールノブを円に配置しようとしています。 これを達成するために使用できる便利な式はありますか?

6
SIMD C ++ライブラリ[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Game Development Stack Exchangeで話題になるようにします。 2年前に閉店。 過去に、DirectX XNA数学ライブラリでVisual Studioを使用しました。現在、GNUコンパイラコレクションを使用しています。誰でも良いドキュメントでSIMD数学ライブラリをアドバイスできますか?
14 c++  mathematics  simd 

6
3Dグラフィックプログラミングの数学トピック[終了]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 4年前に閉鎖されました。 ロックされています。この質問とその回答はロックされています。なぜなら、質問はトピックから外れていますが、歴史的に重要だからです。現在、新しい回答やインタラクションを受け入れていません。 3Dグラフィックプログラミングには、次の数学トピックが必要であることを理解しています。私は数学コースでそれらのいくつかを始めました。誰かが私にそれらがどのように適用されるかを説明するリソースの方向に向けることができますか?どのグラフィック/ゲームの問題を解決するために使用されていますか? ベクトル数学 行列演算 四元数 線形代数 私が見る限り、これらはすべて線形代数/行列のトピックです。他に必要なトピックはありますか?


5
OpenGL ES 2.0ゲームで使用する完全な数学ライブラリですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Game Development Stack Exchangeで話題になるようにします。 5年前に閉鎖されました。 OpenGL ES 2.0ゲームで使用するための完全な(またはほぼ完全な)クロスプラットフォームの数学ライブラリを知っていますか? ライブラリには以下が含まれている必要があります。 Matrix2x2、Matrix 3x3、Matrix4x4クラス 四元数 Vector2、Vector3、Vector4クラス オイラー角クラス 上記のクラス、変換などの操作。 3Dグラフィックスで標準的に使用される数学演算(ドット積、クロス積、SLERPなど) スタンドアロンまたはパッケージの一部として利用可能なそのようなMath APIはありますか? プログラミング言語:Visual C ++。ただし、OS XおよびAndroid OSに移植する予定。

3
壁衝突の結果の角度を決定する
そのため、固定された水平または垂直の壁に向かう方向に移動するオブジェクトがあります。オブジェクトが跳ね返る角度を計算するにはどうすればよいですか?オブジェクトは、任意の角度で壁に近づくことができます。

1
ボクセル地形に応力/ひずみ力学を実装する方法は?
私は地形がボクセルに分割されるMinecraftのような世界を開発している最中です。しかし、風景の不安定な構成が予想どおりに崩壊することも望んでいます。たとえば、オーバーハングが大きすぎると、「高応力」ボクセルで破壊されて破損し、非対称に侵食された基部を持つピラー構造が破損します。私は、地形の各ボクセルに「応力ベクトル」フィールドを追加し、次のことを行うことを考えていました(擬似コード): foreach voxel in terrain foreach neighbor in voxel.neighbor_voxels() if magnitude(voxel.stress - neighbor.stress) > stressThreshold detach_voxels(voxel, neighbor) しかし、問題は、これらの個々のストレスをどのように計算するかわからないことです。ボクセル単位で応力を計算するために使用できる、ボクセル離散化に特化したFEAベースのアルゴリズムはありますか?または、私はこれにすべて間違っていますが、これを行う他の方法がありますか?

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