-4

私は OpenGL 4.0 を使用しています。シーンには 3 つのものがあります。1-

VBO プレーン
2- キューブ マップ
3- 3D モデル [3ds/obj]

私は Assimp ライブラリを使用して 3D モデルをインポートしています。モデルをインポートするために作成したコードは、「TheCPlusPlusGuy」からの youtube のチュートリアルの助けを借りて作成されました。

これが私が直面している問題です。シーンで平面をレンダリングできます。シーンでキューブ マップ、別名スカイボックスをレンダリングでき、それらを一緒にレンダリングできます。
しかし、.3ds であれ .obj であれ、3D モデルをレンダリングしているとき、画面が更新されません。画面のサイズを変更しても、更新されません。
これは、3D モデルをレンダリングするときにのみ発生します。フラグを使用し、実行時に 3D モデルの描画を有効にしました。モデルをレンダリングするまでプログラムは正常に実行されます。モデルをレンダリングすると、モデル自体は画面に表示されませんが、画面が再びフリーズします。
私はそれをグーグルで調べましたが、他の誰もこのような問題を抱えているようには見えません.

私の主な診断は、平面、キューブマップ、および 3D モデルに VBO を使用しているためです。この問題が発生しています。

4

3 に答える 3

2

提案のリストは次のとおりです。

  • VBO の使用は問題ではありません。Assimpも使用していません。
  • バッファーと描画呼び出しで適切な数のインデックスとプリミティブを指定し、それらが適切にフォーマットされていることを確認してください。OpenGL のドキュメントでは、これらの数値が何になる必要があるか (バイト、インデックス、三角形など) が曖昧な場合があるため、適切に処理されていることを確認してください。ウィキはこれをよりよく説明しています。
  • モデルは実際に読み込み段階を通過していますか? 非常に単純なモデルを試しましたか?
  • モデルを 1 回だけロードしていることを確認してください (つまり、レンダリング ループではありません。その場合、1 回だけロードすることを保証するメカニズムがあります)。プログラムにモデルをロードするように繰り返し指示すると、プログラムの実行が非常に遅くなり、すべてのメモリを使い果たす危険性があります。
  • モデルを Assimp のデータ構造から独自のデータ構造に適切に変換したことを確認してください。値が正しく設定されていることを確認してください。OBJ をロードし、コピーしている値を出力します - それらは .obj ファイルと一致していますか?
  • モデルをロードしている時点で、有効な OpenGL コンテキストがありますか? Assimp からの読み込みには必要ありませんが、そのデータ構造から VBO への移行には必要です。

あなたはこれらのことを数多く行ってきたと思いますが、私もこのタスクを行うのに苦労しました. 一歩一歩進むことで、問題を絞り込むことができます。

于 2013-07-21T15:12:54.333 に答える
1

飛行機をレンダリングした後、これを行うのを忘れていました->

glBindVertexArray(0);

その後、プログラムは魔法のように機能していました。

于 2013-07-23T11:07:19.697 に答える
1

Assimp を使用してエディターにモデルをインポートしていますが、Assimp はモデルとメッシュ データの読み取りにのみ使用され、値は独自のモデル/メッシュ形式で保存されます。私たち全員がこれを行うと思いますか?私は Assimp に問題はありませんでした。また、スカイボックスなどは他のすべての不透明なオブジェクトの後にレンダリングする必要があると信じるようになりました。そのため、レンダリング時間を最小限に抑えるためにいくつかのトリックを実行できます (スカイボックスは最も遠いオブジェクトの 1 つと見なされます)。 )。

私は Bartek に同意する傾向があります。Assimp は、あなたが抱えている問題とは無関係のようです。レンダリング方法を再設計することを検討します。

于 2013-07-21T13:02:26.220 に答える