13

カメラの前にオブジェクトを配置しようとしていますが、できませんでした。

カメラを動かす FlyControls を使用していますが、その前にオブジェクトを配置したいと考えています。これどうやってするの?さまざまな方法を試しましたが、うまくいきませんでした。

ありがとう

4

5 に答える 5

22

オブジェクトをカメラの子にして、前方に移動しようとしましたか?

camera.add(nanobot);
nanobot.position.set(0,0,-100);

上記は、ナノボットをカメラの前に永続的に 100 ユニット配置します...そして、あなたがそうするまでそこにとどまります:

camera.remove(nanobot);

...その時点で、他の方法を使用して移動するまで、グローバル空間の場所にとどまる必要があります。

于 2013-06-22T04:48:19.487 に答える
1
var cx, cy, cz, lx, ly, lz;



dir.set(0,0,-1);
dir.applyAxisAngle(0,camera.rotation.x);
dir.applyAxisAngle(1,camera.rotation.y);
dir.applyAxisAngle(2,camera.rotation.z);
var dist = 100;

cx = camera.position.x;
cy = camera.position.y;
cz = camera.position.z;

lx = dir.x;
ly = dir.y;
lz = dir.z;


var l;

l = Math.sqrt((dist*dist)/(lx*lx+ly*ly+lz*lz));

var x1, x2;
var y1, y2;
var z1, z2;     

x1 = cx + lx*l;
x2 = cx - lx*l;

y1 = cy + ly*l;
y2 = cy - ly*l;

z1 = cz + lz*l;
z2 = cz - lz*l;


nanobot.position.set(x1, y1, z1 );

カメラの方向の方向ベクトルを計算してから、チャンバーを通る線を計算し、この線上にカメラからの距離に点を置きます

于 2013-06-21T13:52:52.340 に答える
1

別の方法は次のとおりです。カメラのクォータニオンをベクトルに適用します (distオブジェクトをカメラからどれだけ離すかです)。

var vec = new THREE.Vector3( 0, 0, -dist );
vec.applyQuaternion( camera.quaternion );

nanobot.position.copy( vec );

オブジェクトをカメラの子にすることは私にとってはうまくいきませんでしたが、この applyQuarterion メソッドはうまくいきました (@WestLangley の回答から適応: Three.js: Get the Direction in which the Camera is Looking )

回転を常にカメラに向けたい場合は、カメラから回転をコピーすることもできます。この後でオブジェクトの正確な位置を微調整したい場合は、translateX、translateY などを使用できます。

于 2014-11-21T15:51:49.623 に答える