0

3Dスプライトの派生位置スケーリングを取得し、それらを2Dスプライトに設定しようとしています。

私はこのように最初の部分を行うことができました:

        var p:Point = sprite3d.local3DToGlobal(new Vector3D(0,0,0));
        billboard.x = p.x;
        billboard.y = p.y;

しかし、スケーリング部分を正しく取得できません。私はこれを試しています:

        var mat:Matrix3D = sprite3d.transform.getRelativeMatrix3D(stage); // get derived matrix(?)
        var scaleV:Vector3D = mat.decompose()[2]; // get scaling vector from derived matrix
        var scale:Number = scaleV.length;
        billboard.scaleX = scale;
        billboard.scaleY = scale;

...しかし、結果は明らかに間違っています。

PS。私が何を達成しようとしているのかと尋ねられるかもしれません。「ビルボード」の3Dスプライト、つまり回転を除くすべての3D変換の影響を受けるスプライトを作成しようとしています。したがって、これらのスプライトは常に「カメラ」に面しています。

4

1 に答える 1

0

ドキュメントには、ベクトルは正しく取得されると記載されていますが、その係数が合計されて単一の長さの値を形成しているようには見えません。最初にスケーリングされていないスプライトを試して、その長さとしてsqrt(3)値を受け取っているかどうかを確認してください。はいの場合、ベクトルの0番目の要素をXスケールとして使用し、1番目をYスケールとして使用する必要があります。2番目の要素をどうするかわかりません(この場合はZスケールになり、両方のスケールをそれで割るか、乗算します)。お役に立てば幸いです。

于 2012-10-06T17:02:50.633 に答える