2

gl_Position が自動的に均質化される (w で除算される) ことを期待していましたが、機能していないようです.. 以下の結果が異なるのはなぜですか?

1) void main() { vec4 p; ... 省略 ... gl_Position = ProjectionMatrix * p; }

2) ... 上と同じ ... p = 射影行列 * p; gl_Position = p / pw;

この 2 つは同じ結果を生成することになっていると思いますが、そうではないようです。1 は動作しませんが、2 は期待どおりに動作しています。精度の問題である可能性はありますか? 何か不足していますか?これは私をほとんど夢中にさせています..必要な助けが必要です。よろしくお願いします!

4

2 に答える 2

2

遠近分割は、頂点シェーダーが完了したに発生するクリッピングの前に行うことはできません。したがって、頂点シェーダーで w 分割を観察できる理由はありません。

ただし、GL は、フラグメント シェーダーが実行される前に、三角形のラスタライズの前にパースペクティブ分割を行います。

うまくいかないことは何ですか?

于 2010-04-17T09:21:37.490 に答える
1

GLSL 仕様 1.2 から:

変数 gl_Position は、頂点言語でのみ使用でき、 均一な頂点位置を書き込むことを目的としています。

したがって、自動的に均質化されません。

于 2010-04-17T08:10:04.653 に答える