プロジェクトに取り組んでおり、ラボ コンピューターには ATI シリーズ 6700 が搭載されています。プロジェクトは OpenGL を使用した C++ で作成されているため、シェーダーには GLSL を使用しています。これは基本的に Level of Detail を持つ惑星であるため、シェーダーに送信されるポリゴンの数はカメラの位置に依存し、近くにいるほどより多くのポリゴンが存在し、より鮮明になります。私は実際に詳細レベルに制限を設けていることを心に留めておいてください。そうしないと、カメラが近すぎると、非常に多くの細分化が原因ですべてがクラッシュします。
ただし、ラボのコンピューターでプログラムを実行すると、メッシュが奇妙にけいれんし (いくつかの頂点が他の位置に表示される)、最も重要なのは、近づきすぎるとフレームレートが低下し、最終的に全体がフリーズして両方の画面が回転することです。黒くなり、Windows が再び表示されると、ドライバーに問題が発生したため、回復する必要があるというメッセージが表示されます。
nvidia GT555M を搭載した個人用ラップトップでプロジェクトを実行しようとしましたが、上記の問題は発生しません。けいれん、フレームレートの低下、クラッシュはありません。また、ラボ コンピューターでシェーダーを無効にすると、プログラムはクラッシュせず、けいれんも発生しませんが、フレーム レートは依然として低下します。これらすべては、NVidia と ATI が GLSL を解釈してコンパイルする方法に関係があると思わせます。
まず第一に、私は 17x17 の頂点を持つ VBO のみを作成していると言わなければなりません。各頂点には 16 バイトしかなく、位置には 3 つの浮動小数点数、パフォーマンスのためには 4 バイトのパディングしかありません。したがって、VBO を作成して描画するときは、頂点の位置に関する情報しかないため、COLOR、TEXTURE、または NORMAL を有効にしません。
ただし、GPU 側では、非標準の GLSL などを使用している可能性があります。ATI カードは標準化された GLSL でしか動作しないと読んだことがあります。だからここに私の頂点シェーダーとフラグメントシェーダーがあります:
http://pastebin.com/DE6ijidq http://pastebin.com/Q8xUAguw
C++ が行うことは、16 x 16 の正方形の 6 つのグリッドをそれぞれ立方体の 1 辺に作成することですが、それらは原点を中心にしているので、メインの最初の行でそれらを適切に置き換えて立方体を作成することに注意してください。 、次に、爆発立方体テクニックを使用して球体にして作業します。GLSL バージョンを指定せず、さまざまな変数を使用しています。これが問題の原因である可能性があります。これを ATI カードにも対応させる方法はありますか? バージョンを指定する必要がありますか? そして、in 変数と out 変数を使用する必要がありますが、その方法は? RenderMonkey でシェーダーをテストしてきましたが、何らかの理由でまだ変化を使用しています。