non vorrei lavorare

ブログ名の通りです。javascript three.js mruby rust OCaml golang julialang blender

Ammo.jsのbtRaycastVehicleを基準にしたThree.jsのカメラの指定ではまった件

こんばんは、次男がいまだにおむつが取れずに家計がピンチな@kjunichiです。

背景

子供たちとくるまのゲームを作ろうとWebベースで進めている。

先日、ようやく物理エンジンを導入したところ、自車のやや後ろから眺めた視点からの カメラの指定方法で苦戦した。

自車のやや後方からの視点を実現するには

const campos = new THREE.Vector3();

// ...

campos.set(0, 2, -6.5);
const q = chassisMesh.getWorldQuaternion();
campos.applyQuaternion(q);
campos.add(chassisMesh.position);
camera.position.copy(campos);
camera.lookAt(chassisMesh.position);

Object3D#getWorldQuaternionで自車のメッシュからクォータニオンをワールド座標系で取得できる。 このクォータニオンを自車の後方を指すベクトルに適用し、 適用後のベクトルを自車の位置ベクトルに加えることでカメラの位置ベクトルが算出できる。 カメラのターゲットは自社の位置ベクトルにして完成。

関連記事