Когда я добавляю шейдеры (в cg) в мою программу opengl, все локальные преобразования (glRotatef, glTranslatef и glScalef между glPushMatrix и glPopMatrix) перестают работать. Тем не менее, преобразование снаружи push/pop все еще работает. Так в чем проблема?Shader and opengl transformations
обновление: У меня есть вращающийся куб в центре сцены:
glPushMatrix();
glRotatef(angle, 1, 0, 0);
drawBox();
glPopMatrix();
и после этого я отправить мировоззренческие и worldviewprojection матрицы в шейдер:
cgGLSetStateMatrixParameter(
myCgVertexParam_modelViewProj,
CG_GL_MODELVIEW_PROJECTION_MATRIX,
CG_GL_MATRIX_IDENTITY
);
cgGLSetStateMatrixParameter(
myCgVertexParam_modelView,
CG_GL_MODELVIEW_MATRIX,
CG_GL_MATRIX_IDENTITY
);
Vertex код шейдера:
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();
все работает нормально. Как это исправить?
Можете ли вы подробно остановиться на «прекращении работы»? Укажите ожидаемый вывод и фактический результат ... Некоторые примеры кода тоже не будут ошибочными. – LarsH
я обновил главный пост, пожалуйста, проверьте его – spacevillain