問題タブ [arcball]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
714 参照

opengl - OpenGL - アークボールの回転を制限する

ウィンドウにレンダリングされた単純な赤い四角形があり、それを任意の方向に回転させるためにアークボールを作成しました。NeHe の Arcball Rotation tutorial のコードに従っていました 。

問題は、長方形がレンダリングされてマウスの左ボタンがクリックされると、ウィンドウ内でコマのように回転することです。マウスのクリック、ドラッグ、ストップの更新は、マウスが移動するたびに発生します。これが、マウスがそのように回転する理由です。クリック、ドラッグ、ストップの間だけ回転を制限する方法がわかりません。回転を制限するにはどうすればよいですか? 私はこれを約4〜5日間デバッグしようとしていますが、うまくいきません。

元の Arcball.h ファイルと Arcball.cpp ファイルをプロジェクトに追加し、ヘッダー ファイルに 1 つの変更を加えました。この行で Arcball_t クラスのデフォルトのコンストラクターを作成しました-

ArcBall_t() {};

元のプロジェクトからの他の唯一の変更点は、Update()関数呼び出しをコードにスローしたことです。

編集:ルーチンのcase WM_MOUSEMOVE:ハンドラー内にチェックを挿入することで、シーンの回転を制御できない問題を修正しました。WndProc()チェックは:if(isClicked == true) { //code }で、これでうまくいったようです。こまのように回転しなくなりました。ただし、回転を細かく制御することはまだできません。クリックしてドラッグして離す間、コマのように回転します。

0 投票する
1 に答える
531 参照

opengl - GLM: 回転時にクリックしたポイントをマウスの下に保つにはどうすればよいですか?

標準のアークボール回転を使用して、メッシュをその原点を中心に回転させようとしています。3D オブジェクトをクリックするたびに、マウスからレイをキャストして交点を見つけます。3D オブジェクトの原点から交点までの距離を測定して、その回転で「アークボール」として使用される球を作成します (マウスが離されるまで)。すべての回転の開始時にこれを行う理由は、クリックしたポイントをマウスの下に残しておきたいからです。オブジェクトは正しく回転します。回転の大きさが小さくなり、その結果、クリックしたポイントがマウスの下に残りません。次の例では、立方体を回転させようとしています。最初にクリックしたポイントを追跡するために、テクスチャに黒い四角形をペイントします。問題のビデオは次のとおりです。

http://youtu.be/x8rsqq1Qdfo

これは、マウスの位置とクリック時に計算された球の半径 (arcballRadius) に基づいてアークボール ベクトルを取得する関数です (立方体オブジェクトの位置が考慮されていないのが心配です。オブジェクトは (0,0,z) にあります:

マウスを動かすたびに

クリックしたポイントをマウスの下に残すにはどうすればよいですか?

0 投票する
1 に答える
437 参照

c++ - Directxでアークボールを使用してオブジェクトを移動している間、回転中心を固定する方法は?

インターネットには、OpenGL でのアークボールの使用に関する情報がいくつかありますが、DirectX についてはあまり情報がありません。Microsoft DirectX SDK のアークボール関数のバージョンを使用しています。マウスの動き (fDeltaX および fDeltaY) の変化によって平行移動行列を変更することで、オブジェクトの位置をシフトします。

問題は、回転の中心がオブジェクトの中心と同じであるため、回転の中心がオブジェクトとともに移動することです。回転中心を固定するにはどうすればよいですか?

画面上にオブジェクトを描画するには、オブジェクトの中心位置を使用してワールド マトリックスを作成し、回転マトリックスを掛けてから平行移動マトリックスを掛けます。

次に、描画用にそのワールド マトリックスを指定します。

別の回転中心が必要ですか? その場合、どのように使用しますか? または、オブジェクトの移動を補正する方法はありますか?

この問題を示すために、Visual Studio 2012 で非常に単純なプログラムを作成しました。gametutorials.com の Rotating Cube チュートリアルにアークボールを追加し、フォルダーを圧縮して、問題の説明といくつかの画面イメージと共にここに投稿しました。

マウスの移動量に応じて平行移動行列を設定し、それを回転行列で乗算し、その値の 2 つを回転中心:

次に、アークボールの平行移動行列を変更して、回転中心の移動を補正する必要があります。

ただし、回転中心が静止したままオブジェクトが移動するように、オブジェクトの移動と対応する回転中心の移動を組み合わせる方法を理解できませんでした。誰もこれを行う方法を知っていますか?

0 投票する
1 に答える
399 参照

c++ - Arcball camera locked when parallel to up vector

I'm currently in the process of finishing the implementation for a camera that functions in the same way as the camera in Maya. The part I'm stuck in the tumble functionality.

The problem is the following: the tumble feature works fine so long as the position of the camera is not parallel with the up vector (currently defined to be (0, 1, 0)). As soon as the camera becomes parallel with this vector (so it is looking straight up or down), the camera locks in place and will only rotate around the up vector instead of continuing to roll.

This question has already been asked here, unfortunately there is no actual solution to the problem. For reference, I also tried updating the up vector as I rotated the camera, but the resulting behaviour is not what I require (the view rolls as a result of the new orientation).

Here's the code for my camera:

The vector library I'm using is GLM. Here's a quick reference on the custom types used here:

mImpl is a PIMPL that contains the following members: