OpenGLでグラフィカルコンソールを作っています。
グラフィカルコンソールを作る際はmainの引数はint main(int argc, char* argv[])のように書くと教えていただき、私もそのように使うんだな~と、疑問はありましたが、そのように使ってきました。
ですが、わからないものをそのままにしておくのも気持ち悪いので、ネットで調べてみました。
調べてみた結果、コマンドラインというものがあり、プログラムに対して「何を・どのように」処理するかを支持するものと知りました。
int argc : int型変数・これは次の配列argvの要素数が格納されている。
char *argv[] : 実際に受け取ったコマンドライン引数の文字列が配列で格納されている。
glutInitはウィンドウを表示するためOpenGLを初期化する関数だとはわかっているのですが、
その場合、OpenGLの「glutInit(&argc, argv);」はどのような処理をしているのでしょうか?
それと、下のソースコードがループになるのは、「glutMainLoop();」でウィンドウが破棄されるまで処理がもどってこないためでよろしいでしょうか?
そして、「glutMainLoop();」内では「glutDisplayFunc(display);」「glutTimerFunc()」が状況によって処理されるのでしょうか?
「glutTimerFunc()」が1秒に1回よびだされ、glutTimerFunc()内の「glutPostRedisplay();」によってOpenGLに再描画が必要であると訴え、「glutDisplayFunc」が呼び出されるのでしょうか?
初歩的な質問になってしまいますが、どなたかわかる方教えてください<(_ _)>
C++
1#include "glut.h" 2 3void display(void) { 4 glClear(GL_COLOR_BUFFER_BIT); 5 glRotatef( 6 1, // GLfloat angle 7 0,0,1); // GLfloat x, y, z 8 9 glutWireTeapot(0.5); 10 glFlush(); 11} 12 13void timer(int value) { 14 glutPostRedisplay(); 15 16 glutTimerFunc( // 一定時間が経過するとコールバック関数を呼び出す 17 1000/60, // unsigned int millis 18 timer, // void (GLUTCALLBACK *func)(int value) 19 0); // int value 20} 21 22int main(int argc, char* argv[]) { 23 glutInit(//ウィンドウを表示させるため、GLUTを初期化 24 &argc, 25 argv); 26 glutCreateWindow("Title"); 27 glutDisplayFunc(display);//void (GLUTCALLBACK *func)(void) 28 glutTimerFunc( // 一定時間が経過するとコールバック関数を呼び出す 29 1000/60, // unsigned int millis 30 timer, // void (GLUTCALLBACK *func)(int value) 31 0); // int value 32 33 glutMainLoop(); 34}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/08 23:23