当我编写以下代码时,一切正常,并显示一个椭圆体。
void HandModelCreator::drawModel(){
palm();
}
void HandModelCreator::palm(){
glColor4f(0.6, 0.0, 0.0, 0.0);
glScalef(1.0, 0.3, 0.45);
glutSolidSphere (0.4, 20, 20);
}
我正在尝试创建一个分层模型&需要使用glPushMatrix()和glPopMatrix()。所以,我尝试了以下代码,但没有真正有效。没有显示椭圆体。为什么?我做错了什么?
void HandModelCreator::drawModel(){
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPushMatrix();
palm();
glPopMatrix();
}
void HandModelCreator::palm(){
glColor4f(0.6, 0.0, 0.0, 0.0);
glScalef(1.0, 0.3, 0.45);
glutSolidSphere (0.4, 20, 20);
}
答案 0 :(得分:2)
为什么在推送堆栈中的矩阵之前调用glLoadIdentity()
?堆栈的想法是,在您进行更改之前,您需要先进行更改。
此外,我认为你根本不需要glLoadIdentity()
,因为这会重置整个模型视图矩阵(即你所拥有的任何转换层次都会消失):
这更接近你真正需要的东西:
void HandModelCreator::drawModel(){
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
palm();
glPopMatrix();
}
答案 1 :(得分:1)
在推送矩阵之前,将其设置为identity(使用glLoadIdentity
)。这当然会取消累积到模型视图矩阵中的所有先前的变换,并且很可能是您看不到任何内容的原因。
我建议你深入研究一下OpenGL转换管道和矩阵转换的工作方式。