2016-09-27 14 views
0

このPerspective行列の3番目の行の目的は何ですか?元のz座標を維持しても、他の点の前に描画する点を決めることはできませんか? cell(3,3)を1、cell(3,4)を0に置き換えると、ポイントは正しいxとyの位置に描画され、4番目の座標は均等であるとみなされます。私は何が欠けていますか?ありがとう!彼らは比較可能性を得るためにあるようPerspective投影行列の3番目の行の理解

enter image description here

+1

この行は、[near、far]の範囲を[0,1]にスケーリングしてクリッピングすると考えています。この変換の後、見ることになるすべてが[0,1]の範囲にあり、残りは無視されます。 – kolenda

答えて

0

はい、理論的には、あなたは、z値を保つことができます。しかし、練習はそれを許さない。そして、実際には、このマトリックスはそれ自身では機能しません。しかし、私はそれに後でしましょう。

Perspective Z

あなたが見ることができるように、得られた深さのままである:ここで入力されたz座標対1のニアクリッピング面を仮定し、Z投影結果として生じる図5のファークリッピング平面であります1と5の間の同じ範囲ですが、少し座屈しています。

投影後に得られるz値(正規化されたデバイス座標)がデプスバッファに書き込まれます(OpenGLはウィンドウ座標への追加変換を実行しますが、今は無視します) 。深度バッファは、通常24または32ビットの固定解像度を有する。理論的には、深さを浮動小数点数としてエンコードできますが、これは多くの精度を浪費します。そして、ちらつきを避けるために、多くの場合、正確な深度バッファが不可欠です。

代わりに、zバッファはznearとzfarの間の適切な範囲にスケーリングされた何らかの種類の整数としてエンコードされます。従って、上図の縦軸は等間隔に分割されている。今度は、座屈により、深度軸上のより広い範囲に広がるznearに近い点が得られます。したがって、特定のz範囲は、その点がカメラの近くにある場合にはより大きな奥行き範囲で、遠くにある場合にはより小さい奥行き範囲で符号化される。これにより、カメラの近くで精度が高くなります(奥行き軸は一様に細分化されています)。これは通常あなたが望むものです。カメラに非常に近いオブジェクトは非常に詳細に見ることができ、深度バッファの問題は明らかです。しかしながら、非常に遠くにある物体ははっきりと見ることができず、高い深度の分解能の必要はない。

前述のように、このマトリックスはそれ自身で直接使用することはできません。これは、正規化されたデバイス座標のz値がDirectXでは[0,1]の範囲に、OpenGLでは[-1,1]の範囲にあるとみなされるためです。ここで、下限はニアクリッピングプレーンの深さを表し、 upperは遠いクリッピング平面を表します。したがって、これらのAPIは、いくつかの追加の変換が適用されない限り、結果の深さでは機能しません。

関連する問題