3

氏は、WebGL ライブラリ Three.js を使用してゲーム エンジンに取り組んできました。ユーザーが立っている顔を見つけることができるポイントまで、基本的な地形衝突が機能しています。面の頂点の平均または最大 Y 位置を使用するだけでは不十分です。

「立っている」地形面に対するオブジェクトの正確な Y 位置を見つけるために使用できる式は何ですか? 面の 4 つの頂点位置とオブジェクトのベクトル位置を知っていると仮定します。

ここに画像の説明を入力

平面は、高さマップによって拡張された THREE.PlaneGeometry(2000,2000,128,128) です。上の画像はその顔の1つです。

4

2 に答える 2

5

コメントにコードを入れることができないので、ここに入れます。計算する必要はありません。three.js にお任せください。次のようなことができます。

var plane = new THREE.Plane();
plane.setFromCoplanarPoints (v1, v2, v3);

// x, y, z: position of your object
var ray = new THREE.Ray (new THREE.Vector3(x, y, z), new THREE.Vector3(0, 1, 0));
var where = ray.intersectPlane (plane);

Vector3 の「where」から、y コンポーネントを使用してオブジェクトの位置を変更します。

于 2013-04-18T11:36:29.927 に答える
0

オブジェクトが立っている面の高さを簡単に見つけることができます

const down = new THREE.Vector3(0, -1, 0);
const raycaster = new THREE.Raycaster();

raycaster.set(obj.position, down);
const collisionResults = raycaster.intersectObject(terrain);

if (collisionResults.length > 0 && collisionResults[0].distance > 0)
   const pointHeight = collisionResults[0].point.y;

この時点で、オブジェクトの y 座標から pointHeight を引くだけで、相対的な高さが得られます。

const relativeHeight = obj.position.y - pointHeight;
于 2017-04-10T19:40:05.800 に答える