2

thingiview.js、Three.js、および trackballControls を使用して、STL ファイルをアップロードし、それをキャンバスにレンダリングできるシステムをまとめました。trackballControls は、いくつかの調整を行うことで非常に優れていますが、問題が発生しています。

グリッド/プレーンの中心ではなく、マウス カーソルのポイントを拡大したいと思います。

マウスの画面上の座標を取得して追跡するために単純なcaptureEventを実行しましたが、それを行うために制御スキームをどこでタップするかを理解するのに問題があります。

私は _zoomStart / _zoomEnd のものをチェックアウトしました(「y」から外れると少し混乱します。「z」になると思いました)。しかし、_zoomStart.x を追加しようとすると、基本的に無視されます。

今では私は達人ではないかもしれませんが、普段は快適にぶらぶらしています。

また、パンするときに、グリッド/プレーンの中心ではなく、オブジェクトの中心からズームと回転が行われるようにしたいと思います。

投稿や例を何日も検索してきましたが、実際には答えが見つかりません。

私は正しい場所を見ていない/正しい方向に向かっていないと確信しています。正しい方向への有用なナッジ (または、できれば迅速なキック) は、本当に感謝されます。

編集

this.zoomCamera = function () {

        var factor = 1.0 + ( _zoomEnd.y - _zoomStart.y ) * _this.zoomSpeed;

        if ( factor !== 1.0 && factor > 0.0 ) {

            _eye.multiplyScalar( factor );

            if ( _this.staticMoving ) {

                _zoomStart.copy( _zoomEnd );

            } else {

                _zoomStart.y += ( _zoomEnd.y - _zoomStart.y ) * this.dynamicDampingFactor;

            }

        }

    };

上記は、ズームの変更に入る場所だと思います。私が理解していないのは、_zoomStart.y に設定されていることです。しかし、そのままでは、どのように x を実装するのでしょうか?

つまり、_zoomStart と _zoomEnd が Vector2 の場合、上記のコードのどこで x を定義するのでしょうか?

困惑した

4

2 に答える 2

1

Trackballcontrolsのズームインは、実際にはズームではありません(つまり、カメラの視野が設定されます)。2つのオブジェクトがコントロール内で移動しているところです...もう1つはカメラ(this.object)で、もう1つはカメラが見ているポイント(this.target)です。私はトラックボールコントロールであまり遊んだことがありませんが、ターゲットにまったく触れないだろうと推測するのは危険です(したがって、すべての動きとズームはそれを中心に展開します)。

次のように、onclickでターゲットを変更してみてください。

mycontrols.target = new THREE.Vector3(newx, newy, newz);

他のいくつかのTrackballcontrols内部変数を更新/リセットする必要があるかもしれませんが、それも同じように機能する可能性があります。

2D x/yマウス座標から3Dx/ y / z座標を取得するには、レイキャスティングまたはオブジェクトピッキングを検索することをお勧めします。多くの例が見つかるはずです。

于 2013-01-22T16:54:48.080 に答える
0

トリックは、_zoomStart_zoomEndがタッチ ズーム用に作成され、マウス ホイールを使用してズームするときに、「どれだけズームするか」を表す 1 つの変数のみを渡す必要があることです。プログラマーは新しい変数を作成しませんでしたが、_zoom###.yコンポーネントを使用しました。

したがって、 _zoomStart_zoomEndはズームがどのように実行されるかについての情報を提供しません。これらの変数には「命令」のみが含まれます。次に、ソフトウェアはそれを、必要なカメラの動きを 3D で表現する「ズームパン」ベクトルに変換します。

于 2015-10-26T13:46:00.537 に答える