私は2つの関数、perspectiveLHと perspectiveFieldOfViewLHについて少し混乱しています
まず、perspectiveLH で使用される行列を導出できます。
this.copyRawDataFrom(Vector.<Number>([
2.0 * zNear / width, 0.0, 0.0, 0.0,
0.0, 2.0 * zNear / height, 0.0, 0.0,
0.0, 0.0, zFar / (zFar - zNear), 1.0,
0.0, 0.0, zNear * zFar / (zNear - zFar), 0.0
]));
私が正しいことを理解していれば、このマトリックスを使用して、ワールド ポイント (WPx、WPy、Wpz) をCVV (正規ビュー ボリューム) に透視するか、NDC (正規化されたデバイス座標) ポイント (CPx'、CPy'、CPz') として呼び出すことができます。
しかし、マトリックスは perspectiveFieldOfViewLH で使用されます。
var yScale:Number = 1.0 / Math.tan(fieldOfViewY / 2.0);
var xScale:Number = yScale / aspectRatio;
this.copyRawDataFrom(Vector.<Number>([
xScale, 0.0, 0.0, 0.0,
0.0, yScale, 0.0, 0.0,
0.0, 0.0, zFar / (zFar - zNear), 1.0,
0.0, 0.0, (zNear * zFar) / (zNear - zFar), 0.0
]));
xScale と yScale の意味がわかりません。
FOV(Field Of View) でマトリックスを設定できることはわかっていますが、私の計算は 1.0 / Math.tan(fieldOfViewY / 2.0) とは異なるようです。
私の計算に関する詳細情報が必要な場合は、次のリンクを確認してください。
http://blog.csdn.net/popy007/article/details/4091967
申し訳ありませんが英語で書いていません(私が書いたものでもありません)
また、この記事のデモ コードでは
http://www.adobe.com/devnet/flashplayer/articles/perspective-projection.html
projectionTransform = new PerspectiveMatrix3D();
var aspect:Number = 4 / 3;
var zNear:Number = 0.1;
var zFar:Number = 1000;
var fov:Number = 45 * Math.PI / 180;
projectionTransform.perspectiveFieldOfViewLH(fov, aspect, zNear, zFar);
//projectionTransform.perspectiveLH(800, 600, 0.1, 1000);
perspectiveFieldOfViewLH マトリックスは正常に機能しますが、マトリックスを次のように変更すると
projectionTransform.perspectiveLH(800, 600, 0.1, 1000)
その後、グラフを取得できません
しかし、通常のパースペクティブ マトリックスまたは FOV マトリックスを使用すると、同じ結果が得られますか?
また、Stage3D レンダリング パイプラインについて少し混乱しています。これらのパースペクティブを使用すると、ワールド ポイントが CVV ポイントに変換され、変形します。
Stage3D は、ラスタライズ中に変形したグラフを通常の状態に戻しますか、それとも手動で行う必要がありますか。または、レンダリングパイプラインについて完全に間違っています。
ありがとう