1

これに遭遇したとき、OpenGLは何をしますか:

glVertexAttribPointer(m_shader_position, 2, ....

しかし、射影行列は錐台であり、直交ではありませんか?

この2関数のは、これが2Dベクトルであることを示します。Orthoを使用して射影行列を設定すると、これらの頂点を描画できます。しかし、投影を錐台に変更しただけでは表示されなくなりますが、これの技術的な原因は何ですか?

錐台は3Dビューを示しますが、パイプラインのどの部分が2D頂点の表示を妨げていますか?

4

2 に答える 2

1

glVertexAttribPointerの前にopenglにバインドしたシェーダープログラムを見てください。2Dポイント[x、y]がvec4 [x、y、z、w]として扱われることがわかります。

  • wを指定しない場合、デフォルトで1になります。
  • zを指定しない場合、デフォルトでは0になります。

画面にポイントが表示されない場合は、錐台の外側にあることを意味します。

于 2013-03-10T15:12:18.947 に答える
1

このようにz座標を省略した場合、デフォルトで0になります。(変換後の)頂点が錐台の外側にある場合、それらは描画されません。

これを解決するには、頂点シェーダーを変更して、z座標を明示的に定数値に設定します(またはユニフォームによって提供されます)。

または、ポイントの数とメモリ要件に応じて、最初から明示的なz値を指定することもできます。

glVertexAttribPointer(m_shader_position, 3, ....
于 2013-03-10T14:31:24.217 に答える