glut
ライブラリでOpenGL
を学習しています。問題は、プログラムが大きくなると処理する数字が非常に多いことです。多くの人が言っているように、プログラムではあまりにも多くの数字を使用するのはノンです。しかし、私はglobal variables
の代わりに、glutで定義されたコールバック関数にユーザ定義のパラメータを渡すことはできません。たとえば:glut(またはfreeglut)でOpenGLを書くときのグローバル変数の処理
void display (void)
{
// How to pass user defined parameters here?
// some more code
}
int
main(void)
{
glutDisplayFunc(display);
// some more code
}
だから私の質問はこれです:
- GLUTとOpenGLを書くときに、グローバル変数を処理するためにどのように?
- 関数にパラメータを渡す代わりに、グローバル変数を代入する他の方法はありますか?
- OpenGLの入出力を扱う他のライブラリ(glut)は、グローバル変数をどのように扱いますか?
実際には、関数間に多くのグローバル変数を渡す必要があります。たとえば、グローバル変数として定義された 'stepsize'の値を変更し、' keyboard'コールバック関数で処理するスペースキーを押すと、ビューアとオブジェクト(例えば)との間の距離を変更するために 'stepsize'を' display'コールバック関数に渡す必要があります。もう一つの例は、 'display()'関数に渡すためにグローバルでなければならないテクスチャオブジェクト( 'init()'関数内で)を初期化するときです。それは正しく処理されますか?またはより良い解決策がありますか? – toolchainX
@ tlh1987:コールバック関数は表示するデータを渡すべきではなく、プログラムの状態を変更する必要があります。そして、プログラム状態は、定義上、グローバルである。関数のパラメータ化によってプログラムの状態を効果的に管理するためには、本当に機能的な言語(Lisp、Scheme、OCaml、Haskellなど)が必要です。しかし、Cは大部分が不可欠です。あなたはどこかのグローバルな状態を持つことになります。 – datenwolf
ええと...実際、私は 'プログラム状態の変更'の意味を理解していませんでした。キーボードコールバック関数の 'プログラム状態'の変更方法はわかりません。グローバル変数を扱う私の以前のコメントが良い考えではないので、実用的な解決策を教えてください。私はOpenGLに関する赤い本を読んだだけで、機能的な言語についてあまり知らない。 – toolchainX