2011-12-26 10 views
1

OpenGLの表示リストをコンパイルした後、その表示リストを変更する方法を教えてもらえますか?どのようにして行列の変換などを強制することができますか?OpenGLの表示リスト

ありがとうございます。

+0

は、頂点バッファオブジェクトを使用してみてください

あなたの現在のコードは次のようになります。 –

答えて

4

表示リストは不変です。一度作成すると変更することはできません。それは彼らの要点です。

マトリックスで定義された場所でレンダリングできる表示リストにジオメトリを組み込みたい場合は、単にマトリックスコマンドを表示リストに入れないでください。描画リストを表示リストに入れるだけです。そのジオメトリをレンダリングするには、設定作業(行列のものを含む)を行ってから、表示リストを実行します。

//Every frame 
glRotatef(...); 
glTranslatef(...); 

///More setup work. 

glBegin(...); 
glVertex/TexCoord/Color/etc(...); 
... 
glEnd(); 

お使いのディスプレイリストベースのコードは次のようになります:

//Initialization. Done once. 
glBeginList(...); 
glBegin(...); 
glVertex/TexCoord/Color/etc(...); 
... 
glEnd(); 
glEndList(); 

//Every frame 
glRotatef(...); 
glTranslatef(...); 
... 

glCallList(...); 
+0

それは私が理解していないものです!どのように "セットアップ作業"を行うのですか?それはどういう意味ですか?あなたは拡大できますか? (具体的には、マトリックスを何に適用するのか、それを行う方法には至っていません) – user10607

+0

@ user10607:表示リストなしでものをレンダリングできますか?もしそうなら、それをしてください。 'glBegin/End'の全てを表示リストに入れ、' glBegin/End'を使った場所でそのリストを呼び出します。表示リストがない状態でレンダリングする方法がわからない場合は、質問の言い換えをする必要があります。 –

+0

いいえ、私はこの部分にはいいです。しかし、これはシーンをレンダリングするようなものです。いつも巨大なメッシュを動かす必要があるのですが?たくさんの面と頂点があるので、すべてを表示リストにロードすることができると聞きました。リストの座標を移動するだけです(何とか!)。これははるかに高速です。すべてのフレームでOpenGLに頂点座標を供給するよりもはるかに高速です。 – user10607