OpenGLについて

[戻る]
smile [E-Mail] 2002/12/04(水) 16:53:58
OpenGLについての質問ですので、場違いなのはわかってますが、
困っているのでよかったら教えてください。

以下のサンプルプログラムの目的は、青いウィンドウを表示させて、なおかつ
Dos窓に、無限ループを使って、"Hello"を連続表示させることが目的です。
しかし、MainLoop関数でプログラムが止まってしまうので。
一回しか"Hello"とDos窓に表示されません。

青いウィンドウを表示させ、なおかつdos窓には連続的に"Hello"と表示させる方法は
ありますか?(キーボード入力なしで、自動的に)

#include <GL/glut.h>
#include <stdio.h>

void display(void)
{
  glClear(GL_COLOR_BUFFER_BIT);
  glFlush();
}

void init(void)
{
  glClearColor(0.0, 0.0, 1.0, 0.0);
}

void func(void)
{
    printf("Hello\n");
}
int main(int argc, char *argv[])
{
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_RGBA);
  glutCreateWindow(argv[0]);
  glutDisplayFunc(display);
  init();
  
  while(1)
  {
     func();  
     glutMainLoop();         // glutMainLoop関数を書く位置?がわからない
  }

  return 0;
}

くたくた 2002/12/04(水) 17:09:20
void display(void)
{
  略
  func();
}

int main( 略 )
{
  略
  glutMainLoop();
  return 0; // 警告回避用
}
こんな感じで動くと思います。理由はglutMainLoop()をキーワードに検索してみて下さい。

dairygoods 2002/12/04(水) 17:15:59
glutIdleFuncではどうでしょう?

smile [E-Mail] 2002/12/04(水) 17:41:04
[[解決]]
くたくたさん、dairygoodsさんどうもありがとうございます。

くたくたさんのアドバイス通りにやってみたら、確かに"Hello"という文字列が
表示ささったのですが、何故かdos窓を青いウィンドウの上に重ねて動かさないと
Helloを連続的に表示させることができませんでした。

dairygoodsさんのglutIdlefuncを使ってみたら"Hello"を連続的に表示させることができ
ました。少しパソコンが重くなったような気もしましたが、解決しました。

くたくたさん、dairygoodsさんほんとありがとうございます!

くたくた 2002/12/04(水) 18:01:17
>何故かdos窓を青いウィンドウの上に重ねて動かさないと
>Helloを連続的に表示させることができませんでした
失礼しました!既知とは存じますが、お詫びに 両者の違いを説明させて頂きます。

o glutDisplayFunc()で設定する関数
  WM_PAINTハンドラの為、再描画時しか呼ばれない

o glutIdlefunc()で設定する関数
  アイドルハンドラの為、暇な時は常に呼ばれる

この違いです。

古いスレッドには追加発言できません。