1

シーンではなく、カメラを基準にして立方体を配置しようとしています。シーンに配置するには(表示させる必要があります)、立方体のカメラ空間座標に対応するシーン座標を知る必要があります。この関数「projectionMatrixInverse」をTHREE.Cameraで見つけました。これには「multiplyVector3」と呼ばれる優れた関数があり、ベクトル(1,1,1)を次のようなシーン空間に変換できるようになることを望んでいました。

var camera, myvec, multvec; // (and others)
camera = new THREE.OrthographicCamera( window.innerWidth / - 2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / - 2, - 2000, 1000 );
camera.position.x = 200;
camera.position.y = 100;
camera.position.z = 200;

myvec = new THREE.Vector3(1,1,1);
console.log("myvec: ", myvec);
multvec = camera.projectionMatrixInverse.multiplyVector3(THREE.Vector3(1,1,1));
console.log("multvec: ", multvec);

事は、私が得るコンソールで:

myvec: Object { x=1, y=1, z=1}
TypeError: v is undefined
var vx = v.x, vy = v.y, vz = v.z;

myvecmultiplyVector3は、コンソールがオブジェクトであると言っていても、単にmyを受け入れないか、未定義であると言います。理解できません。

4

2 に答える 2

3

カメラは座標系の原点に配置され、負のZ軸を見下ろします。カメラの真正面のポイントには、の形式のカメラ座標があります。( 0, 0, z )ここzで、は負の数です。

ポイントを変換しますp

p = new THREE.Vector3(); // create once and reuse if you can

p.set( x, y, z );

カメラの座標から世界の座標へのように:

p.applyMatrix4( camera.matrixWorld );

camera.matrixWorldデフォルトではフレームごとに更新されますが、必要に応じて、を呼び出すことで自分で更新できます。camera.updateMatrixWorld();

three.js r.95

于 2012-08-26T21:26:35.070 に答える
3

これはあなたが求めているものかもしれません:

scene.add( camera );

brick.position.set( 0, 0, -1 );
camera.add( brick );
于 2012-08-27T07:59:48.320 に答える