3

Cg シェーダー プログラムでOpenGL 状態変数(MVP マトリックスなど)にアクセスする必要があります。cgGLSetStateMatrixParameter()これらの値は、C/C++ コードなどの呼び出しを使用して手動で Cg シェーダー プログラムに渡しています。これを行う簡単な方法はありますか?

4

1 に答える 1

4

かなり最近のCg プロファイル( arbvp1以降) を使用している場合、Cg シェーダー プログラムは実際に OpenGL 状態 (MVP マトリックス、マテリアル、およびライト設定) に直接アクセスできます。これにより、これらのプログラムを書くのが楽になります。

アクセス可能な状態変数の一部を次に示します。

すべてのタイプの MVP 行列:

state.matrix.mvp
state.matrix.inverse.mvp
state.matrix.modelview
state.matrix.inverse.modelview
state.matrix.modelview.invtrans
state.matrix.projection
state.matrix.inverse.projection

光と素材の特性:

state.material.ambient
state.material.diffuse
state.material.specular
state.light[0].ambient

状態変数の完全なリストについては、Cg ユーザーズ マニュアルの「 OpenGL 状態へのアクセス、OpenGL ARB Vertex プログラム プロファイル (arbvp1)」セクションを参照してください。

ノート:

  • すべての OpenGL 状態変数は、 Cgでアクセスする場合、同じ型です。
  • ライト変数の場合、インデックス必須です。(例: state.light[1].ambient の 1 )
  • Cg 内の対応するライト値を使用するために、1 つまたは複数のライティングを有効にする必要はありません。ただし、 glLight()関数を使用して設定する必要があります。
于 2008-08-18T09:11:13.117 に答える