1

さまざまな角度と位置に平面の壁があります。カメラを回転させて、焦点の合った平面をまっすぐ見たいのですが。次のようにクリックした平面にトゥイーンするダミーの平面(lookAtMe)を作成しました。

    private function planeClicked(e:InteractiveScene3DEvent):void 
    {
        lookAtTarget.copyTransform(this);

        var time:Number = 1;
        var tweenObject:Object = {};
        tweenObject.x = lookAtTarget.x;
        tweenObject.y = lookAtTarget.y;
        tweenObject.z = lookAtTarget.z;
        tweenObject.rotationX = lookAtTarget.rotationX;
        tweenObject.rotationY = lookAtTarget.rotationY;
        tweenObject.rotationZ = lookAtTarget.rotationZ;
        tweenObject.onUpdate = onSeatTween;
        tweenObject.ease = Cubic.easeInOut;
        TweenMax.to(lookAtMe, time, tweenObject);
    }

    private function onSeatTween():void
    {
        camera.lookAt(lookAtMe);
    }

カメラはlooAtMe平面の中心にありますが、選択した平面が真っ直ぐになるように回転しません。

助けてください!ありがとう。

4

3 に答える 3

2

あなたの飛行機が正常であることを知っていましたか?それは本当です、それは飛行機がどちら側を向いているかを決定します。法線は、長さが1のベクトルです。

平面上の3つの3次元点がわかっている場合は、平面の法線を計算できます。例:中央、上部の中央、右側の中央。C中心、上部M1の中心、右側の中心と呼びましょうM2

法線を計算する方法は次のとおりです。

Cross(C - M1, C - M2)

(外積がわからない場合は調べてください)

これにより、矢印で定義されたベクトルが得られます。

代替テキスト

では、その情報をどのように使用できるでしょうか。平面とその中心の法線を知ると、次のように言うことができます。

camera_position = planet_position +(plane_normal *距離)

これにより、カメラが平面からある程度離れた正しい位置に配置されます。

camera_direction = plain_normal * -1

これにより、カメラは平面を見るようになります。

ただし、ActionScript 3は、カメラの外観関数をベクトルで定義しているとは思いません。オブジェクトを使用していると思います。たとえば、平面の中心に小さな目に見えないオブジェクトを配置し、それにカメラを向けることができます。それはあなたが望む結果を与えるはずです。

于 2010-01-06T18:21:00.613 に答える
1

逆方向に作業したいと思います。最初に、見たい平面上の点(X、Y、Z)を(平均化して?)選択します。次に、希望するポイントから距離Dを選択します。

次に、平面http://mathworld.wolfram.com/Plane.html ax + by + cz = d(異なるd)の方程式を取り、そこから法線ベクトルn =(a、b、c)を推定します。これを正規化し、Dを掛けて、N =(A、B、C)を取得します。これで、(X、Y、Z)+/-(A、B、C)から見ることができるポイントは2つだけになります。

だから、あなたが後ろから見たいのか、前から見たいのかを選んでください-それは+対-の選択に影響します、私はどちらがどちらであるかわかりません。

于 2010-01-06T18:54:51.327 に答える
1

PV3D.orgブログには、まさにあなたが探しているものであるはずの実用的な例があります。

于 2010-01-12T18:20:22.927 に答える