• 締切済み

OpenGLで複数ウィンドウ

OpenGLで複数のウィンドウを制御する方法がわかりません。 今やろうとしているのは 1つ目のウィンドウを描画(glutMainLoopで無限ループさせる) ↓ glutKeyboardFuncをつかってキーボードから入力 ↓ 入力した情報から条件分岐で2つ目のウィンドウを描画 という形を目指しているんですがうまくいきません。 2つ目のウィンドウが開くと、1つ目のウィンドウの中がぐちゃぐちゃ になってしまいます。 この形はそもそも無理なんでしょうか? なにか方法があれば教えて下さい。 よろしくお願いします。

  • rzu
  • お礼率69% (9/13)

みんなの回答

  • Yanch
  • ベストアンサー率50% (114/225)
回答No.1

GLUT を使わなければ、よいのでは?

関連するQ&A

  • openGLについて

    最近プログラムを学んでいる初心者の者です。 私は床井研究室の”GLUTによる「手抜き」OpenGL入門”というサイトを使い学んでいるのですが、最初の段階でつまずいてしまいました。 最初のウィンドウを開く段階で #include <GL/glut.h> void display(void) { } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutCreateWindow(argv[0]); glutDisplayFunc(display); glutMainLoop(); return 0; } とすると書いてあるのですが、 最初の#includeのところがペーストしてもエラーが出ます。 あと他のサイトを見ると#includeが複数書かれているようです。 何か解決する方法はありますでしょうか。 ちなみに 私が使っているのはwindows7です。 どうかお願いします。

  • OpenGLでの描画のタイミング

     OpenGLの使い方について疑問があったので質問しました.  OpenGLを用いて3Dのゲームを作っています.しかし, どうも処理が遅くカクカクした動きになってしまいます. 描画の量が多くなるにつれて遅くなっているので,原因は 描画の時に原因があるようです.ダブルバッファリング を用いて描画しているのですが,描画のときは… 1「描画関数の実行」(glVertex3f()などの実行) 2「裏に描画」(見えていないバッファに描画) 3「裏表入れ替え」(2つのバッファを交換) 0「一定時間待機して自分自身を呼び出す」            (60FPSなら1/60秒程度) を繰り返すものと考えています.  「1230」と繰り返せば通常通り動くのですが, 「1」に計算がかかりすぎると,「2」と「3」が遅れてしまい, カクカクしてしまうのだろうと考えました. (↑これがそもそも間違っていたらすいません><)  そこで,対策を2つ考えたのですが,これでいいでしょうか? それとも,もっと良い方法はないでしょうか?(「1」を 速くするしか方法はないでしょうか?) 【1】一定時間待機する秒数を可変的にする  現在のところ,「0」では,1/60秒待機させています.  しかし,1に1/30秒かかったとすると,「1230」を 1回繰り返すのに,3/60秒かかってしまうことになり, 結局FPSは20止まりです.  そこで,「123」でかかった時間を記録し,その秒数 を1/60から引いた分だけ「0」で待機すれば,1/60秒になる だろう,という方法です. 【2】描画のタイミングを変える  現在のところ,「1230」の順番で繰り返しています. しかし,これでは描画の関数を呼び出した時,「1」に 1/30秒かかったとすると,実際に表示できるのは1/30秒後 ということになります.よって,プログラムの始めに 「1232」を実行しておき,描画の関数の中身は 「3120」とする,という方法です. (そもそも,「2」と「3」のタイミングを   離せるのかどうかもよくわかりません><)  もちろん【1】と【2】の方法は併用もできると思っています. 「2」はOpenGLに入っているglFlush() 「3」はOpenGLに入っているglutSwapBuffers() 「0」はOpenGLに入っているglutTimerFunc() を用いています. 質問が長くなってしまいましたが,よろしくお願いします. 参考までに… 【OS】Mac OS10.7(Lion) 【開発環境】Xcode3 【言語】c++ 【プログラミング歴】6年(c++2年,OpenGL1年) 【CPU】2.66 GHz Intel Core 2 Duo 【メモリ】4 GB 1067 MHz DDR3

  • プログラミングのopenglで困っています.

    OpenGlの超初心者です. openglで,円を一つ作ってあるsampleプログラムを拾ってきたのですが, 円をもう一つ,別の座標で作りたいのですが,以下のプログラムをどのように編集すればいいですか? 誰か助けてください. ========================================== #include <GLUT/glut.h> #include "glut.h" #include <math.h> //--初期化処理------------------------------------------------------------------ void myinit(void){ glClearColor(1.0f, 1.0f, 1.0f, 1.0f);//背景色の設定(R,G,B,ALPHA) 0.0-1.0の範囲で } //--描画内容-------------------------------------------------------------------- void display(void){ float x1,y1,x2,y2; float th1,th2; float th1_rad, th2_rad; float hankei = 0.1; glClear(GL_COLOR_BUFFER_BIT);//画面全体を背景色で塗りつぶす glMatrixMode(GL_MODELVIEW); glLoadIdentity(); //単位行列を行列スタックに読み込む glColor3f(0.0f, 0.0f, 0.0f);//頂点カラーの指定( R, G, B すべてが1.0fなら白) for (th1 = 0.0; th1 <= 360.0; th1 = th1 + 10.0){ th2 = th1 + 10.0; th1_rad = th1 / 180.0 * 3.1415926; // 「度」を「ラジアン」に直す th2_rad = th2 / 180.0 * 3.1415926; x1 = hankei * cos(th1_rad); y1 = hankei * sin(th1_rad); x2 = hankei * cos(th2_rad); y2 = hankei * sin(th2_rad); glBegin(GL_LINES);//glBegin(GL_LINES)とglEnd()の間に glVertex2f( x1, y1 ); //描画したい直線の頂点を並べる glVertex2f( x2, y2 ); glEnd(); //ここまでで,ひとつのオブジェクトの宣言がおわる } glFlush();//OpenGLで実際に描画を行う } //--再描画---------------------------------------------------------------------- void myReshape(GLsizei w, GLsizei h){ glViewport(0,0,w,h); //ウィンドウ全体をビューポートにする glMatrixMode(GL_PROJECTION); glLoadIdentity();//単位行列を行列スタックに読み込む glOrtho(-1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f); } //--メイン関数------------------------------------------------------------------ int main(int argc, char **argv){ glutInitWindowPosition(100, 100); //(図形が描画される)ウィンドウ位置の設定 glutInitWindowSize(600, 600); //(図形が描画される)ウィンドウサイズの設定 glutInit(&argc, argv);//環境の初期化 glutInitDisplayMode(GLUT_RGBA|GLUT_SINGLE); //表示モードの設定 glutCreateWindow("kadai"); //ウィンドウを開く glutDisplayFunc(display); //図形表示関数の指定 myinit(); glutReshapeFunc(myReshape); //座標軸・ビューポート設定関数の指定 glutMainLoop();//無限ループ return 0; } ==========================================

  • openGLにおいて描画した物体によってできる影

    OpenGLで3次元オブジェクトを描画する際, 光源の位置によって物体の明るい場所と暗い場所を 表現する方法は知っています.(glShadeModel(GL_SMOOTH);など) しかし,このような方法ではオブジェクトにできる影は光源と オブジェクトの形状のみに依存し, その他のオブジェクトに影響されません. そこで,添付した画像のように, 「複数の3次元オブジェクトを描画した際に, 一方のオブジェクトがもう一方のオブジェクトによって影ができる」 という風に描画するにはどうすればよいですか? ご存知の方がいましたら,どうか教えていただけないでしょうか. よろしくお願いします.

  • OpenGLで登録したコールバック関数の引数

    OpenGLで画面を描画をする際に, 以下のソースのように,glutDisplayFuncに関数を登録しています. main関数で,定義した定数や,そのポインタを display_funcに渡したいと思うのですが, どのような方法があるのでしょうか? 現在,私は,グローバル変数を定義して,それをmain関数とdisplay関数で いじっています. ソースコードの整理,関数化のため,できれば,ポインタや引数を渡したいです. どうぞよろしくお願いします. --------------------------------------------- #include <GL/glut.h> void display_func(void) { 描画内容を記述 } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutCreateWindow(argv[0]); glutDisplayFunc(display_func); glutMainLoop(); return 0; } ---------------------------------------------

  • 【C++でOpenGL】平面から立体を作るには

    こんにちは。最近大学の研究にOpenGLを利用しようと思っている者です。 今,2次元座標上に平面図形を描画し,それを底面をその形のまま 3次元座標上に立体として起こす,という点で悩んでいます。 現在は,3次元座標上のx,y平面にGL_POLYGONで多角形を描画し, for文でz軸方向に繰り返し描画するよう設定していて, 擬似的に立体っぽくしてはいるのですが, 真横からみるとやはり平面と平面の隙間が目立って上手くいきません。 繰り返し回数を増やし,1回のz座標の増加量を小さくすると, 隙間はあまり目立たなくなるのですが,やはり実行時間が大幅にかかってしまいます。 OpenGLで底面が多角形の3Dオブジェクトを描画する方法を ご存知の方がいらっしゃいましたら,ぜひご指導お願い致します。 また,「こうした方がもっと効率良いのでは?」という意見もございましたら, ぜひお願い致します! 殆ど初心者ですので,受け答えなどに至らない点がございましたらすみません。

  • バッチファイルで、キーボードより入力

    バッチファイルにより、複数のバッチファイルを切り替えて使いたいのですが、条件分岐IFで、分岐するために、キーボードより英数文字を入力し、それにより条件分岐する。プログラムを知りたいのですが、よろしくお願いします。

  • vc++のpictureboxにopenGLの画像を描画する方法につい

    vc++のpictureboxにopenGLの画像を描画する方法について。 現在、Visual C++ 2010のフォームアプリケーションで、任意のパラメータを入力したらその値に応じて物体の動きが変わるといったアプリケーションを開発しています。その動き方をopenGLでアニメーションとして可視化したいと思っています。そして、そのアニメーションをvc++のフォームアプリケーションのpictureboxに表示したいと思っているのですが、vc++とopenGLのどちらもかなりの初心者なので、pictureboxへの表示の仕方がわかりません。 以下に参考URLを貼らせていただきます。このようなものにパラメータを入力する部分を設けたものを作りたいのですが、まったく意味がわかりません。どなたかご教授お願いいたします。 http://www.t-pot.com/program/127_OpenGLNET/index.html

  • X Window上でのOpenGLの使用

    お世話になっております. C++で書いたOpenGLを用いたプログラムをlinux上で演算させ, x WindowでWindowsのPC上に3次元描画をするために, 現在,試行錯誤をしております. (3次元描画と格好いい文言ですが,所詮,点列や辺の描画なんですが・・・) そのプログラムの実行過程で, 描画関数において,エラーが出ていて,それに関する質問です. 現在の状況として, プログラムのコンパイルは出来ております.一応,コンパイラはicpcを使ってます. で,実行エラーとして, freeglut (./a.out): OpenGL GLX extension not supported by display '***.***.***.***:0.0' と出ております. このエラーは,glCreatWindow()という関数でエラーが返されており, X Windowを用いて表示するためには,他のライブラリが必要であると考えました. そこで,調査したところ, XGLというライブラリの存在を知りました. 私の理解では, XGLとは,X WindowでOpenGLを使用するためのドライバー的なライブラリだと理解しております. そこで,使い方を調査しているのですが, ネット検索の段階で,全く掲載ページがない, (書籍の調査は明日以降かなと・・・) ということで,ここに質問させていただきました. 具体的なプログラミングの仕方,参考Webページ,書籍等 や, そもそも,XGLなんて間違っていて,他に使用すべきライブラリがある, とか... 出来れば,C++で書いた現在のプログラムに, 少しだけの変更で収められるようなモノが良いな...と欲張りなことも思っています... ご存じであれば,教えていただきたく,お願い申し上げます. ソースコードは... 数千行のプログラムなので,ちょっと勘弁願いたく...

  • PHPで301転送をかけた時に無限ループをさせない方法はありますか?

    PHPで301転送をかけた時に無限ループをさせない方法はありますか? SEO対策でindex.html付きのURLを無しに301転送をかけて統一したいのですが無限ループが起こります。 302転送だとループは起こりません。 .htaccessで制御するしか無限ループを抑える方法はないのでしょうか。

    • 締切済み
    • PHP