2012年4月18日水曜日

OpenGL FAQ 3. GLUT


OpenGL FAQ 3. GLUT

3.010 GLUT とは何ですか?それは OpenGL とどのように違うのですか?

OpenGLが、ルーチンを、windowingシステムまたは入力装置とインタフェースすることに提供しないので、アプリケーションは、この目的のためのさまざまな他のプラットフォーム具体的なルーチンを使わなければなりません。 結果は非ポータブルなコードです。

さらに、これらのプラットフォーム具体的なルーチンは全機能搭載である傾向があり、それは小さいプログラムおよび簡単なデモの建築を複雑にします

GLUTは、ウィンドウ管理、メニュー、および入力装置に、プラットフォームに依存しないインタフェースを簡単で、上品な方法で提供してこれらの問題に対処するライブラリです。 GLUTを使うことはいくらかの柔軟性の価格で来ます。

GLUTについての大量の情報はGLUT FAQにあります

3.020 GLUT を使わなければいけませんか?

アプリケーションは、GLUTが許さない事をする必要があるかもしれないか、または、それは、グラフィカルではない仕事を遂行するために、プラットフォーム具体的なライブラリを用いる必要があるかもしれません。 このケースにおいて、アプリケーションのwindowingのためのGLUTを使わないことを考慮し、ニーズを入力し、代わりに、プラットフォーム具体的なライブラリを使ってください .

あなた自身に以下の質問をしてください


"どのようにバスケットボールコートを構築する方法"
  • 私のアプリケーションは1つのプラットフォームだけにおいて動きますか
  • 私は複数の文脈を使う必要がありますか
  • 私は、ディスプレイリストまたはテクスチャーオブジェクトを文脈に分ける必要がありますか
  • 私は入力装置を使う必要があり、GLUTはインタフェースをそれに提供しませんか
  • 私は、音やテキストなどの他の仕事のためのプラットフォーム具体的なライブラリを使う必要がありますか

もしこれらの問題のうちのいくつかにはい責任を負ったならば、GLUTがアプリケーションのための右の選択であるかどうかにかかわらず評価する必要があります

3.030 左マウスボタン押下時の操作と右マウスボタン押下時とで違う動作をする必要があります。しかし一つのglutMotionFunc() しか設定できません。それはパラメータとしてボタン情報を渡すことができません。どうしたら良いでしょう?

glutGetModifiers()とそれらの状態をチェックしてSHIFT、ALT、およびCTRLキーの状態に依存している種々の仕事を容易に設定できます

左右のマウスボタンのための種々の仕事を設定するために、どのマウスボタンが使用されているかに依拠している動作機能を交換する必要があります。 glutMouseFunc()に設定するマウス機能コールバックによってこれをすることができます。 このルーチンへの最初のパラメータは、どのボタンがイベントを起こしたかを示します(GLUT_LEFT、GLUT_MIDDLE、またはGLUT_RIGHT)。 2番目のパラメータはボタン状態を示します(GLUT_UPまたはGLUT_DOWN)。

説明するために、ここには例glutMouseFunc()コールバックルーチンがあります


スプレー絵の具のは何ですか
私達の*/静的な動作機能について空のleftMotionのための/*宣言(int x、int y); 静的な空のrightMotion(int x、int y); 静的な空のmouseCallback(intマウス、int状態、int x、int y) {    ならば(state==GLUT_DOWN)       /*Aボタンが押されています。 正しい動作機能 */ならば を設定してください(button==GLUT_LEFT       )          glutMotionFunc(leftMotion);       他にならば(button==GLUT_RIGHT)          glutMotionFunc(rightButton);     } }

3.040 GLUT は何をするのですか?

しばしば、どのように十分な供給がウィンドウを作成するかを見つけ出すことが望ましいか、または入力装置、ディスプレイメニュー、または多くの他の仕事のうちの何でも処理します。 どのようにGLUTが何かをするかを見つけ出すのに最も良い方法が、GLUTソースをダウンロードしどのようにそれが手紙で知らせられるかをわかることです

3.050 GLUT でアニメーションを実行するにはどのようにしたら良いですか?

GLUTは、アプリケーションが、フレームをするためのコールバックルーチンを指定することを可能にします。 別のコールバックルーチンからglutPostRedisplay()を呼んでこのルーチンを実行することを強制できて、コントロールをglutMainLoop()に返します。

できる限り速く動くアニメーションを作成するために、アイドルなコールバックをglutIdleFunc()に設定する必要があります。 何も他に起こらない時には、パラメータとして通過するコールバックは、いつでもglutMainLoop()により実行されます。 このコールバックから、glutPostRedisplay()を呼びます。

調節されたアニメーションを作成するためには、glutIdleFunc()の代わりにglutTimerFunc()を使ってください。 glutTimerFunc()は、指定された時間経過の後にだけ、コールバックを呼びます。 このコールバックにより自身は使用不可にされます。従って継続的なアップデートのために、コールバックにより、そしてglutTimerFunc() 再度の タイマーをリセットする という両方のglutPostRedisplay()が呼ばれなければなりません。


どのようにベンチスターターソレノイドをテストしない

3.060 ウィンドウを開いた後でそのサイズを変更することはできますか(glutInitWindowSize() とglutCreateWindow() を呼んだ後で)?

いったんコードがglutMainLoop()を入力し、コールバックルーチンのうちの1つが呼ばれたら、glutReshapeWindowを呼ぶことができます(int幅、int高さ)。

直ちにglutReshapeWindow()がウィンドウをリサイズしないことに注意してください。 ウィンドウをリサイズすることは単にメッセージをGLUTに送ります。 いったんglutMainLoop()に戻ったら、このメッセージは処理されます。

3.070 GLUT プログラム起動時に割り当てるメモリ領域がある、プログラム終了時にどのようにメモリを解放すればよいか?

もしユーザーが、キープレスやメニュー選択などを捕らえることができるあるインプットを通じてプログラムを終了するならば、答えは簡単です。 単に適切な入力イベントハンドラーでメモリを解放してください。

通常、ユーザーがウインドウ・フレーム制御(例えばタイトルバーの右上角にある Microsoft Windows の Close Windowアイコン)を用いて、プログラムを終了した時にこの問題が発生します。 この場合、あなたのプログラムは、プログラムが終了であることを示しているGLUTイベントが得られません。 実のところ、ウィンドウが破壊される時、glutMainLoop()は exit(0)を単に呼び出すだけです

メモリー割当て解除などの単純な資源のために、これは問題であるはずがありません。 OSは、プロセスが使っていたどのようなメモリーでも解放します。

ユーザーに仕事を保存することを促すか、ファイルにソフトウェアバッファーで持たれるデータをフラッシュすることは、懸念となります。

C++を使う時には、この問題の最も簡単な解決策は、GLUTアプリケーションをC++クラスの中に包み、グローバルな範囲によってそれを作成することです。 C++言語は、オブジェクトが範囲から出て行く時にクラスのデストラクタが呼ばれることを保証しています。


もう一つの方法は、プログラムを終了するとき、実行する機能のアドレスを指定するためにANSI C/C++ の atexit() 呼び出しを使うことである。 それらは、グローバルな範囲によってバッファとデータポインタを宣言するので、atexit()コールバックルーチンにアクセス可能である必要があります。 より多くの情報は ANSI C/C++ のリファレンスで見つかるかもしれません。 atexit() は C/C++ でだけ利用可能です。

1つの最終的な方法としてGLUTソースをハッキングする方法があります。glutMainLoop()が破壊ウィンドウイベント/メッセージを補足する時に、明示的なコールバックをコードに追加してください。 これは、無理矢理修正を行った glutMainLoop() の機能をアプリケーションに含めなければいけない方法のため、あまりいい方法ではありません。

3.080 GLUT プログラムでユーザがウィンドウを閉じたことをどのようにして知ることができますか?

前のセクション3.070と同じです

3.090 コールしたプログラムからどのようにして glutMainLoop() へ戻ってくることができますか?

glutMainLoop()は、呼び出しルーチンに戻るためにデザインされません。 出口方法がインプットイベントコールバックルーチンを通じて捕らえてGLUTは、イベント駆動アプリケーションのアイデアのまわりでGLUTメニューやキーボードコールバックハンドラなどデザインされました。

もしglutMainLoop()からプログラムに戻ることを強く主張するならば、そうするためのほんの1つの方法があります。 それを望んでいることをするために、GLUTソースおよび雇われたgluMainLoop()をダウンロードする必要があります。 そして、プログラム glutMainLoop()のこのハッキングされたバージョン にコンパイルし、リンクしてください。 スティーブベーカーは、詳細によって、どのように、この問題を取り除くために、glutMainLoop()をハッキングするかにウェブサイトを持っています

3.100 Windows の GLUT アプリケーションからどのようにしたらコンソールウィンドウを取り除けますか?


Visual C++6.0によって、プロジェクトメニュー、Settings…ダイアログに行ってください。 リンクタブを選んでください。 プロジェクトオプション編集ボックスにおいて、/SUBSYSTEMを追加してください:WINDOWS/ENTRY:現在のテキストの終わりへのmainCRTStartup。 リンクオプションは他のWindowsコンパイラのために同様です。

3.110 私の GLUT に関する質問の回答はここにはありません。どこにより詳しい情報がありますか?

SGIのGLUT FAQはGLUTについての情報の優秀なソースです



These are our most popular posts:

Cドライブの容量不足 - Windows XP - 教えて!goo

2007年8月23日 ... 起動ドライブであるCドライブのデータや設定,構成ファイルには,Dドライブに単に「 移動」させただけでは,不具合や問題 ... (1)電源投入後,メーカーのロゴマークかBIOS 画面が消えると同時にF8キーを連打することで入ることができます。 .... 私の場合は,C ドライヴで4%,Dドライヴで2%の設定です。 ... フォルダとして「マイドキュメント保存用」 などと名前をつけて,移動先の空のフォルダを作っておく必要があります。 read more

Avast!5 私の設定方法の公開 - avast for Windows7

ここでは私の設定方法をその理由と共に公開しています。 ... ユーザーインターフェイスに ・・・」にチェックを入れることで概要タブの「今すぐ検査する」に「スクリーンセイバー検査」 が追加され詳細な設定 ... 5つのリアルタイムシールドそれぞれに設定する必要が あります。 ... (C) 2012 Avast for Windows7 日本語無料のウイルス対策 All rights reserved. read more

Windows・ユーザー名

そのため誰が使うのかを特定する必要があります。 その個人を特定 ... C:\Documents and Settings\ユーザー名(←ユーザー名は人によって違います). 人(ユーザー ... ない 場合ある. ユーザー名とペアーで使われることが多いパスワードはたまに設定されてい ない、つまり空白文字の場合があります。 ... 私のオープンソース プロジェクト. Eclipse RCP ... read more

OpenGL FAQ 3. GLUT

左右のマウスボタンのための種々の仕事を設定するために、どのマウスボタンが使用 されているかに依拠している動作機能を交換する必要があります。 glutMouseFunc()に 設定するマウス機能コールバックによってこれをすることができます。 このルーチンへの ... read more

0 件のコメント:

コメントを投稿