LWJGL で作業して、独自のマトリックスを使用して単純なクワッドを表示しようとしています。私はしばらく探し回っていて、いくつかのパースペクティブ マトリックスの実装を見つけました。特に次の 2 つです。
[cot(fov/2)/a 0 0 0]
[0 cot(fov/2) 0 0]
[0 0 -f/(f-n) -1]
[0 0 -f*n/(f-n) 0]
と:
[cot(fov/2)/a 0 0 0]
[0 cot(fov/2) 0 0]
[0 0 -(f+n)/(f-n) -1]
[0 0 -(2*f*n)/(f-n) 0]
予想どおり、これらは両方とも同じ効果を提供します(こことここから取得しました、 それぞれ)。問題は、これにモデルビュー行列、次に頂点を掛けてから、x、y、z の各値をその w の値で割ると画面座標が得られることを理解していることです。より具体的には、これらのいずれかにモデルビュー マトリックスを掛けてから頂点 (10, 10, 0, 1) を掛けると、aw=0 になります。それ自体が大きな打撃です。行列が間違っているか、何かが完全に欠落していると結論付けます。私の実際のテスト プログラムでは、カメラの位置が (0,0,0) にあり、回転がない場合でも、頂点が画面に表示されません。正と負の多くの異なる z 値を試して、それが単なるクリッピング プレーンであるかどうかを確認しました。ここで何か不足していますか?
編集: 何度もチェックした後、直面している問題を絞り込みました。最大の問題は、z 軸が指定した範囲 (n から f) に再マッピングされていないように見えることです。オブジェクトを z 軸に沿って移動すると、オブジェクトが少しズームインまたはズームアウトし、範囲 [-1, 1] を超えると存在しなくなります。これも私をより混乱させていると思います。ファー プレーンを 100 に設定し、ニア プレーンを 0.1 に設定すると、それ以外のように動作します。