• 締切済み

OpenGLでのプログラミングについて質問です

http://www.wakayama-u.ac.jp/~tokoi/opengl/libglut.html#7.2 上記URLのソースについて幾つか質問です。 1.以下の用に記述すると、何故以前のラバーバンドを消去することになるのでしょうか? if (rubberband) { /* 以前のラバーバンドを消す */ glVertex2iv(point[pointnum - 1]); glVertex2iv(savepoint); } 2.以下の部分の、staticはどういう役割をしているのでしょうか? void motion(int x, int y) { static GLint savepoint[2]; /* 以前のラバーバンドの端点 */ 3.メインは、以下のように記述されているのですが、OpenGLは通常のCプログラミングと違い、上から下に順次処理されて行っているだけでなく、見えない部分でも何か処理をやっているようなのですが、どういう順序でこのmainは処理されているのでしょうか? int main(int argc, char *argv[]) { glutInitWindowPosition(100, 100); glutInitWindowSize(320, 240); glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA); glutCreateWindow(argv[0]); glutDisplayFunc(display); glutReshapeFunc(resize); glutMouseFunc(mouse); glutMotionFunc(motion); init(); glutMainLoop(); return 0; } あと、 http://www.wakayama-u.ac.jp/~tokoi/opengl/libglut.html#6.1 に書かれている、 glOrtho(-w / 200.0, w / 200.0, -h / 200.0, h / 200.0, -1.0, 1.0); という関数の意味がよく分かりません。 どなたか、どれか一つだけでも良いので解答をお願いします。

みんなの回答

  • Rulurulu
  • ベストアンサー率47% (8/17)
回答No.1

1 該当のサイトには、説明が書かれていますが、 glLogicOp()を使って色を反転させて描画して消してるそうです。 (もし、どうして反転させると消せるのかも知りたければ、 これはOpenGLというより、2次元グラフィックで良く使われる テクニックなので、その方面のサイトで調べてください。 例えばWindowsAPIのBitBltの詳しい説明をしてるサイトや本なら 解説があるかも知れません) 以下、転載 >そこでラバーバンドを描く際には, 線を背景とは異なる色で描く代わりに, 描こうとする線上の画素の色を反転するようにします. こうすればもう一度同じ線上の画素の色を反転することで, そこに描かれていた以前の線が消えてウィンドウに描かれた図形が元に戻ります. このために glLogicOp() を使用します. 2 関数内で宣言された変数は関数が終了すると破棄されますが、 staticをつければ関数が終了しても破棄されないという事です。 後は入門書を読んでください 3の質問についてですが、 見えない部分とはループ処理のことですか? 簡単にいうと、上から下に行ってglutMainLoop()まで来ると、 glutMainLoop()は動き続けてイベント処理をします。 イベント処理については、例えばWindowsプログラミングなどに 慣れてると役割を理解しやすいんですが、そうでなければ この方面の知識を持っておいたほうが良いです。

coronalith
質問者

お礼

解答有り難うございます。 どのサイトや本を見ればいいのかということを書いて貰えた方がありがたいです。

関連するQ&A