1

現在、 three.jsを使用して VR Web アプリを作成しています。カメラ コントロールとして、Google cardboard three.js デモで使用されているデバイスの方向コントロールを使用しています。

私がする必要があるのは、これにキーボードコントロールを追加することです(たとえば、上向き矢印で進むなど)。ここでは、カメラを 2 つの軸 (x と z) で動かしてみました。

if (e.keyCode == '38') {
    camera.position.set(0, 10, camera.position.z+4);

    controls.target.set(
        camera.position.x +4,
        camera.position.y,
        camera.position.z
    );
    effect.render(scene, camera);
...

ただし、キャラクターが見ている場所に相対的に移動させたいと考えています (たとえば、一方向を見て上向き矢印を押すと、キャラクターが見ている方向に移動します)。一人称視点みたいな。

これがどのように行われるかについて誰にもアイデアがありますか? three.js の一人称コントロールを使用してみましたが、これにより、VR ゲームに不可欠なヘッド トラッキングが排除されます。

どんな答えでも大歓迎です。(私のソース コードは、実質的には、キーの押下を検出する機能が追加された Google cardboard three.js デモ コードです)

4

1 に答える 1

1

私は別のアプローチでこれを解決しました。シーン内で動く object3d を作成しました。モデルとカメラはこのオブジェクトの子です。

私はカメラでオブジェクト3dを回転させ、同時にモデルを反対方向に回転させています。カメラオブジェクトを回転させると、方向を保っているように見えます。オブジェクトを移動したいときはtranslateX、カメラでオブジェクトを動かし、モデルの回転を 0 にします。これでうまくいきました。

長距離(私は何百万ものユニットを持っています)では、ぎくしゃくし始めました。理由は精度の低下です。

オブジェクトの位置を 0,0,0 に保ち、他のすべてのものを反対方向に移動することで解決しました。これにより、モデルは依然として右回転の 0,0,0 座標上にあり、世界は動き回っています。

最も簡単な例:

あなたは次のようなことをしようとしています

scene.add(character_model);
scene.add(camera);
//camera.rotate ....
character_model.translateX(1);
character_model.rotateX(1);
//etc ...

ピボット (character_model) を中心にカメラを動かそうとしていますが、これは複雑すぎる数学です。

試す:

var controls_dimension = new THREE.Object3D();
scene.add(controls_dimension);
controls_dimension.add(character_model);
controls_dimension.add(camera);

//use controls to rotate with this object, not with character_model
controls_dimension.rotateX(2);

// in the same rotate model to opposite direction. You can make 
// illusion of rotating camera, not a model.
character_model.rotateX(2*-1);

/* 
when you want to go in camera direction=controls_dimension=controls_dimension.translateX(1) 
and we moving (you most only animate model rotation to controls_dimension.rotation)
*/
于 2015-06-02T22:00:12.100 に答える