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

回転とは、特定の軸を中心としたオブジェクトの円運動です。

2
2つの軸でオブジェクトを回転させているのに、なぜ3番目の軸を中心にねじれ続けるのですか?
この根本的な問題を抱える質問が頻繁に出てきますが、それらはすべて特定の機能やツールの詳細に追いついています。これが出てきたときにユーザーに紹介できる標準的な回答を作成する試みです-多くのアニメーションの例があります!:) 一人称カメラを作っているとしましょう。基本的な考え方は、左右に見えるようにヨーし、上下に見えるようにピッチすることです。そのため、次のようなコードを少し書きます(例としてUnityを使用): void Update() { float speed = lookSpeed * Time.deltaTime; // Yaw around the y axis using the player's horizontal input. transform.Rotate(0f, Input.GetAxis("Horizontal") * speed, 0f); // Pitch around the x axis using the player's vertical input. transform.Rotate(-Input.GetAxis("Vertical") * speed, 0f, 0f); } または多分 // Construct a quaternion or …

2
2Dスプライトの回転力の計算
誰かが次のシナリオを計算するエレガントな方法を持っているかどうか疑問に思っています。 私は(n)個の正方形、ランダムな形状のオブジェクトを持っていますが、それらはすべて長方形のふりをします。 私たちは重力を扱っていないので、空間内のオブジェクトをトップダウンの観点から検討します。下の図のように、特定の正方形のオブジェクトに力を加えています。 適用されている場所で、適用されている力に基づいて回転角度を計算する方法を教えてください。中央の正方形に適用すると、まっすぐになります。中心からさらに移動すると、どのように動作しますか?回転速度の計算方法は?
35 2d  rotation  physics  vector 

3
チームはソースファイルの上書きをどのように防止しますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Game Development Stack Exchangeで話題になるようにします。 4年前に閉鎖されました。 たとえば、ゲームエンジンなどが複数の人によって同時に処理されているときに、上書きをどのように防ぐことができるのか、ということが起こりました。 開発者1が作業してAudio.cppおり、開発者2も作業をしているとしましょう。Audio.cppこれは、一般的に大規模なチームで上書きに対処するためにどのように管理されていますか?(つまり、開発者2がファイルを開くのを停止して、開発者1が終了するまで)
26 project-management  version-control  teamwork  java  2d  collision-detection  vector  collision-resolution  unity  directx  directx11  directx10  xna  ios  monogame  windows-phone-8  xamarin  design-patterns  oop  xna  collision-detection  collision-resolution  bounding-boxes  rotation  collision-detection  mathematics  javascript  algorithm  separating-axis-theorem  xna  2d  monogame  image  xna  directx  graphics  performance  opengl  2d  3d  c++  directx11  unity  c#  scale  c#  xna  collision-detection  collision-resolution  leaderboards  scoring  glsl  srgb  tilemap  three.js  tiled  unity  physics  xml  dialog-tree  xna  c#  .net  opengl  lwjgl  vbo  physics  graphics  procedural-generation  simulations  water  opengl  java  textures  lwjgl  frame-buffer  unity  unity  2d  collision-detection  collision-resolution  trigonometry  java  android  libgdx  xna  c#  frame-rate  c++  unreal-4  procedural-generation  java  graphics  lwjgl  slick  c++  software-engineering 

6
回転するオブジェクトが右端でターゲットにヒットすることを確認する方法は?
私は、プレイヤーが自由に狙いを定めてナイフを投げる投げナイフタイプの武器に取り組んでいます。ナイフは空中を回転し、衝突すると回転を停止し、衝突したオブジェクトの親になります。回転はアニメーションによって処理され、ナイフのパスは物理学によって処理されます。 私が直面している問題の1つは、ナイフが敵に衝突したときに、ナイフが敵に向かっていることを確認する方法です。現時点では、時々ナイフが敵のハンドルに最初に埋め込まれることがあります。これは明らかに非現実的です。同時に、ナイフが回転する速度はプレイヤーの制御を超えているため、ナイフが最初にブレードに衝突した場合にのみナイフを敵に「ヒット」させるのは非常に不合理だと思います。 私は同じような武器の多くの遅いキルカム映像を見てきました、そして武器が投げられるたびに空中を回転し、魔法のように常にそのターゲットを指しているブレードで終わります。投げる距離が一定になるゲームの場合、これは非常に簡単です。しかし、予測できない多くの要因が関係しているので、これをどのように予測するかはよくわかりません。ナイフの方向、ナイフの回転、敵の位置、敵からの距離など。可能であれば、ゲームはかなりローエンドのデバイス向けであるため、複雑な予測ロジックを使用する必要はありません。これを解決する「煙と鏡」の方法はありますか? 例:https : //youtu.be/0fav8lFpBko?t=42s

3
他のオブジェクトのオフセットに基づいてオブジェクトを回転するにはどうすればよいですか?
Y軸を中心に回転するタレットの3Dモデルがあります。この砲塔には、オブジェクトの中心から大きく外れた大砲があります。砲塔ではなく大砲で指定されたターゲットを狙います。ただし、タレットを回転させることしかできないため、目的ごとに達成するためにどの方程式を適用する必要があるかわかりません。 次の画像は私の問題を示しています。 ターゲットに砲塔「LookAt()」がある場合、大砲から発するレーザーは、そのターゲットを完全に見逃してしまいます。 これが完全にトップダウンのシナリオであり、大砲が砲塔と正確に平行である場合、私のロジックは、偽のターゲットは実際のターゲットに等しい位置に加えて、砲塔と大砲。しかし、実際のシナリオでは、カメラの角度は60度であり、大砲はわずかに回転しています。 次の図は、シナリオを示しています。 正確な理由はわかりませんが、同じオフセットを適用すると、タレットから特定の距離を狙っているときにしか機能しないようです。 ロジックに欠陥がありますか?ここに基本的なものがありませんか? 最終編集:@JohnHamiltonの最新アップデートが提供するソリューションは、この問題を完全に正確に解決します。これで、誤った実装を説明するために使用したコードと画像を削除しました。

2
クォータニオンの使用:それらで何ができますか?(数学なし)
私はゲーム開発者であり、数学を勉強していません。そのため、ツールとしてクォータニオンのみを使用します。また、3D回転を使用するには、クォータニオンを使用する必要があります(またはマトリックスですが、この質問ではクォータニオンに留まりましょう)。多くの開発者がそれらを使用することが重要だと思います。それが私の知識を共有し、できれば私が持っている穴を埋めたい理由です。今… だから私が理解した限り: クォータニオンは2つのことを説明できます。 3Dオブジェクトの現在の向き。 オブジェクトが実行できる回転変換。(rotationChange) クォータニオンでできること: 乗算: 四元数endOrientation =四元数rotationChange *四元数currentOrientation; たとえば、3Dオブジェクトは左に90°回転します-そして、私の回転は、右に180°回転し、最後に3Dオブジェクトは90°回転します。 クォータニオンrotationChange =クォータニオンendRotation * Quaternion.Inverse(startRotation); これにより、rotationChangeを取得し、これを別のOrientationに適用できます。 Vector3 endPostion = Quaternion rotationChange * Vector3 currentPosition; たとえば、次のようになります。私の3Dオブジェクトは位置(0,0,0)にあり、乗算する回転は180度右への回転であり、終了位置は(0、-50,0)のようなものです。そのクォータニオンの中には、軸とその軸の周りの回転があります。ポイントをその軸のY度に向けます。 Vector3 rotateOffsetVector = Quaternion rotationChange * Vector3 currentOffsetVector; 例:開始方向はUP-(0,1,0)を示し、乗算した回転は右に180°回転し、終了方向は下を示しています。(0、-1,0) ブレンド(LerpとSlerp): クォータニオンcurrentOrientation = Quaternion.Slerp(startOrientation、endOrientation、interpolator) 補間器が1の場合:currentOrientation = endOrientation 補間器が0の場合:currentOrientation = startOrientation Slerpはより正確に補間し、Lerpはより多くのパフォーマンスを補間します。 私の質問: 今まで説明したことはすべて正しいですか? クォータニオンでできるのはそれだけですか?(obv。not) 他に何ができますか? 2つのクォータニオン間のDot製品とCross製品は何に適していますか? …

4
目標点についてカメラを周回させるにはどうすればよいですか?
カメラが宇宙を自由に動き回るシーンを描いています。カメラクラスは、(またはビューのトラック続けるを見てポイント、カメラの位置、およびアップベクトル)。これらのベクトル/ポイントは、gluLookAtに渡されます。 パンとズームの実装はほとんど簡単です。しかし、私はポイントの見方をめぐるローテーションをより多くの問題であると感じています。2つの角度をとる関数Camera.rotateを作成します。1つは上/下に回転し、もう1つは視点を中心とした仮想球に沿って左右に回転します。 これを行う簡単な方法はありますか? 私は(簡単に)四元数について読みましたが、自分のシーンの構成が比較的単純であるため、簡単な解決策があるかどうかを確認したかったのです。


4
テトリスでブロックを回転させる方法
高さ20行、幅10列のゲームボードグリッドがあり、原点(0,0)は左上隅にあります。4つのブロックで構成されるテトリミノを使用しています。左上隅の原点を基準とした各ブロックのx、y位置があります。また、ピボットの位置、つまり左上隅の原点を基準にした回転の中心点もあります。 各ブロックはゲームボードの四角に整数位置を持っているため、ピボットはブロック間に小数位置を持ちます(例:(10.5,10.5) 私の質問は次のとおりです。ピボットを中心に各ブロックを回転させるのにどの数式を使用できますか? 私はすでに既存の同様の質問と回答を見てきましたが、仕事に就くことができる答えを見つけることができませんでした。 ヘルプをいただければ幸いです。
17 c++  rotation 

8
回転/傾斜した長方形の角の位置/マークを計算する方法は?
2つの要素、2Dポイントと長方形の領域があります。ポイントはそのエリアの中央を表します。その領域の幅と高さも知っています。そして、エリアはグリッドに対して40°傾斜しています。 次に、このデータのみを使用して、その傾斜領域の各コーナーマークの絶対位置を計算します。それは可能ですか?

6
ワールドアラインされた軸の周りでオブジェクトを回転させる方法は?
各軸にオイラー角を持つVector3があります。 通常、回転行列を作成するときは、上記の回転ベクトルからそれぞれの角度を渡すD3DXMatrixRotationXなどの関数を使用し、行列(ZXY)を乗算して、完全なオブジェクト変換行列を形成するために使用される全体的な回転行列を作成します。 ただし、このメソッドはオブジェクト空間で一連の回転を生成します。つまり、(90、0、90)のベクトルをメソッドに渡すと、効果的に(90、90、0)のワールド空間で回転が作成されます。 回転ベクトルの各コンポーネントが、それぞれのワールド空間に配置された軸を中心に回転することを常に保証する方法はありますか? 編集: これは、現在起こっていることのアニメーションです。赤ではなく、青の軸を中心に回転する方法が必要です。 編集2: ただ、オイラー角を含む解決策を探しているのではなく、単に世界の軸を中心とした複数の回転の変換を表現できる方法を探していることに注意してください。

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

2
2Dキャラクターを通常の斜面に立てる方法は?
Unity3D(2Dモード)でこのキャラクターを持っています...このようなスロープで、 しかし、私はキャラクターが赤い線に沿って立つことを望んでいます。 Unity3dで作成するにはどうすればよいですか? このセットアップがあります。 私は動きに単純なAddforceを使用しています... z位置の制約を削除すると、ローリングなどの奇妙な動きになります。

3
固定軸を中心にオブジェクトを回転
私はアプリのユーザーに、画面上で指をドラッグして、画面の中央に描かれた3Dオブジェクトを回転させようとしています。画面上の水平方向の動きは、固定されたY軸の周りの回転を意味し、垂直方向の動きは、X軸の周りの回転を意味します。私が抱えている問題は、1つの軸の周りの回転を許可するだけでオブジェクトが正常に回転するのに、2番目の回転を導入するとすぐにオブジェクトが期待どおりに回転しないことです。 これが何が起こっているかの写真です: 青い軸は固定軸を表します。この固定された青い軸を持つ画面を描きます。これは、オブジェクトに関連して回転させたいものです。何が起こっているのかは赤です。 私が知っていることは次のとおりです。 Y(0、1、0)を中心とした最初の回転により、モデルは青いスペース(このスペースAと呼ばれる)から別のスペース(このスペースBと呼ばれる)に移動します。 ベクトル(1、0、0)を使用して再度回転しようとすると、スペースAではなくスペースBでx軸を中心に回転します。 私が知っていることを考えると、私が試したものがあります(簡潔にするためにW座標を除外します): 最初に、クォータニオンを使用してY(0、1、0)を中心に回転します。 回転Yクォータニオンをマトリックスに変換します。 Y回転行列に固定軸x Vector(1、0、0)を掛けて、新しい空間に関連するX軸を取得します。 クォータニオンを使用して、この新しいXベクトルを中心に回転します。 コードは次のとおりです。 private float[] rotationMatrix() { final float[] xAxis = {1f, 0f, 0f, 1f}; final float[] yAxis = {0f, 1f, 0f, 1f}; float[] rotationY = Quaternion.fromAxisAngle(yAxis, -angleX).toMatrix(); // multiply x axis by rotationY to put it in object space …

2
累積マトリックス変換を使用してジンバルロック問題を解決する方法
ジェイソンL.マッケソンのオンライン「Learning Modern 3D Graphics Programming」本を読んでいます 今のところ、ジンバルロックの問題と、クォータニオンを使用してそれを解決する方法について説明しています。 ただし、ここ、クォータニオンページで。 問題の一部は、方向を一連の3つの累積軸回転として保存しようとしていることです。方向は回転ではなく方向です。そして、向きは確かに一連の回転ではありません。そのため、船の向きを特定の量としての向きとして扱う必要があります。 これは私が混乱し始める最初の場所だと思います。理由は、向きと回転の劇的な違いが見えないからです。また、方向が一連の回転で表現できない理由もわかりません... また: この目的に向けた最初の考えは、マトリックスとしての方向を維持することです。向きを変更するときが来たら、この行列に変換を適用し、結果を新しい現在の向きとして保存します。 これは、現在の方向に適用されるすべてのヨー、ピッチ、およびロールが、現在の方向に対して相対的であることを意味します。まさにそれが私たちに必要なものです。ユーザーが正のヨーを適用する場合、そのヨーは、ある固定座標系ではなく、現在のポインティングの位置を基準にして回転させます。 概念は理解していますが、行列変換の累積がこの問題の解決策である場合、前ページで示したコードがそれだけではないことを理解していません。 コードは次のとおりです。 void display() { glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClearDepth(1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glutil::MatrixStack currMatrix; currMatrix.Translate(glm::vec3(0.0f, 0.0f, -200.0f)); currMatrix.RotateX(g_angles.fAngleX); DrawGimbal(currMatrix, GIMBAL_X_AXIS, glm::vec4(0.4f, 0.4f, 1.0f, 1.0f)); currMatrix.RotateY(g_angles.fAngleY); DrawGimbal(currMatrix, GIMBAL_Y_AXIS, glm::vec4(0.0f, 1.0f, 0.0f, 1.0f)); currMatrix.RotateZ(g_angles.fAngleZ); DrawGimbal(currMatrix, GIMBAL_Z_AXIS, glm::vec4(1.0f, 0.3f, 0.3f, …

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