2

最新のOpenGL技術のみを使用して正投影を設定したいと思います(つまり、即時モードのものは使用しません)。これに取り組む方法について、ウェブ上で矛盾する情報を見ています。

glMatrixMode(GL_PROJECTION)何人かの人々はそれから電話してそしてそれから大丈夫だと言っていglOrthoます。これは過去に常に機能してきましたが、これが最新のOpenGLで非推奨になっているのではないかと思います。

もしそうなら、頂点シェーダーは今日の正投影を行うための標準的な方法ですか?GLSLは、正投影を設定するための便利な組み込み関数を提供しますか、それとも頂点シェーダーでその数学を自分で書く必要がありますか?

4

3 に答える 3

4

もしそうなら、頂点シェーダーは今日の正投影を行うための標準的な方法ですか?

完全ではありません。頂点シェーダーが計算を実行しますが、変換行列は通常、ユニフォームを介してシェーダーに供給されます。シェーダーは、頂点ごとに異なるものだけを評価する必要があります。「ortho」関数を実装すると、GLSLでの射影行列の戻りは逆効果になります。

最新のOpenGL技術のみを使用して正投影を設定したいと思います(つまり、即時モードのものは使用しません)。これに取り組む方法について、ウェブ上で矛盾する情報を見ています。

バージョン3より前のOpenGLのマトリックススタックは、イミディエイトモードとは何の関係もありません。イミディエイトモードはでしたglBegin(…); for(…){ ...; glVertex(…);} glEnd()。また、OpenGLバージョン3までは、頂点シェーダーのマトリックススタックを介して指定されたマトリックスを使用するのが一般的でした。

OpenGL-3では、当初OpenGL-2で計画されていたことが目的でした。つまり、APIの統合と、古い問題の削除です。削除されたものの1つは、マトリックススタックでした。とにかく、多くのシェーダーはすでに標準の行列よりも多くを使用しているため(たとえば、スケルタルアニメーションの場合など)、行列はすでにユニフォームとして渡されており、プログラムには行列の数学コード全体が含まれています。OpenGL-3からマトリックス数学を削除するステップを踏むことは、次の論理的なステップにすぎませんでした。

于 2011-12-10T11:20:32.170 に答える
2

一般に、シェーダーでは行列を計算しません。それらをCPUで計算しuniform、シェーダーにsとしてアップロードします。したがって、頂点シェーダーは、正投影用か遠近投影用かを認識も気にもしません。与えられた射影行列によって変換されるだけです。

于 2011-12-10T01:53:54.183 に答える
0

OpenGLバージョン>3.0をターゲットにすると、glOrthoは公式仕様から削除されます(ただし、互換性プロファイルには引き続き存在します)。したがって、これ以上使用しないでください。したがって、頂点シェーダー内で直接使用する投影を計算する必要があります(OpenGLの場合は3.0 glOrthoまでは完全に問題ありません;)。

また、GLSLで射影行列を取得するための「便利な」関数はないため、自分で指定する必要があります。ただし、これは問題ありません。a)Webには多くのサンプルコードがあり、b)方程式はOpenGL仕様に正しく含まれているため、必要に応じてそこから簡単に取得できます。

于 2011-12-10T00:23:06.973 に答える