0

スペースに 2 つの正方形があり、頂点を持つ立方体 1 の前後の壁のようなものです。

x=-2 y=-1138 z=-2;
x=-2 y=-1134 z=-2;
x=2 y=-1138 z=-2;
x=2 y=-1134 z=-2

2番目

x=-2 y=1134 z=2;
x=-2 y=1138 z=2;
x=2 y=1134 z=2;
x=2 y=1138 z=2

このようにカメラからの距離を計算すると

var point1 = this.camera.matrixWorld.getPosition().clone();
var point2 = this.mesh.cubePlane3.children[0].matrixWorld.getPosition().clone();
var distance = point1.distanceTo( point2 );  

両方の 20,09 の距離は常に同じです。これらの正方形は空間内で回転するため、回転のみが変更され、立方体でカメラに近い 3 つの壁が表示されず、次の 3 つの壁が表示されることを行うには、どの壁がカメラに近いかを何らかの方法で見つける必要があります。

そして明らかに、私はこの背後にある数学を理解していません。たとえば、互いに隣り合っている壁が y に対して正の座標を持ち、次の負の座標を持っている理由 + z 軸上で 1 秒よりも近い場合、距離が同じ値である理由などです。壁に近づく方法を教えてください。ありがとうございました

4

2 に答える 2

2

各ジオメトリには computeBoundingBox 関数があります。したがって、次のことができます。 var bbox = geometry.computeBoundingBox(); 関心のあるジオメトリごとに bbox.center() を使用してジオメトリの中心を取得します。より高速な計算は、ジオメトリで computeBoundingSphere を使用することです。次に、中心とカメラの位置の関係を比較します。

于 2013-01-30T17:53:21.393 に答える
0

このコードで computeBoundingBox を使用しました

    this.mesh[cubePlane[0]].children[0].geometry.computeBoundingBox();

    var position = new THREE.Vector3();
    position.sub( this.mesh[cubePlane[0]].children[0].geometry.boundingBox.max, this.mesh[cubePlane[0]].children[0].geometry.boundingBox.min );
    position.multiplyScalar( 0.5 );
    position.addSelf(this.mesh[cubePlane[0]].children[0].geometry.boundingBox.min );

    this.mesh[cubePlane[0]].children[0].matrixWorld.multiplyVector3( position );

    var point1 = this.camera.matrixWorld.getPosition().clone();
    var point2 = position;
    var distance = point1.distanceTo( point2 );

そしてそれはうまくいくので、あなたのアドバイスに感謝します:)

于 2013-01-31T09:58:01.547 に答える