光線投影がどのように機能するかを理解したいです。ほとんどどこにいても、次のようなコードを取得します。
new THREE.Vector3(mouseX, mouseY, 0.5);
z 位置の 0.5 について混乱しています。私の理解では、z=1 plane
(ではないz=0.5 plane
)に投影しています。では、代わりにこのように使用するべきではありませんか?
new THREE.Vector3(mouseX, mouseY, 1.0);
光線投影がどのように機能するかを理解したいです。ほとんどどこにいても、次のようなコードを取得します。
new THREE.Vector3(mouseX, mouseY, 0.5);
z 位置の 0.5 について混乱しています。私の理解では、z=1 plane
(ではないz=0.5 plane
)に投影しています。では、代わりにこのように使用するべきではありませんか?
new THREE.Vector3(mouseX, mouseY, 1.0);
よく使われるパターンは次のようなものです。
var vector = new THREE.Vector3(
( event.clientX / window.innerWidth ) * 2 - 1,
- ( event.clientY / window.innerHeight ) * 2 + 1,
0.5,
);
これは、Normalized Device Coordinate (NDC) 空間内のポイントです。
関数
projector.unprojectVector( vector, camera );
は、NDC 空間からワールド空間へのマッピングです。
の値0.5
はvector.z
、-1 から 1 の間の任意の値に設定できます。
なんで?これらのポイントはすべて NDC 空間の z 軸に平行な線上にあり、ワールド空間のカメラから発せられる同じ光線にすべてマッピングされるためです。
設定z = -1
はニア プレーン上のポイントにマッピングされます。z = 1
ファープレーン。
簡単に言えz
ば、-1 から 1 の間であれば、 の値が何であるかは問題ではありません。