いくつかのオブジェクトをレンダリングし、それらのいくつかのテキスト ラベルを表示する openGL コードがあります。ラベルを表示するには、gluProject を使用して適切な頂点を画面に投影し、ラベルが頂点の横にくるように小さなオフセットを追加します。このようにして、各ラベルは画面上の頂点から同じ距離になります。
私は元々、これに (グリフの表示リストを除いて) 表示リストを使用していませんでした。シーン全体の表示リストを作成したところ、ラベルが正しく配置されていないことがわかりました。
しばらく時間がかかりましたが、基本的に問題を発見したと思います.gluProjectは、投影マトリックス、モデルビューマトリックス、およびビューポートをパラメーターとして受け取ります。glGetDoublev(GL_MODELVIEW_MATRIX, ...) などを呼び出す以外にそれらを提供する方法はありません。しかし、glGet 関数は表示リストでは「許可されていません」。むしろすぐに実行します。したがって、表示リストにコンパイルされるマトリックス データは、リストの実行時ではなく、リストのコンパイル時からのものです (リストをすぐに実行するのではなく、プリコンパイルする必要があるため、これは問題です)。少なくともこれは私の現在の理論です。
- これが問題を引き起こすことを誰かが確認または否定できますか?
- これをどのように解決しますか?gluProject と同じことをしたいだけですが、リストの現在の行列を使用しています。
注: openGL の最近のバージョンでは、さまざまな関数/アプローチが非推奨になっていることを認識しています。「あなたはそれをすべきではない」という行に沿って私に答えを惜しまないでください;-)