ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:coronalith 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);
という関数の意味がよく分かりません。

どなたか、どれか一つだけでも良いので解答をお願いします。
質問投稿日時:08/05/04 18:18
質問番号:3997231

回答

 

回答者:Rulurulu 1
該当のサイトには、説明が書かれていますが、
glLogicOp()を使って色を反転させて描画して消してるそうです。
(もし、どうして反転させると消せるのかも知りたければ、
これはOpenGLというより、2次元グラフィックで良く使われる
テクニックなので、その方面のサイトで調べてください。
例えばWindowsAPIのBitBltの詳しい説明をしてるサイトや本なら
解説があるかも知れません)

以下、転載
>そこでラバーバンドを描く際には, 線を背景とは異なる色で描く代わりに, 描こうとする線上の画素の色を反転するようにします. こうすればもう一度同じ線上の画素の色を反転することで, そこに描かれていた以前の線が消えてウィンドウに描かれた図形が元に戻ります. このために glLogicOp() を使用します.

2
関数内で宣言された変数は関数が終了すると破棄されますが、
staticをつければ関数が終了しても破棄されないという事です。
後は入門書を読んでください

3の質問についてですが、

見えない部分とはループ処理のことですか?
簡単にいうと、上から下に行ってglutMainLoop()まで来ると、
glutMainLoop()は動き続けてイベント処理をします。
イベント処理については、例えばWindowsプログラミングなどに
慣れてると役割を理解しやすいんですが、そうでなければ
この方面の知識を持っておいたほうが良いです。
種類:回答
どんな人:経験者
自信:自信あり
回答日時:08/05/04 22:26
回答番号:No.1
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼解答有り難うございます。

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