Доступ к переменным состояния OpenGL в Cg - PullRequest
3 голосов
/ 18 августа 2008

Мне нужно получить доступ к переменным состояния OpenGL (таким как матрицы MVP) в моей программе шейдера Cg. Я передаю эти значения в свою программу шейдера Cg вручную, используя такие вызовы, как cgGLSetStateMatrixParameter() в моем коде C / C ++. Есть ли более простой способ сделать это?

1 Ответ

4 голосов
/ 18 августа 2008

Если вы используете какой-либо относительно недавний профиль 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

Полный список переменных состояния см. В разделе Доступ к состоянию OpenGL, профиль программы OpenGL ARB Vertex (arbvp1) в Cg Руководство пользователя .

Примечание:

  • Все переменные состояния OpenGL имеют тип одинаковый при доступе в Cg.
  • Для light переменных index является обязательным. (Например: 1 в state.light [1] .ambient )
  • Нет необходимости включать освещение или источник света, чтобы использовать соответствующие значения освещения внутри Cg. Но их нужно установить с помощью функций glLight () .
...