Когда я добавляю шейдеры (в cg) в мою программу opengl, все локальные преобразования (glRotatef, glTranslatef и glScalef между glPushMatrix и glPopMatrix) перестают работать. Преобразования за пределами push / pop все еще работают. Так в чем здесь проблема?
обновление:
У меня есть вращающийся куб в центре сцены:
glPushMatrix();
glRotatef(angle, 1, 0, 0);
drawBox();
glPopMatrix();
и после этого я отправляю матрицы шейдеров мировоззрения и мировоззрения:
cgGLSetStateMatrixParameter(
myCgVertexParam_modelViewProj,
CG_GL_MODELVIEW_PROJECTION_MATRIX,
CG_GL_MATRIX_IDENTITY
);
cgGLSetStateMatrixParameter(
myCgVertexParam_modelView,
CG_GL_MODELVIEW_MATRIX,
CG_GL_MATRIX_IDENTITY
);
Код вершинного шейдера:
void C9E2v_fog(float4 position : POSITION,
float4 color : COLOR,
out float4 oPosition : POSITION,
out float4 oColor : COLOR,
out float fogExponent : TEXCOORD1,
uniform float fogDensity, // Based on log2
uniform float4x4 modelViewProj : MODELVIEW_PROJECTION_MATRIX,
uniform float4x4 modelView : MODELVIEW_MATRIX)
{
// Assume nonprojective modelview matrix
float3 eyePosition = mul(modelView, position).xyz;
float fogDistance = length(eyePosition);
fogExponent = fogDistance * fogDensity;
oPosition = mul(modelViewProj, position);
//oDecalCoords = decalCoords;
oColor = color;
}
Таким образом, в конце куб не вращается, но если я пишу (нет push / pop)
glRotatef(angle, 1, 0, 0);
drawBox();
все отлично работает. Как мне это исправить?