当我将着色器(在 cg 中)添加到我的 opengl 程序时,所有本地转换(glRotatef、glTranslatef 和 glPushMatrix 和 glPopMatrix 之间的 glScalef)都停止工作。转换外部推送/弹出仍然有效。那么这里可能有什么问题呢?
更新:我在场景中心有一个旋转立方体:
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;
}
所以最后立方体不旋转,但如果我写(没有推/弹出)
glRotatef(angle, 1, 0, 0);
drawBox();
一切正常。我该如何解决?