3

私は最近、opengl で (freeglut を使用して) 迷路ゲームを作成しましたが、これは Ubuntu または Cygwin でビルドすると正常に動作しますが、freeglut を使用して Fedora Core 12 でビルドすると、ゲームが崩壊し、私の教授はビルド時に何も見えません。彼のマシン (彼が開示していない OS) で。

また、以前の割り当てでは、ダブル バッファリングを実装し、各ディスプレイの後にバッファをフラッシュしているにもかかわらず、ちらつきが発生しました。ちらつきは、Fedora マシンで発生しますが、Ubunutu マシンではまれに発生し、cygwin ではまったく発生しません。

最後に、Fedora マシンでは、霧が非常に濃く、'glFogf(GL_FOG_DENSITY, 0.1)' の呼び出しを無視しているようです。ただし、Cygwin と Ubuntu では、フォグは問題なく動作します。

これが問題になる OS 間の freeglut の実装間に多くの違いがありますか? 私の教授は、これらのプロジェクトで私を失敗させる準備ができているようですが、opengl がオペレーティング システム間でこのように不安定な動作をする理由がわかりません。

お時間をいただきありがとうございます。

4

2 に答える 2

2

次の 2 つの電話が順番に混同されました。このようにする必要があります。

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); glutCreateWindow("マイウィンドウ");

私はこのようにしました:

glutCreateWindow("マイウィンドウ"); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);

そのため、ダブルバッファリングされたウィンドウが保証されていなかったため、ちらつく場合とそうでない場合がありました。

また、Red-Hat ディストリビューションでは、size_t は signed int として定義されますが、Ubuntu では unsigned int が使用されます。これにより、Fedora では戻り値の型が -1 で、Ubuntu では static_cast(-1) である関数 fread() を使用しようとすると、教授のマシンでループの問題が発生しました。Ubuntu カーネル ソースの問題を突き止めるのに数日かかりました。

于 2010-08-11T03:46:41.193 に答える
0

私はOpenGLを教えた経験がありますが、この種のことは、過剰が意図したものとは異なる方法で使用された場合に発生します。一部の実装/ドライバーはそれを処理し、他の実装/ドライバーは処理しません。非標準の方法で使用される場合、実装間にかなり大きな違いがあります。標準的な方法で使用する場合、違いはかなり小さいです。

私が見た最も一般的な理由は、画面が変更されるたびに glutPostRedisplay が呼び出されていない場合です。

その他の考えられる理由は、表示関数以外の場所で描画されているか、コールバックが正しく設定されていないことです。

これ以上、何が起こっているのか推測することしかできませんが、1 つの実装で何も表示されない場合は、何か基本的な問題があると確信できます。

于 2010-07-31T05:17:22.270 に答える